Пример #1
0
        //处理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);
        }
Пример #2
0
        //处理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);
            }
        }