private void AnalysisMsg() { while (analysisBufferDataLength > 0) { int msgLength = BitConverter.ToInt32(analysisBuffer, 0); //Debug.Log("msg length " + msgLength); if (msgLength <= analysisBufferDataLength - 4) { readNetBuff.Set(analysisBuffer, 4, msgLength); int messageType = BitConverter.ToInt32(analysisBuffer, 4); var msg = NetMessageFactory.GetMessage(messageType); if (msg != null) { msg.Read(readNetBuff); Messages.Enqueue(msg); //Debug.Log("receve " + msg.MessageType); } else { Debug.LogError("wrong message type " + messageType); } int remain = analysisBufferDataLength - msgLength - 4; Array.Copy(analysisBuffer, 4 + msgLength, analysisTempBuffer, 0, remain); Array.Copy(analysisTempBuffer, 0, analysisBuffer, 0, remain); analysisBufferDataLength = remain; //Debug.Log("remian " + remain); //Log(); } else { break; } } }
/// <summary> /// Decodes this instance. /// </summary> internal void Decode(byte[] buffer, int length) { ByteStream stream = new ByteStream(buffer, length); this._protocolVersion = stream.ReadByte(); if (this._protocolVersion <= 2) { if (!stream.IsAtEnd()) { int messageType = stream.ReadVInt(); int messageLength = stream.ReadVInt(); byte[] messageBytes = stream.ReadBytes(messageLength, 0x7FFFFFFF); this._message = NetMessageFactory.CreateMessageByType(messageType); if (this._message == null) { Logging.Error("NetPacket::decode unknown message received, type: " + messageType); return; } this._message.GetByteStream().SetByteArray(messageBytes, messageLength); } } else { Logging.Warning("NetPacket::decode invalid protocol version"); } }
private static void AnalysisMsg(PlayerInfo info) { while (info.AnalysisBufferLength > 0) { int msgLength = BitConverter.ToInt32(info.AnalysisBuffer, 0); //Console.WriteLine("msg length " + msgLength); if (msgLength <= info.AnalysisBufferLength - 4) { info.NetReadBuff.Set(info.AnalysisBuffer, 4, msgLength); int messageType = BitConverter.ToInt32(info.AnalysisBuffer, 4); if (messageType != (int)EmNetMessageType.CS_SYNCHRONIZATE) { Console.WriteLine("**** 错误,消息不是同步消息 " + messageType); } else { var msg = NetMessageFactory.GetMessage(messageType); if (msg != null) { msg.Read(info.NetReadBuff); NetCSSynchronizateMsg msgg = msg as NetCSSynchronizateMsg; if (info.CurFrame == msgg.CurFrame) { info.OperationData = msgg.OperationData; info.IsOperationReceived = true; info.CurFrame++; } else { Console.WriteLine("error: player {0} frame should be {1}, receive {2}", info.PlayerId, info.CurFrame, msgg.CurFrame); } //Console.WriteLine("receve " + msg.MessageType); } else { //Console.WriteLine("wrong message type " + messageType); } } int remain = info.AnalysisBufferLength - msgLength - 4; Array.Copy(info.AnalysisBuffer, 4 + msgLength, info.AnalysisTempBuffer, 0, remain); Array.Copy(info.AnalysisTempBuffer, 0, info.AnalysisBuffer, 0, remain); info.AnalysisBufferLength = remain; //Debug.Log("remian " + remain); //Log(); } else { break; } } }