public void SendData(NetProtocal.Request cmd, object obj = null) { byte[] content = m_sendms.ToArray(); int len = content.Length; if (IsLittleEndian) { len = ConvertEndian.Convert(content.Length); } content = ProtoNetSerialize.Encode((int)cmd, obj); // Array.Copy(BitConverter.GetBytes(len), 0, m_sendbuf, 0, 4); System.Array.Copy(content, 0, m_sendbuf, 0, content.Length); ++m_correlationid; Send(cmd, m_correlationid, m_sendbuf, content.Length); //Debug.Log("发送数据:" + cmd.ToString() + " len:" + content.Length); //Debug.Log("发送数据" + cmd); }
/// <summary> /// 接收到消息分包处理 /// </summary> private void OnReceive(byte[] bytes, int length) { m_memstream.Seek(0, SeekOrigin.End); m_memstream.Write(bytes, 0, length); //Reset to beginning m_memstream.Seek(0, SeekOrigin.Begin); while (RemainingBytes() >= 4) { UInt16 size = m_reader.ReadUInt16(); if (IsLittleEndian) { size = ConvertEndian.Convert(size); } if (RemainingBytes() >= size - 2) { UInt16 cmd = m_reader.ReadUInt16(); if (IsLittleEndian) { cmd = ConvertEndian.Convert(cmd); } byte[] arr = m_reader.ReadBytes(size - 4); object msg = ProtoNetSerialize.Decode(cmd, arr); OnReceivedMessage(msg); } else { //消息长度不够 m_memstream.Position = m_memstream.Position - 2; break; } } byte[] leftover = m_reader.ReadBytes((int)RemainingBytes()); ClearStream(m_memstream); m_memstream.Write(leftover, 0, leftover.Length); }