Exemplo n.º 1
0
    /// <summary>
    /// 在刚好接收完一个完整的协议的时候调用,构造一个完整的协议包
    /// </summary>
    public void CreatePacketFromBuffer()
    {
        try
        {
            int bodyLen = BodyLength;

            int    protoCode = ProtoCode;
            object decoder   = ProtoMapper.GetProtoDecoder(protoCode);
            if (decoder != null)
            {
                byte[] dataBytes = new byte[bodyLen - ProtoCodeLength]; //协议体等于总的协议体长度减去协议号字节
                Array.Copy(protobuffBytes, Header_Length + ProtoCodeLength, dataBytes, 0, dataBytes.Length);
                Debug.Log("Content :" + SocketController.ByteArrayToStr(dataBytes));
                System.IO.MemoryStream stream_output = new System.IO.MemoryStream(dataBytes);

                RuntimeTypeModel.Default.Deserialize(stream_output, decoder, decoder.GetType());

                ProtoPacketQueueManager.AddPacket(decoder);
                //用队列在帧更新的时候处理协议,是因为有可能是在多线程下通信,而有些操作是只能在主线程执行
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError("协议包创建出错:" + ex.Message + ex.StackTrace);
        }
    }