public async Task Invoke(HttpContext context)
        {
            if (!context.WebSockets.IsWebSocketRequest)
            {
                return;
            }

            var socket = await context.WebSockets.AcceptWebSocketAsync();

            await Receive(socket, async (result, buffer) =>
            {
                if (result.MessageType == WebSocketMessageType.Text)
                {
                    SocketMessage message = await _webSocketHandler.ReceiveAsync(socket, result, buffer);
                    if ((bool)message?.Code?.Equals("connect"))
                    {
                        SocketMessageConnectionInfo socketMessageConnectionInfo = message.Data.ToJSON().FromJSON <SocketMessageConnectionInfo>();
                        await _webSocketHandler.OnConnected(socket, socketMessageConnectionInfo);

                        SocketMessage connectionResultMessage = new SocketMessage()
                        {
                            Code = "connected",
                            Data = "connected successfully"
                        };

                        await _webSocketHandler.SendMessageAsync(socketMessageConnectionInfo.Id, connectionResultMessage.ToJSON());
                    }

                    return;
                }

                else if (result.MessageType == WebSocketMessageType.Close)
                {
                    await _webSocketHandler.OnDisconnected(socket);
                    return;
                }
            });
        }
 public void AddSocket(WebSocket socket, SocketMessageConnectionInfo socketMessageConnectionInfo)
 {
     _sockets.TryAdd(socketMessageConnectionInfo.Id, socket);
 }
示例#3
0
 public virtual async Task OnConnected(WebSocket socket, SocketMessageConnectionInfo socketMessageConnectionInfo)
 {
     await Task.Run(() => { SocketConnectionManager.AddSocket(socket, socketMessageConnectionInfo); });
 }