Exemplo n.º 1
0
        private async Task ProcessWebSocketRequest(AspNetWebSocketContext context)
        {
            var pairs = Request.GetQueryNameValuePairs().ToList();

            if (pairs.Any())
            {
                var player    = pairs.First();
                var webSocket = context.WebSocket;
                GameLogicHandler.AddPlayer(player.Value, webSocket);
                await GameLogicHandler.NewGame();

                byte[] receiveBuffer = new byte[1024];
                while (webSocket.State == WebSocketState.Open)
                {
                    try
                    {
                        var receiveResult = await webSocket.ReceiveAsync(new ArraySegment <byte>(receiveBuffer), CancellationToken.None);

                        if (receiveResult.Count > 0)
                        {
                            string s      = Encoding.UTF8.GetString(receiveBuffer, 0, receiveBuffer.Length).Replace("\0", string.Empty).ToString();
                            var    answer = JsonConvert.DeserializeObject <Answer>(s);
                            await GameLogicHandler.EvaluateAnswer(answer);
                        }
                    }
                    catch (Exception e)
                    {
                        // To do
                    }
                }
            }
        }
        private Task ProcessWebsocketSession(AspNetWebSocketContext context)
        {
            var handler     = new Hubs.WebSocketEventHandler();
            var processTask = handler.ProcessWebSocketRequestAsync(context);

            return(processTask);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 部分Handler过程参考:http://www.cnblogs.com/lookbs/p/MVC-IMG.html
        /// </summary>
        /// <param name="webSocketContext"></param>
        /// <returns></returns>
        public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocketContext)
        {
            //Gets the current WebSocket object.
            System.Net.WebSockets.WebSocket webSocket = webSocketContext.WebSocket;

            /*We define a certain constant which will represent
             * size of received data. It is established by us and
             * we can set any value. We know that in this case the size of the sent
             * data is very small.
             */
            const int maxMessageSize = 1024;

            //Buffer for received bits.
            var receivedDataBuffer = new ArraySegment <Byte>(new Byte[maxMessageSize]);

            var cancellationToken = new CancellationToken();


            WebSocketHelper webSocketHandler = new WebSocketHelper(webSocket, cancellationToken);
            var             messageHandler   = WebSocketConfig.WebSocketMessageHandlerFunc.Invoke();

            if (webSocket.State == WebSocketState.Connecting)
            {
                if (WebSocketConfig.WebSocketMessageHandlerFunc != null)
                {
                    await messageHandler.OnConnecting(webSocketHandler);//调用MessageHandler
                }
            }

            //Checks WebSocket state.
            await HandleMessage(webSocket);
        }
Exemplo n.º 4
0
        private async Task ProcessWebsocketSession(AspNetWebSocketContext context)
        {
            var ws = context.WebSocket;

            new Task(async() =>
            {
                var inputSegment = new ArraySegment <byte>(new byte[1024]);

                while (true)
                {
                    // MUST read if we want the state to get updated...
                    var result = await ws.ReceiveAsync(inputSegment, CancellationToken.None);

                    if (ws.State != WebSocketState.Open)
                    {
                        break;
                    }
                }
            }).Start();

            while (true)
            {
                if (ws.State != WebSocketState.Open)
                {
                    break;
                }
                else
                {
                    byte[] binaryData = { 0xde, 0xad, 0xbe, 0xef, 0xca, 0xfe };
                    var    segment    = new ArraySegment <byte>(binaryData);
                    await ws.SendAsync(segment, WebSocketMessageType.Binary,
                                       true, CancellationToken.None);
                }
            }
        }
        private async Task ProcessWSChat(AspNetWebSocketContext arg)
        {
            WebSocket socket = arg.WebSocket;

            while (true)
            {
                ArraySegment <byte> buffer = new ArraySegment <byte>(new byte[1024]);
                //WebSocketReceiveResult result = await socket.ReceiveAsync(buffer,CancellationToken.None);//等待前端发送消息
                if (socket.State == WebSocketState.Open)
                {
                    //string message = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    //string returnMessage = "You send :" + message + ". at" + DateTime.Now.ToLongTimeString();
                    //buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(returnMessage));
                    //await socket.SendAsync(buffer, WebSocketMessageType.Text, true,CancellationToken.None);
                    if (!string.IsNullOrWhiteSpace(Config.Indicator))
                    {
                        Thread.Sleep(5000);
                        string sendMsg = $"两秒后主动推送消息,测试websocket,Indicator值为{Config.Indicator}。";
                        buffer = new ArraySegment <byte>(Encoding.UTF8.GetBytes(sendMsg));
                        await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                }
                else
                {
                    break;
                }
            }
        }
Exemplo n.º 6
0
        Task ProcessWebSocketRequest(AspNetWebSocketContext context)
        {
            var socket     = context.WebSocket;
            var connection = new LiveClientConnection(socket);

            return(connection.Start());
        }
Exemplo n.º 7
0
        private async Task WebSocketRequest(AspNetWebSocketContext context)
        {
            // Получаем сокет клиента из контекста запроса
            var clientSocket = context.WebSocket;
            // Слушаем его
            var buffer = new ArraySegment <byte>(new byte[1024]);
            // Ожидаем данные от него
            var result = await clientSocket.ReceiveAsync(buffer, CancellationToken.None);

            byte[] cleanBuffer = buffer.Array.Where(b => b != 0).ToArray();

            int id = 0;

            if (cleanBuffer.Length > 0)
            {
                id = Convert.ToInt32(Encoding.UTF8.GetString(buffer.Array));
            }

            if (clientSocket.State == WebSocketState.Open)
            {
                Thread closing = new Thread(async() => await GetUsers.isClosedConnection(clientSocket));
                closing.Start();
            }
            while (clientSocket.State == WebSocketState.Open)
            {
                //var res = clientSocket.ReceiveAsync(buffer, CancellationToken.None);//Единственный ответ, который мы можем получить- инф о закрытии сокета и => мы завершим его обработку
                await GetDialogs(context, id);

                Thread.Sleep(30000);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 无论是SuperSocket还是WebSocket都需要心跳包,需要健康检查,每隔多长时间去发送一条消息,浏览器定时发送消息给服务器,
        /// 服务器接收到某一条特定的消息之后,马上回复给浏览器,那就表示连接是正常的;否则就需要去重新连接,其实就是短信重连;
        /// </summary>
        /// <param name="aspNetWebSocketContext"></param>
        /// <returns></returns>
        public async Task handSocket(AspNetWebSocketContext aspNetWebSocketContext)
        {
            WebSocket socket = aspNetWebSocketContext.WebSocket;

            //保存起来
            SocketManger.AddSocket(_name, Guid.NewGuid().ToString(), socket);

            CancellationToken token = new CancellationToken();

            while (socket.State == WebSocketState.Open)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[8192]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, token);

                string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                if (!string.IsNullOrEmpty(userMessage))
                {
                    //前端调用关闭事件
                    if (result.MessageType == WebSocketMessageType.Close)
                    {
                        //如果是群聊的话,则要把该用户从Socket的list中移除
                        await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, token);
                    }
                    else
                    {
                        SocketManger.SendOne(userMessage, token);
                    }
                }
            }
        }
Exemplo n.º 9
0
        private static async Task SendAsync(AspNetWebSocketContext socketContext, string message, int retryCount)
        {
            var data         = Encoding.UTF8.GetBytes(message + " => " + WebSocketCollection.Instance.Count.ToString());
            var arraySegment = new ArraySegment <byte>(data);

            try
            {
                var context = socketContext;
                var socket  = context.WebSocket;
                await socket.SendAsync(arraySegment, WebSocketMessageType.Text, true, CancellationToken.None);
            }
            catch (InvalidOperationException ex)
            {
                await Task.Delay(1000);

                if (retryCount > 0)
                {
                    await SendAsync(socketContext, message, --retryCount);
                }
            }
            catch (Exception ex)
            {
                return;
            }
        }
Exemplo n.º 10
0
        private async Task ProcessInLabSocket(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;

            while (true)
            {
                if (socket.State == WebSocketState.Open)
                {
                    InLabArea[] areas = GetInLab();
                    int         count = areas.SelectMany(x => x.Clients).Count();

                    ArraySegment <byte> buffer = new ArraySegment <byte>(new byte[2048]);
                    var response = new { Timestamp = DateTime.Now, Count = count, Areas = areas };

                    buffer = new ArraySegment <byte>(Encoding.UTF8.GetBytes(Provider.Utility.Serialization.Json.SerializeObject(response)));
                    await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

                    await Task.Delay(10000);
                }
                else
                {
                    break;
                }
            }
        }
Exemplo n.º 11
0
        public async Task ProcessSocket(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;

            while (true)
            {
                ArraySegment <byte> buffer = new ArraySegment <byte>(new byte[1024]);
                Console.WriteLine("Buffer Amount: " + buffer);

                //Asynchrounously wait for a message to arrive from a client
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                //If the socket is still open, echo the message back to the client
                if (socket.State == WebSocketState.Open)
                {
                    string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                    userMessage = "You sent: ' " + userMessage + " ' at " + DateTime.Now.ToLongTimeString();
                    buffer      = new ArraySegment <byte>(Encoding.UTF8.GetBytes(userMessage));

                    //Asynchronously send a message to the client
                    await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {
                    break;
                }
            }
        }
Exemplo n.º 12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private async Task ProcessChat(AspNetWebSocketContext context)
        {
            WebSocket         socket            = context.WebSocket;
            CancellationToken cancellationToken = new CancellationToken();

            //ChatManager.AddUser(_UserName, socket);

            //某人登陆后,给群里其他人发  登陆消息
            //await ChatManager.SendMessage(cancellationToken, $"{DateTime.Now.ToString("yyyyMMdd-HHmmss:fff")} {this._UserName} 进入聊天室");

            while (socket.State == WebSocketState.Open)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[2048]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, cancellationToken);

                if (result.MessageType == WebSocketMessageType.Close) //如果输入帧为取消帧,发送close命令
                {
                    //放在前面移除和发消息,  因为直接关浏览器会导致CloseAsync异常
                    //ChatManager.RemoveUser(_UserName);
                    //await ChatManager.SendMessage(cancellationToken, $"{DateTime.Now.ToString("yyyyMMdd-HHmmss:fff")} {this._UserName} 离开聊天室");
                    await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, String.Empty, cancellationToken);
                }
                else//获取字符串
                {
                    string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    string content = $"{DateTime.Now.ToString("yyyyMMdd-HHmmss:fff")} {this._UserName} 发送了:{userMsg}";
                    //await ChatManager.SendMessage(cancellationToken, content);
                }
            }
        }
        private async Task ProcessRequestInternal(AspNetWebSocketContext ctx)

        {
            System.Diagnostics.Debug.WriteLine("In socket");

            WebSocket socket = ctx.WebSocket;

            await socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes("Hello")), WebSocketMessageType.Text, true, CancellationToken.None);

            ArraySegment <byte> buffer = new ArraySegment <byte>(new byte[1024]);

            while (true)
            {
                var retVal = await socket.ReceiveAsync(buffer, CancellationToken.None);

                if (retVal.CloseStatus != null)
                {
                    await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Bye", CancellationToken.None);

                    return;
                }

                await socket.SendAsync(new ArraySegment <byte>(buffer.Array, 0, retVal.Count), retVal.MessageType, retVal.EndOfMessage, CancellationToken.None);
            }
        }
Exemplo n.º 14
0
        public async Task WebSocketRequestHandler(AspNetWebSocketContext context)
        {
            var socket = context.WebSocket;

            Debug.AddSocket(socket);

            const int maxMessageSize = 1024;

            if (socket.State == System.Net.WebSockets.WebSocketState.Open)
            {
                var receiveBuffer     = new ArraySegment <Byte>(new Byte[maxMessageSize]);
                var cancellationToken = new CancellationToken();

                while (true)
                {
                    var content = await socket.ReceiveAsync(receiveBuffer, cancellationToken);

                    if (content.MessageType == System.Net.WebSockets.WebSocketMessageType.Close)
                    {
                        Debug.RemoveSocket(socket);
                        break;
                    }
                    else
                    {
                        var text = Encoding.UTF8.GetString(receiveBuffer.Array, 0, content.Count);
                        Debug.HandleMessage(text);
                    }
                }
            }
        }
Exemplo n.º 15
0
        private Task ProcessWebsocketSession(AspNetWebSocketContext context)
        {
            ChatWebSocketHandler handler = new ChatWebSocketHandler("a");
            var processTask = handler.ProcessWebSocketRequestAsync(context);

            return(processTask);
        }
Exemplo n.º 16
0
        private async Task ProcessWSChat(AspNetWebSocketContext arg)
        {
            WebSocket socket = arg.WebSocket;

            if (socketFirst == null)
            {
                socketFirst = socket;
            }
            while (true)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                if (socket.State == WebSocketState.Open)
                {
                    string message       = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    string returnMessage = "You send :" + message + ". at" + DateTime.Now.ToLongTimeString();
                    buffer = new ArraySegment <byte>(Encoding.UTF8.GetBytes(returnMessage));
                    await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

                    var response = TryRevokeBiz(message);

                    await SendToFirst(socket, returnMessage + " to first");
                }
                else
                {
                    break;
                }
            }
        }
Exemplo n.º 17
0
        private async Task ProcessRequestInternal(AspNetWebSocketContext context)
        {
            var socket = context.WebSocket;

            var userId = Guid.NewGuid();

            var tableIdInput = GetTableInput(context);

            var tableId = _tables.AddUserToTable(tableIdInput, userId, socket);

            var clientConnected = true;

            while (true)
            {
                if (socket.State == WebSocketState.Open)
                {
                    if (clientConnected)
                    {
                        await ProcessConnectedClientAsync(socket, tableId, userId);

                        clientConnected = false;
                    }
                    var message = await _messageExchanger.ReceiveMessageAsync(socket);

                    await _messageProcessor.ProcessMessageAsync(message, userId, tableId);
                }
                else
                {
                    await ProcessDisconnectedClientAsync(tableId, userId);

                    break;
                }
            }
        }
Exemplo n.º 18
0
        /// <summary>
        /// 接收前端发送的数据
        /// </summary>
        /// <param name="arg"></param>
        /// <returns></returns>
        private async Task ProcessChat(AspNetWebSocketContext arg)
        {
            WebSocket socket = arg.WebSocket;
            string key = arg.SecWebSocketKey;
            if (!dicSockets.ContainsKey(key))
            {
                dicSockets.Add(key, socket);
            }


            while (true)
            {
                ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024 * 10]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                if (socket.State == WebSocketState.Open)
                {
                    //前端发送的命令
                    string message = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                }
                else
                {
                    dicSockets.Remove(key);
                    break;
                }
            }
        }
Exemplo n.º 19
0
        Task ProcessWebSocketRequest(AspNetWebSocketContext context)
        {
            var socket     = context.WebSocket;
            var connection = new DemoWebSocketHandler(socket);

            return(connection.Start());
        }
Exemplo n.º 20
0
        public async Task PushExampleData(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;

            while (true)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                if (socket.State == WebSocketState.Open)
                {
                }
                else
                {
                    break;
                }

                /*
                 *
                 * ArraySegment buffer = new ArraySegment(new byte[1024]);
                 * WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                 * if (socket.State == WebSocketState.Open)
                 * {
                 *  string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                 *  userMessage = "You sent: " + userMessage + " at " + DateTime.Now.ToLongTimeString();
                 *  buffer = new ArraySegment(Encoding.UTF8.GetBytes(userMessage));
                 *  await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                 * }
                 * else
                 * {
                 *  break;
                 * }*/
            }
        }
Exemplo n.º 21
0
        public async Task WebSocketRequestHandler(AspNetWebSocketContext webSocketContext)
        {
            var       webSocket          = webSocketContext.WebSocket;
            const int maxMessageSize     = 4096;
            var       receivedDataBuffer = new ArraySegment <byte>(new byte[maxMessageSize]);
            var       cancellationToken  = new CancellationToken();

            while (webSocket.State == WebSocketState.Open)
            {
                var webSocketReceiveResult = await webSocket.ReceiveAsync(receivedDataBuffer, cancellationToken);

                if (webSocketReceiveResult.MessageType == WebSocketMessageType.Close)
                {
                    await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure,
                                               String.Empty, cancellationToken);
                }
                else
                {
                    var payloadData    = (receivedDataBuffer.Array ?? throw new InvalidOperationException()).Where(b => b != 0).ToArray();
                    var receivedString = System.Text.Encoding.UTF8.GetString(payloadData, 0, payloadData.Length);
                    if (String.IsNullOrEmpty(receivedString))
                    {
                        return;
                    }
                    //Write to db
                    var data    = JsonConvert.DeserializeObject <WifiConnection>(receivedString);
                    var context = WifiFactory.GetContext();
                    context.WifiConnections.Add(data);
                    context.SaveChanges();
                }
            }
        }
        public async Task SendMsg(string msg, AspNetWebSocketContext C)
        {
            var cancellationToken = new CancellationToken();

            Byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);
            await C.WebSocket.SendAsync(new ArraySegment <byte>(bytes), WebSocketMessageType.Text, true, cancellationToken);
        }
Exemplo n.º 23
0
        /// <summary>
        /// 群发
        /// </summary>
        /// <param name="socketContext"></param>
        /// <returns></returns>
        public async Task ProcessChat(AspNetWebSocketContext socketContext)
        {
            //  SuperSocket:Session
            // 表示客户端发起请求的一个链接
            System.Net.WebSockets.WebSocket socket = socketContext.WebSocket;

            CancellationToken token = new CancellationToken();

            string socketGuid = Guid.NewGuid().ToString();

            OldChatManager.AddUser(socketGuid, UserName, socket, token);

            await OldChatManager.SengdMessage(token, UserName, "进入聊天室");

            while (socket.State == WebSocketState.Open)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[2048]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, token);

                string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count); // 来自于客户端发送过来的消息内容

                if (result.MessageType == WebSocketMessageType.Close)
                {
                    OldChatManager.RemoveUser(socketGuid);
                    await OldChatManager.SengdMessage(token, UserName, "离开聊天室");

                    await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, token);
                }
                else
                {
                    await OldChatManager.SengdMessage(token, UserName, userMessage);
                }
            }
        }
Exemplo n.º 24
0
        private async Task AcceptCallback(AspNetWebSocketContext webSocketContext)
        {
            OwinWebSocketWrapper wrapper = null;

            try
            {
                wrapper = new OwinWebSocketWrapper(webSocketContext);
                await _webSocketFunc(wrapper.Environment);

                // Making sure to close the web socket is not necessary, Asp.Net will do this for us.
                wrapper.Dispose();
            }
            catch (Exception ex)
            {
                if (wrapper != null)
                {
                    wrapper.Cancel();
                    wrapper.Dispose();
                }

                // traced as warning here because it is re-thrown
                Trace.WriteWarning(Resources.Trace_WebSocketException, ex);
                throw;
            }
        }
Exemplo n.º 25
0
        private async Task UserFunc(AspNetWebSocketContext aspNetWebSocketContext)
        {
            var model = new WebSocketModel()
            {
                SecWebSocketKey       = aspNetWebSocketContext.SecWebSocketKey,
                SecWebSocketProtocols = aspNetWebSocketContext.SecWebSocketProtocols?.ToList(),
                SecWebSocketVersion   = aspNetWebSocketContext.SecWebSocketVersion,
                WebSocket             = aspNetWebSocketContext.WebSocket,
                UserName = aspNetWebSocketContext.User.Identity.Name
            };

            webSockets.Add(model);
            while (true)
            {
                var buffer = new ArraySegment <byte>(new byte[64]);
                var webSocketReceiveResult = await model.WebSocket.ReceiveAsync(buffer, CancellationToken.None);

                if (model.WebSocket.State == WebSocketState.Open)
                {
                    var receiveMessage = Encoding.UTF8.GetString(buffer.Array, 0, webSocketReceiveResult.Count);
                    var sendMessage    = "You send :" + receiveMessage + ". at" + DateTime.Now.ToLongTimeString();
                    buffer = new ArraySegment <byte>(Encoding.UTF8.GetBytes(sendMessage));
                    await model.WebSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {
                    break;
                }
            }
        }
        public async Task ProcessAsync(AspNetWebSocketContext context)
        {
            var socket     = context.WebSocket;
            var recvBuffer = new byte[1024];

            while (socket.State == WebSocketState.Open)
            {
                using (var ms = new MemoryStream())
                {
                    WebSocketReceiveResult result;

                    do
                    {
                        result = await socket.ReceiveAsync(
                            new ArraySegment <byte>(recvBuffer),
                            CancellationToken.None
                            );

                        ms.Write(recvBuffer, 0, result.Count);
                    } while (!result.EndOfMessage);

                    await socket.SendAsync(
                        new ArraySegment <byte>(ms.ToArray()),
                        WebSocketMessageType.Text,
                        true,
                        CancellationToken.None
                        );
                }
            }
        }
Exemplo n.º 27
0
 public void Send(string message, AspNetWebSocketContext context)
 {
     foreach (var item in WebSocketCollection.Instance.Values)
     {
         Broker.Send(item.Context, message);
     }
 }
Exemplo n.º 28
0
        private async Task UserThread(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            //获取Socket所要绑定的用户实体
            UserEntity ue = ReconnectUserManager.Instance.GetContainUser(context.QueryString["userName"]);

            ue.ConnectedSocket = socket;


            //把用户从重连实体池转移到在线实体池
            ReconnectUserManager.Instance.RemoveUserEntity(ue);
            UserManager.Instance.RegUser(ue);

            ue.InitUserConnect();//当用户连接时的初始化操作,把用户引入属于各自状态的空间

            //循环等待并获取客户端信息
            while (true)
            {
                if (socket.State == WebSocketState.Open)
                {
                    ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[2048]);
                    WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                    string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);//发送过来的消息

                    //--------------------测试------------------------
                    LobbyManager.Instance.AddRoom(new LobbyRoomEntity());
                }
            }
        }
Exemplo n.º 29
0
        private async Task ProcessWSChat(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;

            while (true)
            {
                ArraySegment <byte>    buffer = new ArraySegment <byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(
                    buffer, CancellationToken.None);

                if (socket.State == WebSocketState.Open)
                {
                    string userMessage = Encoding.UTF8.GetString(
                        buffer.Array, 0, result.Count);
                    userMessage = "You sent: " + userMessage + " at " +
                                  DateTime.Now.ToLongTimeString();
                    buffer = new ArraySegment <byte>(
                        Encoding.UTF8.GetBytes(userMessage));
                    await socket.SendAsync(
                        buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {
                    break;
                }
            }
        }
Exemplo n.º 30
0
        public async Task WebSocketRequest(AspNetWebSocketContext context)
        {
            // Получаем сокет клиента из контекста запроса
            var socket = context.WebSocket;

            WsConnectionManager.AddWebSocket(socket);

            // Слушаем его
            while (socket.State == WebSocketState.Open)
            {
                var receiveBuffer = new ArraySegment <byte>(new byte[MsgBufferSize]);

                // Ожидаем данные от него
                var receiveResult = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);

                var stringResult = BufferMsgToString(receiveBuffer, receiveResult.Count);

                AddReceivedMsgToChatRoom(stringResult);

                //Передаём сообщение всем клиентам
                await WsConnectionManager.SendChatMessageToAll(stringResult);
            }
            // Если программа дошла сюда, значит, соединение закрылось
            // Удаляем сокет
            WsConnectionManager.DeleteWebSocket(socket);
        }