websocket-sharp/README.md
2012-08-04 16:13:03 +09:00

6.9 KiB

websocket-sharp

websocket-sharp is a C# implementation of WebSocket protocol client & server.

Usage

WebSocket Client

Step 1

Required namespaces.

using WebSocketSharp;
using WebSocketSharp.Frame;

WebSocket class exists in WebSocketSharp namespace, WebSocket data frame resources (e.g. WsFrame class) exist in WebSocketSharp.Frame namespace.

Step 2

Creating instance of WebSocket class.

using (WebSocket ws = new WebSocket("ws://example.com"))
{
  ...
}

WebSocket class inherits IDisposable interface, so you can use using statement.

Step 3

Setting WebSocket event handlers.

WebSocket.OnOpen event

WebSocket.OnOpen event is emitted immediately after WebSocket connection has been established.

ws.OnOpen += (sender, e) =>
{
  ...
};

e has come across as EventArgs.Empty, so there is no operation on e.

WebSocket.OnMessage event

WebSocket.OnMessage event is emitted each time WebSocket data frame is received.

ws.OnMessage += (sender, e) =>
{
  ...
};

Type of received WebSocket data frame is stored in e.Type (WebSocketSharp.MessageEventArgs.Type, its type is WebSocketSharp.Frame.Opcode), so you check it out and you determine which item you should operate.

switch (e.Type)
{
  case Opcode.TEXT:
    ...
    break;
  case Opcode.BINARY:
    ...
    break;
  default:
    break;
}

If e.Type is Opcode.TEXT, you operate e.Data (WebSocketSharp.MessageEventArgs.Data, its type is string).

If e.Type is Opcode.BINARY, you operate e.RawData (WebSocketSharp.MessageEventArgs.RawData, its type is byte[]).

WebSocket.OnError event

WebSocket.OnError event is emitted when some error is occurred.

ws.OnError += (sender, e) =>
{
  ...
};

Error message is stored in e.Message (WebSocketSharp.ErrorEventArgs.Message, its type is string), so you operate it.

WebSocket.OnClose event

WebSocket.OnClose event is emitted when WebSocket connection is closed.

ws.OnClose += (sender, e) =>
{
  ...
};

Close status code is stored in e.Code (WebSocketSharp.CloseEventArgs.Code, its type is WebSocketSharp.Frame.CloseStatusCode) and reason of close is stored in e.Reason (WebSocketSharp.CloseEventArgs.Reason, its type is string), so you operate them.

Step 4

Connecting to server using WebSocket.

ws.Connect();

Step 5

Sending data.

ws.Send(data);

WebSocket.Send method is overloaded.

data types are string, byte[] and FileInfo class.

Step 6

Closing WebSocket connection.

ws.Close(code, reason);

If you want to close WebSocket connection explicitly, you can use Close method.

Type of code is WebSocketSharp.Frame.CloseStatusCode, type of reason is string.

WebSocket.Close method is overloaded (In addition Close() and Close(code) exist).

WebSocket Server

Step 1

Required namespaces.

using WebSocketSharp;
using WebSocketSharp.Frame;

Same as WebSocket Client.

Step 2

Creating instance of WebSocketServer class.

WebSocketServer wssv = new WebSocketServer("ws://example.com:4649");

If you set WebSocket url without port number, WebSocketServer set 80 or 443 to port number automatically. So it is necessary to run with root permission.

$ sudo mono example2.exe

Step 3

Setting WebSocketServer event handlers.

WebSocketServer.OnConnection event

WebSocketServer.OnConnection event is emitted each time client makes a connection request.

wssv.OnConnection += (sender, e) =>
{
  ...
};

WebSocket to communicate with client is stored in e.Socket (WebSocketSharp.ConnectionEventArgs.Socket, its type is WebSocketSharp.WebSocket), so you operate it.

WebSocket ws = e.Socket;
ws.OnMessage += (sender_, e_) =>
{
  ...
};

Same settings of WebSocket event handlers as WebSocket Client.

This WebSocket is server-side, so data is sent from server to client.

If you want to function as echo server that returns a data to client as it is received,

// Echo
ws.Send(e_.Data);

If you want to function as chat server that returns a data to all clients,

// Chat
wssv.Send(e_.Data);
WebSocketServer.OnError event

WebSocketServer.OnError event is emitted when some error is occurred.

wssv.OnError += (sender, e) =>
{
  ...
};

Error message is stored in e.Message (WebSocketSharp.ErrorEventArgs.Message, its type is string), so you operate it.

Step 4

Starting server.

wssv.Start();

Step 5

Sending data to all clients.

wssv.Send(data);

WebSocketServer.Send method is overloaded.

data types are string and byte[].

Step 6

Stopping server.

wssv.Stop();

Examples

Examples of using websocket-sharp.

Example

Example connects to the Echo server using the WebSocket.

Example1

Example1 connects to the Audio Data delivery server using the WebSocket (Example1 is only implemented a chat feature, still unfinished).

Example1 uses Json.NET.

Example2

Example2 starts WebSocket server.

Supported WebSocket Protocol

websocket-sharp supports RFC 6455.

Reference

Thx for translating to japanese.

License

Copyright © 2010 - 2012 sta.blockhead

Licensed under the MIT License.