public static void BytesToField(ISerializablePacket Packet, byte[] Bytes, string FieldName)
        {
            if (Bytes == null || Bytes.Length <= 0)
            {
                return;
            }

            FieldInfo Info = Packet.GetType().GetField(FieldName);

            ISerializableFieldAttribute[] FieldsAttr = Info.GetCustomAttributes(typeof(ISerializableFieldAttribute), true) as ISerializableFieldAttribute[];
            if (FieldsAttr != null && FieldsAttr.Length > 0)
            {
                ISerializableField Field = Activator.CreateInstance(FieldsAttr[0].GetSerializableType()) as ISerializableField;
                Field.Index      = FieldsAttr[0].Index;
                Field.val        = Info.GetValue(Packet);
                Field.PacketType = PacketProcessor.GetFieldType(Field);

                PacketInStream Str = new PacketInStream(Bytes, Bytes.Length);
                Field.Deserialize(ref Str);
                Field.ApplyToFieldInfo(Info, Packet, Info.FieldType);
            }
            else
            {
                Info.SetValue(Packet, null);
            }
        }
        public static ISerializableField ReadField(ref PacketInStream Stream, int FieldIndex, int FieldType)
        {
            if (FieldType == (int)EPacketFieldType.Terminator)
            {
                return(null);
            }

            ISerializableField Field = GetFieldType((EPacketFieldType)FieldType);

            if (Field == null)
            {
                Log.Error("PacketProcessor", "Unhandled Field : Type = " + FieldType);
                return(null);
            }

            Log.Debug("ReadField", "Index = " + FieldIndex + ",Type=" + FieldType);
            Field.Index      = FieldIndex;
            Field.PacketType = (EPacketFieldType)FieldType;
            Field.Deserialize(ref Stream);

            return(Field);
        }
Beispiel #3
0
        public override void Deserialize(ref PacketInStream Data)
        {
            long ListData = Data.ReadEncoded7Bit();
            int  ListType;
            int  ListCount;

            PacketInStream.Decode2Parameters(ListData, out ListType, out ListCount);
            List <ISerializableField> Fields = new List <ISerializableField>();

            Log.Debug("Packet", "------> List : " + ListType + "(" + ListCount + ")");
            for (int i = 0; i < ListCount; ++i)
            {
                ISerializableField Field = PacketProcessor.GetFieldType((EPacketFieldType)ListType);
                if (Field != null)
                {
                    Field.Deserialize(ref Data);
                    Fields.Add(Field);
                }
            }

            val = Fields;
        }