90 lines
3.8 KiB
Markdown
90 lines
3.8 KiB
Markdown
|
Finally Websockets specifically for Tesses.WebServer
|
||
|
====================================================
|
||
|
|
||
|
I implemented websockets for [Tesses.WebServer](https://gitlab.tesses.net/tesses50/tesses.webserver)
|
||
|
|
||
|
|
||
|
How To Use (Class inheriting from Server)
|
||
|
==========================================
|
||
|
public class SomeClass : Server
|
||
|
{
|
||
|
public override async Task GetAsync(ServerContext ctx)
|
||
|
{
|
||
|
await ctx.StartWebSocketConnectionAsync(async(sendMessage,ping,token)=>{
|
||
|
await sendMessage(WebSocketMessage.Create("Greetings"));
|
||
|
//send messages from here or add sendMessage to List<Func<WebSocketMessage,Task>>
|
||
|
|
||
|
while(!token.IsCancellationRequested)
|
||
|
{
|
||
|
await Task.Delay(100); //you might want to ping here too await ping(new byte[]{42,42,42,42});
|
||
|
}
|
||
|
},async(message)=>{
|
||
|
//message
|
||
|
bool isBinary=message.Binary;
|
||
|
if(isBinary)
|
||
|
{
|
||
|
byte[] data = message.Data;
|
||
|
}else{
|
||
|
string text = message.Text;
|
||
|
//or SomeType data = message.DecodeJson<SomeType>(); for json Data
|
||
|
}
|
||
|
},(clean)=>{
|
||
|
//the socket is closed
|
||
|
//clean means clean exit
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
How To Use (RoutableServer)
|
||
|
==============================
|
||
|
routable.Add("/socket",async(ctx)=>{
|
||
|
await ctx.StartWebSocketConnectionAsync(async(sendMessage,ping,token)=>{
|
||
|
await sendMessage(WebSocketMessage.Create("Greetings"));
|
||
|
//send messages from here or add sendMessage to List<Func<WebSocketMessage,Task>>
|
||
|
|
||
|
while(!token.IsCancellationRequested)
|
||
|
{
|
||
|
await Task.Delay(100); //you might want to ping here too await ping(new byte[]{42,42,42,42});
|
||
|
}
|
||
|
},async(message)=>{
|
||
|
//message
|
||
|
bool isBinary=message.Binary;
|
||
|
if(isBinary)
|
||
|
{
|
||
|
byte[] data = message.Data;
|
||
|
}else{
|
||
|
string text = message.Text;
|
||
|
//or SomeType data = message.DecodeJson<SomeType>(); for json Data
|
||
|
}
|
||
|
},(clean)=>{
|
||
|
//the socket is closed
|
||
|
//clean means clean exit
|
||
|
});
|
||
|
});
|
||
|
|
||
|
How To Use (SwagmeServer)
|
||
|
=========================
|
||
|
swagme.Add("/socket",async(ctx)=>{
|
||
|
await ctx.StartWebSocketConnectionAsync(async(sendMessage,ping,token)=>{
|
||
|
await sendMessage(WebSocketMessage.Create("Greetings"));
|
||
|
//send messages from here or add sendMessage to List<Func<WebSocketMessage,Task>>
|
||
|
|
||
|
while(!token.IsCancellationRequested)
|
||
|
{
|
||
|
await Task.Delay(100); //you might want to ping here too await ping(new byte[]{42,42,42,42});
|
||
|
}
|
||
|
},async(message)=>{
|
||
|
//message
|
||
|
bool isBinary=message.Binary;
|
||
|
if(isBinary)
|
||
|
{
|
||
|
byte[] data = message.Data;
|
||
|
}else{
|
||
|
string text = message.Text;
|
||
|
//or SomeType data = message.DecodeJson<SomeType>(); for json Data
|
||
|
}
|
||
|
},(clean)=>{
|
||
|
//the socket is closed
|
||
|
//clean means clean exit
|
||
|
});
|
||
|
},,new SwagmeDocumentation("WebSocket endpoint","A cool websocket endpoint"),group: "Real time comms");
|