WebSocket Server
Keywords: WebSocket
Create a WebSocket Server
At first, you should reference the package SuperSocket.WebSocket.Server
dotnet add package SuperSocket.WebSocket.Server --version 2.0.0-*
Then add the using statement
using SuperSocket.WebSocket.Server;
Let's create the WebSocket server. This server just echo messages back to the client
var host = WebSocketHostBuilder.Create()
    .UseWebSocketMessageHandler(
        async (session, message) =>
        {
            await session.SendAsync(message.Message);
        }
    )
    .ConfigureAppConfiguration((hostCtx, configApp) =>
    {
        configApp.AddInMemoryCollection(new Dictionary<string, string>
        {
            { "serverOptions:name", "TestServer" },
            { "serverOptions:listeners:0:ip", "Any" },
            { "serverOptions:listeners:0:port", "4040" }
        });
    })
    .ConfigureLogging((hostCtx, loggingBuilder) =>
    {
        loggingBuilder.AddConsole();
    })
    .Build();
await host.RunAsync();
Define commands to handle messages
Define at least one command
class ADD : IAsyncCommand<WebSocketSession, StringPackageInfo>
{
    public async ValueTask ExecuteAsync(WebSocketSession session, StringPackageInfo package)
    {
        var result = package.Parameters
            .Select(p => int.Parse(p))
            .Sum();
        await session.SendAsync(result.ToString());
    }
}
Register the command
builder
    .UseCommand<StringPackageInfo, StringPackageConverter>(commandOptions =>
    {
        // register commands one by one
        commandOptions.AddCommand<ADD>();
    });
The type parameter StringPackageConverter is the type which can convert WebSocketPackage to your application package.
class StringPackageConverter : IPackageMapper<WebSocketPackage, StringPackageInfo>
{
    public StringPackageInfo Map(WebSocketPackage package)
    {
        var pack = new StringPackageInfo();
        var arr = package.Message.Split(' ', 3, StringSplitOptions.RemoveEmptyEntries);
        pack.Key = arr[0];
        pack.Parameters = arr.Skip(1).ToArray();
        return pack;
    }
}