Como acompanhar as conexões estabelecidas usando WebSockets

Estou tentando obter um serviço de bate-papo em tempo real para dispositivos de plataforma cruzada. O problema é queSystem.Net.WebSockets O namespace não me permite acompanhar diretamente uma conexão estabelecida. Eu poderia ter um sessionID da conexão atual, mas como posso dizer executar a seguinte açãoawait socket.SendAsync(buffer, WebSocketMessageType.Text, CancellationToken.None) para um cliente específico?

Se eu pudesse usarMicrosoft.WebSockets, Eu teria a possibilidade de criar umWebSocketCollection() e fazer algo comoclient.Send(message), mas não consigo enviar umArraySegment<byte[]> através dele. Eu também acho que isso é mais direcionado para clientes e sites AJAX e essas coisas.

Agora tenho o seguinte trecho de código:

public class WSHandler : IHttpHandler
{
    event NewConnectionEventHandler NewConnection;
    public void ProcessRequest(HttpContext context)
    {
        if (context.IsWebSocketRequest)
        {
            context.AcceptWebSocketRequest(ProcessWSChat);
        }
    }

    public bool IsReusable { get { return false; } }
    private async Task ProcessWSChat(AspNetWebSocketContext context)
    {
        WebSocket socket = context.WebSocket;
        int myHash = socket.GetHashCode();
        while (true)
        {
        ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
        WebSocketReceiveResult result = await socket.ReceiveAsync(
            buffer, CancellationToken.None);
            if (socket.State == WebSocketState.Open)
            {
                string userMessage = Encoding.ASCII.GetString(
                    buffer.Array, 0, result.Count);
                userMessage = "You sent: " + userMessage + " at " +
                    DateTime.Now.ToLongTimeString() + " from ip " +
                    context.UserHostAddress.ToString();
                buffer = new ArraySegment<byte>(
                    Encoding.ASCII.GetBytes(userMessage));
                await socket.SendAsync(
                    buffer, WebSocketMessageType.Text, true, CancellationToken.None);
            }
            else
            {
                break;
            }
        }
    }
}

Como posso estender meu projeto, salvar as sessões / conexões e chamar uma conexão de usuário específica para enviar uma mensagem?

questionAnswers(2)

yourAnswerToTheQuestion