Server and Client Wrappers (Auto-Reconnect, Auto-Join)
Object oriented. Don't worry about bits and bytes. Send and receive objects
Optional RSA encryption for TCP and UDP
Use lambdas, delegates or even async operations to send and receive objects
Useful helpers to quickly send small information, without creating an object
Logging for debugging or traffic inspection
No magic numbers, identifiers or configurations required
Very fast and relieable (6-10ms RTT)
Highly customizable
OpenSource and Free to use
Example Client
publicvoidDemo(){ConnectionResultconnectionResult= ConnectionResult.TCPConnectionNotAlive;//1. Establish a connection to the server.TcpConnectiontcpConnection= ConnectionFactory.CreateTcpConnection("127.0.0.1",1234,out connectionResult);//2. Register what happens if we get a connectionif(connectionResult== ConnectionResult.Connected){
Console.WriteLine($"{tcpConnection.ToString()} Connection established");//3. Send a raw data packet request.
tcpConnection.SendRawData(RawDataConverter.FromUTF8String("HelloWorld","Hello, this is the RawDataExample!"));
tcpConnection.SendRawData(RawDataConverter.FromBoolean("BoolValue",true));
tcpConnection.SendRawData(RawDataConverter.FromBoolean("BoolValue",false));
tcpConnection.SendRawData(RawDataConverter.FromDouble("DoubleValue",32.99311325d));//4. Send a raw data packet request without any helper class
tcpConnection.SendRawData("HelloWorld", Encoding.UTF8.GetBytes("Hello, this is the RawDataExample!"));
tcpConnection.SendRawData("BoolValue", BitConverter.GetBytes(true));
tcpConnection.SendRawData("BoolValue", BitConverter.GetBytes(false));
tcpConnection.SendRawData("DoubleValue", BitConverter.GetBytes(32.99311325d));}}
Example Server
publicvoidDemo(){//1. Start listen on a portserverConnectionContainer= ConnectionFactory.CreateServerConnectionContainer(1234,false);//2. Apply optional settings.
#region Optional settings
serverConnectionContainer.ConnectionLost +=(a,b,c)=> Console.WriteLine($"{serverConnectionContainer.Count}{b.ToString()} Connection lost {a.IPRemoteEndPoint.Port}. Reason {c.ToString()}");
serverConnectionContainer.ConnectionEstablished +=connectionEstablished;
serverConnectionContainer.AllowUDPConnections =true;
serverConnectionContainer.UDPConnectionLimit =2;
#endregion Optional settings
//Call start here, because we had to enable the bluetooth property at first.
serverConnectionContainer.Start();}/// <summary>/// We got a connection./// </summary>/// <param name="connection">The connection we got. (TCP or UDP)</param>privatevoidconnectionEstablished(Connectionconnection,ConnectionTypetype){
Console.WriteLine($"{serverConnectionContainer.Count}{connection.GetType()} connected on port {connection.IPRemoteEndPoint.Port}");//3. Register packet listeners.
connection.RegisterRawDataHandler("HelloWorld",(rawData,con)=> Console.WriteLine($"RawDataPacket received. Data: {rawData.ToUTF8String()}"));
connection.RegisterRawDataHandler("BoolValue",(rawData,con)=> Console.WriteLine($"RawDataPacket received. Data: {rawData.ToBoolean()}"));
connection.RegisterRawDataHandler("DoubleValue",(rawData,con)=> Console.WriteLine($"RawDataPacket received. Data: {rawData.ToDouble()}"));}
Async Example
publicasyncvoidDemo(){//1. Establish a connection to the server.ClientConnectionContainercontainer= ConnectionFactory.CreateClientConnectionContainer("127.0.0.1",1234);//2. Register what happens if we get a connection
container.ConnectionEstablished +=async(connection,type)=>{ Console.WriteLine($"{type.ToString()} Connection established");//3. Send a request packet async and directly receive an answer.CalculationResponseresponse=await connection.SendAsync<CalculationResponse>(new CalculationRequest(10,10)); Console.WriteLine($"Answer received {response.Result}");};}
Delegate Example
privateClientConnectionContainercontainer;publicvoidDemo(){//1. Establish a connection to the server.container= ConnectionFactory.CreateClientConnectionContainer("127.0.0.1",1234);//2. Register what happens if we get a connection
container.ConnectionEstablished +=connectionEstablished;}privatevoidconnectionEstablished(Connectionconnection,ConnectionTypetype){
Console.WriteLine($"{type.ToString()} Connection established");//3. Register what happens if we receive a packet of type "CalculationResponse"
container.RegisterPacketHandler<CalculationResponse>(calculationResponseReceived,this);//4. Send a calculation request.
connection.Send(new CalculationRequest(10,10),this);}privatevoidcalculationResponseReceived(CalculationResponseresponse,Connectionconnection){//5. CalculationResponse received.
Console.WriteLine($"Answer received {response.Result}");}
Lambda Example
publicvoidDemo(){//1. Establish a connection to the server.ClientConnectionContainercontainer= ConnectionFactory.CreateClientConnectionContainer("127.0.0.1",1234);//2. Register what happens if we get a connection
container.ConnectionEstablished +=(connection,type)=>{ Console.WriteLine($"{type.ToString()} Connection established");//3. Register what happens if we receive a packet of type "CalculationResponse" connection.RegisterPacketHandler<CalculationResponse>((response,con)=> Console.WriteLine($"Answer received {response.Result}"),this);//4. Send a calculation request. connection.Send(new CalculationRequest(10,10),this);};}
RSA Example
publicasyncvoidDemo(){//1. Establish a connection.ClientConnectionContainercontainer= ConnectionFactory.CreateSecureClientConnectionContainer("127.0.0.1",1234);//2. Register what happens if we get a connection
container.ConnectionEstablished +=(connection,type)=>{ Console.WriteLine($"{type.ToString()} Connection established");//3. Register what happens if we receive a packet of type "CalculationResponse" connection.RegisterPacketHandler<CalculationResponse>((response,con)=> Console.WriteLine($"Answer received {response.Result}"),this);//4. Send a calculation request. connection.Send(new CalculationRequest(10,10),this);};}