예제 #1
0
    /// <summary>
    /// 构建消息数据包
    /// </summary>
    /// <param name="protobufModel"></param>
    /// <param name="messageId"></param>
    byte[] BuildPackage(C2GMessage c2g)
    {
        byte[]     b   = ProtobufSerilizer.Serialize(c2g);
        ByteBuffer buf = ByteBuffer.Allocate(b.Length + 3);

        buf.WriteShort((short)(b.Length));
        //TODO 对预留字节的处理
        buf.WriteByte(new byte());
        buf.WriteBytes(b);
        return(buf.GetBytes());
    }
예제 #2
0
    /// <summary>
    /// 构建消息数据包
    /// </summary>
    /// <param name="protobufModel"></param>
    /// <param name="messageId"></param>
    byte[] BuildPackage(Message c2s)
    {
        byte[]     b   = ProtobufSerilizer.Serialize(c2s.message);
        ByteBuffer buf = ByteBuffer.Allocate(b.Length + 4 + 4);

        buf.WriteInt(b.Length);
        //buf.WriteShort((short)(b.Length));
        buf.WriteInt((int)c2s.messageId);
        buf.WriteBytes(b);
        return(buf.GetBytes());
    }
예제 #3
0
 /// <summary>
 /// 接收数据
 /// </summary>
 void ReceiveMessage()
 {
     while (true)
     {
         if (!mSocket.Connected && !IsConnected())
         {
             break;
         }
         byte[] recvBytesHead = GetBytesReceive(2);
         int    bodyLength    = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(recvBytesHead, 0));
         byte[] nullByte      = GetBytesReceive(1);
         //TODO 对于预留字节的处理
         byte[] recvBytesBody = GetBytesReceive(bodyLength);
         allPackages.Enqueue(ProtobufSerilizer.DeSerialize <G2CMessage>(recvBytesBody));
     }
 }