Skip to content

JeffreyZksun/websocket-sharp

 
 

Repository files navigation

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 a 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) =>
{
  ...
};

Frame 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 namespace.

using WebSocketSharp.Server;

WebSocketServer<T> class and WebSocketService class exist in WebSocketSharp.Server namespace.

Step 2

Creating a class that inherits WebSocketService class.

For example, if you want to provide the echo service,

using System;
using WebSocketSharp;
using WebSocketSharp.Server;

public class Echo : WebSocketService
{
  protected override void onMessage(object sender, MessageEventArgs e)
  {
    Send(e.Data);
  }
}

For example, if you want to provide the chat service,

using System;
using WebSocketSharp;
using WebSocketSharp.Server;

public class Chat : WebSocketService
{
  protected override void onMessage(object sender, MessageEventArgs e)
  {
    Publish(e.Data);
  }
}

If you override onMessage method, it is bound to server side WebSocket.OnMessage event.

In addition, if you override onOpen, onError and onClose methods, each of them is bound to WebSocket.OnOpen, WebSocket.OnError and WebSocket.OnClose events.

Step 3

Creating a instance of WebSocketServer<T> class.

var wssv = new WebSocketServer<Echo>("ws://example.com:4649");

Type of T inherits WebSocketService class, so you can use a class that was created in Step 2.

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

$ sudo mono example2.exe

Step 4

Setting WebSocketServer event handler.

WebSocketServer.OnError event

WebSocketServer<T>.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 5

Starting server.

wssv.Start();

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.

About

C# implementation of WebSocket protocol client & server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published