Как отслеживать установленные соединения с помощью WebSockets

Я пытаюсь оживить чат-сервис для кроссплатформенных устройств в режиме реального времени. Проблема в том, чтоSystem.Net.WebSockets Пространство имен не позволяет мне напрямую отслеживать установленное соединение. Я мог бы взять sessionID текущего соединения, но как я могу сказать выполнить следующее действиеawait socket.SendAsync(buffer, WebSocketMessageType.Text, CancellationToken.None) для конкретного клиента?

Если бы я мог использоватьMicrosoft.WebSocketsЯ бы имел возможность создатьWebSocketCollection() и делать что-то вродеclient.Send(message), но я не могу отправитьArraySegment<byte[]> через это. Я также думаю, что это больше предназначено для клиентов и веб-сайтов AJAX и тому подобного.

Теперь у меня есть следующий фрагмент кода:

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;
            }
        }
    }
}

Как я могу расширить свой проект, сохранить сеансы / соединения и вызвать конкретное пользовательское соединение, чтобы отправить ему сообщение?

Ответы на вопрос(2)

Ваш ответ на вопрос