예제 #1
0
        private Type DeserializeDictionaryType(StreamBuffer reader, out byte keyTypeCode, out byte valTypeCode)
        {
            keyTypeCode = reader.ReadByte();
            valTypeCode = reader.ReadByte();
            GpType gpType  = (GpType)keyTypeCode;
            GpType gpType2 = (GpType)valTypeCode;
            Type   type    = (gpType != 0) ? this.GetTypeOfCode(keyTypeCode) : typeof(object);
            Type   type2   = (gpType2 != 0) ? this.GetTypeOfCode(valTypeCode) : typeof(object);

            return(typeof(Dictionary <,>).MakeGenericType(type, type2));
        }
예제 #2
0
        private Dictionary <byte, object> DeserializeParameterTable(StreamBuffer stream)
        {
            short num = this.DeserializeShort(stream);
            Dictionary <byte, object> dictionary = new Dictionary <byte, object>(num);

            for (int i = 0; i < num; i++)
            {
                byte   key  = stream.ReadByte();
                object obj2 = dictionary[key] = this.Deserialize(stream, stream.ReadByte());
            }
            return(dictionary);
        }
예제 #3
0
        private ExitGames.Client.Photon.Hashtable DeserializeHashTable(StreamBuffer din)
        {
            int num = this.DeserializeShort(din);

            ExitGames.Client.Photon.Hashtable hashtable = new ExitGames.Client.Photon.Hashtable(num);
            for (int i = 0; i < num; i++)
            {
                object key  = this.Deserialize(din, din.ReadByte());
                object obj2 = hashtable[key] = this.Deserialize(din, din.ReadByte());
            }
            return(hashtable);
        }
예제 #4
0
        private bool DeserializeDictionaryArray(StreamBuffer din, short size, out Array arrayResult)
        {
            byte b    = default(byte);
            byte b2   = default(byte);
            Type type = this.DeserializeDictionaryType(din, out b, out b2);

            arrayResult = Array.CreateInstance(type, size);
            for (short num = 0; num < size; num = (short)(num + 1))
            {
                IDictionary dictionary = Activator.CreateInstance(type) as IDictionary;
                if (dictionary == null)
                {
                    return(false);
                }
                short num2 = this.DeserializeShort(din);
                for (int i = 0; i < num2; i++)
                {
                    object key;
                    if (b != 0)
                    {
                        key = this.Deserialize(din, b);
                    }
                    else
                    {
                        byte type2 = din.ReadByte();
                        key = this.Deserialize(din, type2);
                    }
                    object value;
                    if (b2 != 0)
                    {
                        value = this.Deserialize(din, b2);
                    }
                    else
                    {
                        byte type3 = din.ReadByte();
                        value = this.Deserialize(din, type3);
                    }
                    dictionary.Add(key, value);
                }
                arrayResult.SetValue(dictionary, num);
            }
            return(true);
        }
예제 #5
0
        private IDictionary DeserializeDictionary(StreamBuffer din)
        {
            byte        b           = din.ReadByte();
            byte        b2          = din.ReadByte();
            int         num         = this.DeserializeShort(din);
            bool        flag        = b == 0 || b == 42;
            bool        flag2       = b2 == 0 || b2 == 42;
            Type        typeOfCode  = this.GetTypeOfCode(b);
            Type        typeOfCode2 = this.GetTypeOfCode(b2);
            Type        type        = typeof(Dictionary <,>).MakeGenericType(typeOfCode, typeOfCode2);
            IDictionary dictionary  = Activator.CreateInstance(type) as IDictionary;

            for (int i = 0; i < num; i++)
            {
                object key   = this.Deserialize(din, flag ? din.ReadByte() : b);
                object value = this.Deserialize(din, flag2 ? din.ReadByte() : b2);
                dictionary.Add(key, value);
            }
            return(dictionary);
        }
예제 #6
0
        private object[] DeserializeObjectArray(StreamBuffer din)
        {
            short num = this.DeserializeShort(din);

            object[] array = new object[num];
            for (int i = 0; i < num; i++)
            {
                byte type = din.ReadByte();
                array[i] = this.Deserialize(din, type);
            }
            return(array);
        }
예제 #7
0
 private bool DeserializeBoolean(StreamBuffer din)
 {
     return(din.ReadByte() != 0);
 }
예제 #8
0
 public override byte DeserializeByte(StreamBuffer din)
 {
     return(din.ReadByte());
 }
예제 #9
0
        public override object Deserialize(StreamBuffer din, byte type)
        {
            switch (type)
            {
            case 105:
                return(this.DeserializeInteger(din));

            case 115:
                return(this.DeserializeString(din));

            case 97:
                return(this.DeserializeStringArray(din));

            case 120:
                return(this.DeserializeByteArray(din, -1));

            case 110:
                return(this.DeserializeIntArray(din, -1));

            case 104:
                return(this.DeserializeHashTable(din));

            case 68:
                return(this.DeserializeDictionary(din));

            case 111:
                return(this.DeserializeBoolean(din));

            case 107:
                return(this.DeserializeShort(din));

            case 108:
                return(this.DeserializeLong(din));

            case 98:
                return(this.DeserializeByte(din));

            case 102:
                return(this.DeserializeFloat(din));

            case 100:
                return(this.DeserializeDouble(din));

            case 121:
                return(this.DeserializeArray(din));

            case 99:
            {
                byte customTypeCode = din.ReadByte();
                return(this.DeserializeCustom(din, customTypeCode));
            }

            case 122:
                return(this.DeserializeObjectArray(din));

            case 101:
                return(this.DeserializeEventData(din, null));

            case 113:
                return(this.DeserializeOperationRequest(din));

            case 112:
                return(this.DeserializeOperationResponse(din));

            case 0:
            case 42:
                return(null);

            default:
                throw new Exception("Deserialize(): " + type + " pos: " + din.Position + " bytes: " + din.Length + ". " + SupportClass.ByteArrayToString(din.GetBuffer()));
            }
        }
예제 #10
0
        private Array DeserializeArray(StreamBuffer din)
        {
            short num   = this.DeserializeShort(din);
            byte  b     = din.ReadByte();
            Array array = null;

            switch (b)
            {
            case 121:
            {
                Array array3 = this.DeserializeArray(din);
                Type  type   = array3.GetType();
                array = Array.CreateInstance(type, num);
                array.SetValue(array3, 0);
                for (short num4 = 1; num4 < num; num4 = (short)(num4 + 1))
                {
                    array3 = this.DeserializeArray(din);
                    array.SetValue(array3, num4);
                }
                goto IL_0226;
            }

            case 120:
                array = Array.CreateInstance(typeof(byte[]), num);
                for (short num5 = 0; num5 < num; num5 = (short)(num5 + 1))
                {
                    Array value = this.DeserializeByteArray(din, -1);
                    array.SetValue(value, num5);
                }
                goto IL_0226;

            case 98:
                array = this.DeserializeByteArray(din, num);
                goto IL_0226;

            case 105:
                array = this.DeserializeIntArray(din, num);
                goto IL_0226;

            case 99:
            {
                byte       b2         = din.ReadByte();
                CustomType customType = default(CustomType);
                if (Protocol.CodeDict.TryGetValue(b2, out customType))
                {
                    array = Array.CreateInstance(customType.Type, num);
                    for (int i = 0; i < num; i++)
                    {
                        short num3 = this.DeserializeShort(din);
                        if (customType.DeserializeStreamFunction == null)
                        {
                            byte[] array2 = new byte[num3];
                            din.Read(array2, 0, num3);
                            array.SetValue(customType.DeserializeFunction(array2), i);
                        }
                        else
                        {
                            array.SetValue(customType.DeserializeStreamFunction(din, num3), i);
                        }
                    }
                    goto IL_0226;
                }
                throw new Exception("Cannot find deserializer for custom type: " + b2);
            }

            case 68:
            {
                Array result = null;
                this.DeserializeDictionaryArray(din, num, out result);
                return(result);
            }

            default:
            {
                array = this.CreateArrayByType(b, num);
                for (short num2 = 0; num2 < num; num2 = (short)(num2 + 1))
                {
                    array.SetValue(this.Deserialize(din, b), num2);
                }
                goto IL_0226;
            }
IL_0226:
                return(array);
            }
        }