Exemplo n.º 1
0
        private static Type DeserializeDictionaryType(Protocol16Stream input, out byte keyTypeCode, out byte valueTypeCode)
        {
            keyTypeCode   = (byte)input.ReadByte();
            valueTypeCode = (byte)input.ReadByte();
            Type keyType   = GetTypeOfCode(keyTypeCode);
            Type valueType = GetTypeOfCode(valueTypeCode);

            return(typeof(Dictionary <,>).MakeGenericType(new Type[]
            {
                keyType,
                valueType
            }));
        }
Exemplo n.º 2
0
        private static Dictionary <byte, object> DeserializeParameterTable(Protocol16Stream input)
        {
            int dictionarySize = DeserializeShort(input);
            var dictionary     = new Dictionary <byte, object>(dictionarySize);

            for (int i = 0; i < dictionarySize; i++)
            {
                byte   key           = (byte)input.ReadByte();
                byte   valueTypeCode = (byte)input.ReadByte();
                object value         = Deserialize(input, valueTypeCode);
                dictionary[key] = value;
            }

            return(dictionary);
        }
Exemplo n.º 3
0
        private static IDictionary DeserializeDictionary(Protocol16Stream input)
        {
            byte keyTypeCode    = (byte)input.ReadByte();
            byte valueTypeCode  = (byte)input.ReadByte();
            int  dictionarySize = DeserializeShort(input);
            Type keyType        = GetTypeOfCode(keyTypeCode);
            Type valueType      = GetTypeOfCode(valueTypeCode);
            Type dictionaryType = typeof(Dictionary <,>).MakeGenericType(new Type[]
            {
                keyType,
                valueType
            });

            IDictionary output = Activator.CreateInstance(dictionaryType) as IDictionary;

            DeserializeDictionaryElements(input, output, dictionarySize, keyTypeCode, valueTypeCode);
            return(output);
        }
Exemplo n.º 4
0
        private static bool DeserializeDictionaryArray(Protocol16Stream input, short size, out Array result)
        {
            Type type = DeserializeDictionaryType(input, out byte keyTypeCode, out byte valueTypeCode);

            result = Array.CreateInstance(type, size);

            for (short i = 0; i < size; i++)
            {
                if (!(Activator.CreateInstance(type) is IDictionary dictionary))
                {
                    return(false);
                }
                short arraySize = DeserializeShort(input);
                for (int j = 0; j < arraySize; j++)
                {
                    object key;
                    if (keyTypeCode > 0)
                    {
                        key = Deserialize(input, keyTypeCode);
                    }
                    else
                    {
                        byte nextKeyTypeCode = (byte)input.ReadByte();
                        key = Deserialize(input, nextKeyTypeCode);
                    }
                    object value;
                    if (valueTypeCode > 0)
                    {
                        value = Deserialize(input, valueTypeCode);
                    }
                    else
                    {
                        byte nextValueTypeCode = (byte)input.ReadByte();
                        value = Deserialize(input, nextValueTypeCode);
                    }
                    dictionary.Add(key, value);
                }
                result.SetValue(dictionary, i);
            }

            return(true);
        }
Exemplo n.º 5
0
        private static Array DeserializeArray(Protocol16Stream input)
        {
            short size     = DeserializeShort(input);
            byte  typeCode = (byte)input.ReadByte();

            switch ((Protocol16Type)typeCode)
            {
            case Protocol16Type.Array:
            {
                Array array     = DeserializeArray(input);
                Type  arrayType = array.GetType();
                Array result    = Array.CreateInstance(arrayType, size);
                result.SetValue(array, 0);
                for (short i = 1; i < size; i++)
                {
                    array = DeserializeArray(input);
                    result.SetValue(array, i);
                }

                return(result);
            }

            case Protocol16Type.ByteArray:
            {
                byte[][] array = new byte[size][];
                for (short i = 0; i < size; i++)
                {
                    array[i] = DeserializeByteArray(input);
                }

                return(array);
            }

            case Protocol16Type.Dictionary:
            {
                DeserializeDictionaryArray(input, size, out Array result);

                return(result);
            }

            default:
            {
                Type  arrayType = GetTypeOfCode(typeCode);
                Array result    = Array.CreateInstance(arrayType, size);

                for (short i = 0; i < size; i++)
                {
                    result.SetValue(Deserialize(input, typeCode), i);
                }

                return(result);
            }
            }
        }
Exemplo n.º 6
0
        private static object[] DeserializeObjectArray(Protocol16Stream input)
        {
            int arraySize = DeserializeShort(input);

            var array = new object[arraySize];

            for (int i = 0; i < arraySize; i++)
            {
                byte typeCode = (byte)input.ReadByte();
                array[i] = Deserialize(input, typeCode);
            }

            return(array);
        }
Exemplo n.º 7
0
 private static void DeserializeDictionaryElements(Protocol16Stream input, IDictionary output, int dictionarySize, byte keyTypeCode, byte valueTypeCode)
 {
     for (int i = 0; i < dictionarySize; i++)
     {
         object key   = Deserialize(input, (keyTypeCode == 0 || keyTypeCode == 42) ? ((byte)input.ReadByte()) : keyTypeCode);
         object value = Deserialize(input, (valueTypeCode == 0 || valueTypeCode == 42) ? ((byte)input.ReadByte()) : valueTypeCode);
         output.Add(key, value);
     }
 }
Exemplo n.º 8
0
 private static bool DeserializeBoolean(Protocol16Stream input)
 {
     return(input.ReadByte() != 0);
 }
Exemplo n.º 9
0
 private static byte DeserializeByte(Protocol16Stream stream)
 {
     return((byte)stream.ReadByte());
 }
Exemplo n.º 10
0
 public static object Deserialize(Protocol16Stream input)
 {
     return(Deserialize(input, (byte)input.ReadByte()));
 }