private void OnRecevie() { _recvQueue.Switch(); while (!_recvQueue.Empty()) { byte[] bytes = _recvQueue.Pop(); _protocolHead.Reset(); _protocolHead.Deserialize(bytes); _recvStream.Seek(0, SeekOrigin.Begin); _recvStream.SetLength(0); _recvStream.Write(bytes, ProtocolHead.Size, (int)_protocolHead.len + 4 - ProtocolHead.Size); _recvStream.Seek(0, SeekOrigin.Begin); Protocol.Protocol protocol = Protocol.Protocol.GetProtocolThreadSafe(_protocolHead.msgId); if (protocol == null) { #if DEBUG Debug.LogError("Ptc Not found: " + _protocolHead.msgId.ToString()); #endif continue; } try { #if DEBUG if (_protocolHead.len > 1024) { Debug.LogWarning("Recv Ptc:" + protocol.GetMessageID().ToString() + " to long:" + _protocolHead.len.ToString()); } #endif protocol.ThreadErrorCode = ProtocolErrorCode.NO_ERROR; protocol.DeSerialize(_recvStream); Protocol.Protocol.ReturnProtocolThreadSafe(protocol); } catch (Exception ex) { Debug.LogWarning("Ptc " + _protocolHead.msgId.ToString() + " deserialize fail: " + ex.Message.ToString()); protocol.ThreadErrorCode = ProtocolErrorCode.DESERIALIZE_ERROR; } if (protocol.ThreadErrorCode == ProtocolErrorCode.NO_ERROR) { try { protocol.Process(); } catch (Exception ex) { Debug.LogWarning("Ptc " + _protocolHead.msgId.ToString() + " Process fail: " + ex.Message.ToString()); protocol.ThreadErrorCode = ProtocolErrorCode.PROCESS_ERROR; } finally { Protocol.Protocol.ReturnProtocolThreadSafe(protocol); } } } }
public bool Send(Protocol.Protocol protocol) { _sendStream.SetLength(0); _sendStream.Position = 0; protocol.SerializeWithHead(_sendStream); #if DEBUG if (_sendStream.Length > 1024) { Debug.LogWarning("Send Ptc:" + protocol.GetMessageID() + " to long:" + _sendStream.Length); } #endif if (Send()) { return(true); } Debug.Log("send proto failed: " + protocol.ToString()); return(false); }