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); }
public virtual async Task OnConnected(WebSocket socket, SocketMessageConnectionInfo socketMessageConnectionInfo) { await Task.Run(() => { SocketConnectionManager.AddSocket(socket, socketMessageConnectionInfo); }); }