Beispiel #1
0
        public void ReadData()
        {
            try
            {
                _bodyMem.Position = 0;
                byte[] numberBytes = new byte[4];

                _bodyMem.Read(numberBytes, 0, NetDefine.CMD_BYTES);
                _cmdId = NetUtils.BigEndianToUshort(numberBytes);

                _bodyMem.Read(numberBytes, 0, NetDefine.SESSION_LEN_BYTES);
                ushort sessionLen = NetUtils.BigEndianToUshort(numberBytes);
                _bodyMem.Read(numberBytes, 0, NetDefine.CONTENT_LEN_BYTES);
                uint contentLen = NetUtils.BigEndianToUint(numberBytes);

                byte[] sessionBytes = new byte[sessionLen];
                _bodyMem.Read(sessionBytes, 0, sessionLen);

                _sessionMem.Write(sessionBytes, 0, sessionLen);
                _sessionMem.Position = 0;

                _session = PacketSession.Parser.ParseFrom(_sessionMem);

                _content = CommandMap.Instance.GetMessageByCmdId(_cmdId);
                _content.MergeFrom(_bodyMem);
            }
            catch (System.Exception e)
            {
                SuperDebug.Error(DebugPrefix.Network, "Deserialize meet exception " + e);
                OutputBytes("error buf:", _bodyMem.GetBuffer(), _bodyMem.Length);
            }
        }
Beispiel #2
0
        public bool SetData <T>(T data, PacketSession session) where T : IMessage
        {
            try
            {
                _content = data;
                _session = session;
                _cmdId   = (ushort)session.CmdId;

                _bodyMem.Position = 0;
                _bodyMem.SetLength(0);

                _bodyMem.Write(NetUtils.UshortToBigEndian(_cmdId), 0, NetDefine.CMD_BYTES);
                _bodyMem.Seek(NetDefine.BODY_HEAD_LEN, SeekOrigin.Begin);

                session.WriteTo(_bodyMem);
                long sessionPos = _bodyMem.Position;

                data.WriteTo(_bodyMem);
                long contentPos = _bodyMem.Position;

                _bodyMem.Seek(NetDefine.CMD_BYTES, SeekOrigin.Begin);

                _bodyMem.Write(NetUtils.UshortToBigEndian((ushort)(sessionPos - NetDefine.BODY_HEAD_LEN)), 0, NetDefine.SESSION_LEN_BYTES);
                _bodyMem.Write(NetUtils.UintToBigEndian((uint)(contentPos - sessionPos)), 0, NetDefine.CONTENT_LEN_BYTES);

                //OutputBytes("true data:", body_.GetBuffer(), body_.Length);
            }
            catch (System.Exception e)
            {
                SuperDebug.Warning(DebugPrefix.Network, "Serialize " + typeof(T).ToString() + " meet exception " + e);
                return(false);
            }

            return(true);
        }