SimpleWebsocketServer 1.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package SimpleWebsocketServer --version 1.0.2                
NuGet\Install-Package SimpleWebsocketServer -Version 1.0.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SimpleWebsocketServer" Version="1.0.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SimpleWebsocketServer --version 1.0.2                
#r "nuget: SimpleWebsocketServer, 1.0.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SimpleWebsocketServer as a Cake Addin
#addin nuget:?package=SimpleWebsocketServer&version=1.0.2

// Install SimpleWebsocketServer as a Cake Tool
#tool nuget:?package=SimpleWebsocketServer&version=1.0.2                

SimpleWebSocketServer Library

SimpleWebSocketServer Library is designed as a simplistic library in use wich provides a middleware for the programmer to handle websocket connections. The library targets the most popular frameworks within .NET such as: .NET FrameWork 4.5 to 4.7 and .NET Core 2.0 & 2.1 and should work with Mono. The programmer just needs 4 lines of code to start and stop the server. The middleware has the following features:

  • Hubs (multiple websocket end-points).
  • Multiple Clients.
  • Clients can create their own ID (By appending it to the connection url).
  • Clients can connect without specifying a ID (Automatically generated on the server).
  • Single Event Handler.
  • Configurable Port, End-points & (Receive)BufferSize.
  • Pre-configured HTTP Server as negotiater for the WebSocket Protocol. (Default runs at port 80, no SSL support for now).
  • Both Asynchronous and Synchronous methods.

In case the programmer want's to use it's own HTTP Server for the negotiation for the WebSocket Protocol, he can use the inner classes of the library such as the WebSocketServer class. (See down below for a quick setup).

Installation

You can get the NuGet package from here: NuGet. You can get the dll files here: GitHub Releases.

Usage - Middleware

The quickest way to get started:

SimpleWebSocketServer websocketServer = new SimpleWebSocketServer();      
websocketServer.WebsocketServerEvent += OnWebsocketEvent;
websocketServer.StartServer();
Console.ReadKey();
bool stopped = websocketServer.StopAll("Server had enough, RIP server.");

And the event handler method:

private static void OnWebsocketEvent(object sender, WebSocketEventArg args)
{
    if (args.data != null && args.isText)
    {
        string received = Encoding.UTF8.GetString(args.data);
        _WebsocketServer.SendTextMessage("Client: " + args.clientId + " on url: " + args.clientBaseUrl + ", says: " + received);
    }
}

As you can see this is written with synchronous methods. If you want to use asynchronous methods, just add Async behind the method name.

For more information about the WebSocketEventArg class and other classes, go to this page: DoxygenWiki -WebSocketEventArg.

You can provide the constructor of the middleware class SimpleWebSocketServer with the following class with parameters to customize your settings, here you can also find the default values used: DoxygenWiki - SimpleWebSocketServerSettings.

Usage - WebSocketServer Class (Advanced)

If you just want to get WebSocket to work, just use the MiddleWare class writen above. But, in case you do want full control, or if you already have a HTTP Server and don't want to run a seperate HTTP Server just for WebSockets, and yours has the capability to Negotiate the WebSocket protocol (see: Mozilla WebSocket API), you can use this class to handle further WebSocket protocol communication.

Here is a basic overview on how to use it:

WebSocketClientInfo webSocketClientInfo = new WebSocketClientInfo()
{
    clientId = "GENERATE CLIENT ID",
    clientBaseUrl = "URL CLIENT USED TO CONNECT",
    client = new System.Net.Sockets.TcpClient() // TCP CLIENT RETREIVED FROM HTTP SERVER AFTER WEBSOCKET UPGRADE
};

WebSocketServer newServer = new WebSocketServer(webSocketClientInfo);
newServer.WebSocketServerEvent += OnWebsocketEvent;
newServer.StartServer();
Console.ReadKey();
newServer.StopServer();

If you want to use asynchronous methods instead of synchronous, you can just like with the middleware append Async to the end of the method name. Example newServer.StartServer() becomes newServer.StartServerAsync().

The eventhandler is the same as with the middleware class.

Full (Doxygen generated) Wiki

GitHub Wiki DoxyGen Wiki

Development

The library was designed and made with the intention to be used in hobby projects and to mess with WebSockets. I wrote this to learn about the WebSocket protocol in general and it isn't really intended to be used within an actual production environment. Why? Because I don't want to spend to much time on this side project which in turn leads to the lack of support. I will fix big issues if there are no workarounds, but appart from that, don't expect much development & help.

I will probably be using it alongside my other hobby projects, whenever I encounter an issue with the library, you can expect me to release the fix for it here as well.

Todos

  • Write unit tests.

License

MIT

Free Software, Hell Yeah!

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 is compatible.  netcoreapp2.1 is compatible.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Framework net45 is compatible.  net451 was computed.  net452 was computed.  net46 is compatible.  net461 was computed.  net462 was computed.  net463 was computed.  net47 is compatible.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 2.0

    • No dependencies.
  • .NETCoreApp 2.1

    • No dependencies.
  • .NETFramework 4.5

    • No dependencies.
  • .NETFramework 4.6

    • No dependencies.
  • .NETFramework 4.7

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0 2,272 8/21/2018
1.0.2 952 7/9/2018
1.0.1 936 6/21/2018
1.0.0 895 6/18/2018

-Fixed bug where server thinks connection is open when unexpectedly closing the websocket connection (by closing or refreshing a webpage with a websocket client on chrome for example).