/// <summary> /// 接收处理过程 /// </summary> /// <param name="receiveCount"></param> protected override void ReceiveProcess(int receiveCount) { _databuffer.AddBuffer(_buffer, receiveCount); //将收到的数据添加到缓存器中 while (_databuffer.GetData(out _socketData)) //取出一条完整数据 { _commandHandler.AddCommand(_socketData); } }
private async Task Invoke() { ListenHeartBeat(); OnConnected(); Clients.Add(ConnectionId, this); var buffer = new byte[acceptContext.Option.ReceiveBufferSize]; var data = new DataBuffer(); var result = await acceptContext.WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); while (!result.CloseStatus.HasValue) { if (result.MessageType == WebSocketMessageType.Close) { break; } data.AddBuffer(buffer, result.Count); if (result.EndOfMessage) { var bytes = HandleResult(result.MessageType, data); data.Clear(); if (bytes != null) { await acceptContext.WebSocket.SendAsync(new ArraySegment <byte>(bytes, 0, bytes.Length), result.MessageType, result.EndOfMessage, CancellationToken.None); } } result = await acceptContext.WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); } if (result.CloseStatus.HasValue) { await acceptContext.WebSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); } ManualClose(); }
private async Task InvokeAsync() { ListenHeartBeat(); OnConnected(); Clients.Add(ConnectionId, this); var buffer = new byte[acceptContext.Option.ReceiveBufferSize]; var data = new DataBuffer(); while (acceptContext.WebSocket.State == WebSocketState.Open) { var result = await acceptContext.WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), cancelToken.Token); if (result.MessageType == WebSocketMessageType.Close) { await acceptContext.WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close response received", cancelToken.Token); break; } data.AddBuffer(buffer, result.Count); if (result.EndOfMessage) { lastReceivedTime = DateTime.Now; var bytes = HandleResult(result.MessageType, data); data.Clear(); if (bytes != null) { await acceptContext.WebSocket.SendAsync(new ArraySegment <byte>(bytes, 0, bytes.Length), result.MessageType, result.EndOfMessage, cancelToken.Token); } } Thread.Sleep(100); } ManualClose(); }
/// <summary> /// 接受网络数据 /// </summary> private void _onReceiveSocket() { while (true) { if (!clientSocket.Connected) { _isConnected = false; _ReConnect(); break; } try { int receiveLength = clientSocket.Receive(_tmpReceiveBuff); if (receiveLength > 0) { _databuffer.AddBuffer(_tmpReceiveBuff, receiveLength); //将收到的数据添加到缓存器中 while (_databuffer.GetData(out _socketData)) //取出一条完整数据 { sEvent_NetMessageData tmpNetMessageData = new sEvent_NetMessageData(); tmpNetMessageData._eventType = _socketData._protocallType; tmpNetMessageData._eventData = _socketData._data; //锁死消息中心消息队列,并添加数据 lock (MessageCenter.eventTable) { Debug.Log(tmpNetMessageData._eventType); //这里是否需要区分游戏协议和大厅协议 MessageCenter.Broadcast(MsgDefine.Msg_RespNetMessage, tmpNetMessageData); } } } } catch (System.Exception e) { Debug.Log(e); clientSocket.Disconnect(true); clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); break; } } }
/// <summary> /// 接受网络数据 /// </summary> private void _onReceiveSocket() { while (true) { if (!clientSocket.Connected) { _isConnected = false; _ReConnect(); break; } try { int receiveLength = clientSocket.Receive(_tempReceiveBuff); if (receiveLength > 0) { _databuffer.AddBuffer(_tempReceiveBuff, receiveLength); //将收到的数据添加到缓存器中 while (_databuffer.GetData(out _socketData)) //取出一条完整数据 { Debug.Log("取出一条数据"); Event_NetCommand tempNetMessageData = new Event_NetCommand(); tempNetMessageData._commandType = _socketData._commandType; tempNetMessageData._commandData = new ByteStreamBuffer(_socketData._data); //锁死消息中心消息队列,并添加数据 lock (MessageCenter.Instance.NetMessageDataQueue) { MessageCenter.Instance.NetMessageDataQueue.Enqueue(tempNetMessageData); } } } } catch (System.Exception) { clientSocket.Disconnect(true); clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); break; } } }