コード例 #1
0
    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);
    }
コード例 #2
0
    /// <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);
    }