//处理WebSocket消息路由 private void HandleMessage(WebSocket_Msg msg) { var client = WebSocket_Coons.Get(msg.SendClientId); switch (msg.Action.ToLower()) { case "@*join*@": client.Channel = msg.MsgStr; break; case "@*leave*@": //置空Channel,模拟关闭连接 client.Channel = ""; client.WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); WebSocket_Coons.Remove(client); break; default: break; } WebSocket_Server.HandleMsg_Event(msg); }
//处理WebSocket初始 public async Task Invoke(HttpContext context) { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { //初始新连接对象 System.Net.WebSockets.WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); string clientId = Guid.NewGuid().ToString();; var wsClient = new WebSocket_Coon { ID = clientId, WebSocket = webSocket }; try { //握手通信告知连接ID号 await WebSocket_Server.SendMessageAsync(wsClient, "clientId", "handshake", ""); //开始处理消息监听 await Handle(wsClient); } catch (Exception ex) { await context.Response.WriteAsync("closed"); } } else { context.Response.StatusCode = 404; } } else { await _next(context); } }