public async Task Invoke(HttpContext context) { if (!context.WebSockets.IsWebSocketRequest) { return; } var socket = await context.WebSockets.AcceptWebSocketAsync(); string token = context.Request.Query["token"]; string userName = string.Empty; string UserId = string.Empty; if (!string.IsNullOrEmpty(token) && token != "null") { TokenModelJwt tokenModelJwt = JWTTokenService.SerializeJwt(token); userName = tokenModelJwt.Name; UserId = tokenModelJwt.Uid.ToString(); } else { var Json = new WebSocketUpdateResponse <string>() { state = 200, type = 100 }.ToJson(); await _webSocketHandler.SendMessageAsync(socket, Json); await Task.Delay(1000); await connectionManager.CloseSocket(socket); return; } var websocketItem = connectionManager.GetSocketByModel(UserId); if (websocketItem != null) { var Json = new WebSocketUpdateResponse <string>() { state = 200, type = websocketItem.token != token ? 500 : 100 }.ToJson(); await _webSocketHandler.SendMessageAsync(websocketItem.socket, Json); await Task.Delay(1000); await connectionManager.RemoveSocket(UserId); } var ipaddress = context.Connection.RemoteIpAddress.ToIPv4String(); var userAgent = context.Request.Headers["User-Agent"]; var agent = new UserAgent(userAgent); var Browser = $"{agent.Browser?.Name} {agent.Browser?.Version}"; var OS = $"{agent.OS?.Name} {agent.OS?.Version}"; var webSocket = new WebSocketModel() { connectstate = true, connectTime = DateTime.Now, Guid = UserId, socket = socket, userName = userName, Browser = Browser, ip = ipaddress, OS = OS, token = token }; _webSocketHandler.OnConnectedAsync(webSocket); await Receive(socket, async (result, buffer) => { if (result.MessageType == WebSocketMessageType.Text) { await _webSocketHandler.ReceiveAsync(token, socket, result, buffer); return; } else if (result.MessageType == WebSocketMessageType.Close) { await _webSocketHandler.OnDisconnected(socket); return; } }); }
public virtual void OnConnectedAsync(WebSocketModel webSocket) { WebSocketConnectionManager.AddSocket(webSocket); }
public void AddSocket(WebSocketModel webSocket) { _sockets.GetOrAdd(webSocket.Guid, webSocket); }