Example #1
0
        public void read(byte[] bytes, ByteReader byteReader = null)
        {
            ByteReader reader = byteReader == null ? new ByteReader(bytes) : byteReader;

            reader.Read(out messageType);
            reader.Read(out error);
        }
Example #2
0
    public static IDictionary <TK, TV> DeserializeDictionary <TK, TV>(this byte[] bytes)
        where TK : struct where TV : struct
    {
        var reader = new ByteReader(bytes);
        Dictionary <TK, TV> dictionary = new Dictionary <TK, TV>();
        int count = reader.ReadInt();

        for (int i = 0; i < count; i++)
        {
            var key   = reader.Read <TK>();
            var value = reader.Read <TV>();
            dictionary[key] = value;
        }
        return(dictionary);
    }
        public void ValueTest(int iVal, float fVal, double dVal)
        {
            var bw = new ByteWriter(m_buffer);

            bw.Write(iVal); bw.Write(fVal); bw.Write(dVal);

            var br = new ByteReader(m_buffer);

            Assert.AreEqual(iVal, br.Read <int>());
            Assert.AreEqual(fVal, br.Read <float>());
            Assert.AreEqual(dVal, br.Read <double>());

            Assert.AreEqual(16, bw.Offset);
            Assert.AreEqual(br.Offset, bw.Offset);
        }
Example #4
0
        void RoundTripSingleByte(int numValues)
        {
            var pocos  = new List <SingleBytePoco>();
            var random = new Random(123);

            for (int i = 0; i < numValues; i++)
            {
                pocos.Add(new SingleBytePoco {
                    Byte = (byte)random.Next()
                });
            }

            var    stream = new MemoryStream();
            Footer footer;

            StripeStreamHelper.Write(stream, pocos, out footer);
            var stripeStreams = StripeStreamHelper.GetStripeStreams(stream, footer);
            var boolReader    = new ByteReader(stripeStreams, 1);
            var results       = boolReader.Read().ToArray();

            for (int i = 0; i < numValues; i++)
            {
                Assert.Equal(pocos[i].Byte, results[i]);
            }
        }
Example #5
0
 public void ReadBytes(byte[] buffer, int index, int count)
 {
     if (reader.Read(buffer, index, count) != count)
     {
         throw new ArgumentOutOfRangeException("tried to read past end of data stream");
     }
 }
Example #6
0
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (!_Type.IsNullable())
            {
                _Object = null;
                return(false);
            }

            Type var_UnderlyingType = _Type.GetNullableUnderlyingType();

            ByteReader var_Reader = new ByteReader(_Bytes);

            bool var_IsNull = var_Reader.ReadBoolean();

            if (var_IsNull)
            {
                _Object = null;
                return(true);
            }

            //
            if (PrimitiveTypeMatcher.TypeDictionary.ContainsKey(var_UnderlyingType))
            {
                _Object = var_Reader.Read(var_UnderlyingType);
            }
            else
            {
                byte[] var_Bytes = var_Reader.ReadBytesAndSize();
                _Object = Serializer.DeSerialize(var_UnderlyingType, var_Bytes);
            }

            return(true);
        }
Example #7
0
        /// <summary>
        /// 加载纹理数据
        /// </summary>
        /// <param name="filepath">Filepath.</param>
        public void LoadTextureDataFromFile(string filepath)
        {
            if (string.IsNullOrEmpty(filepath))
            {
                return;
            }

            _TextureDatas.Clear();

            byte[] datas = ResourceManger.Instance.GetBytes(filepath);
            if (datas == null || datas.Length == 0)
            {
                return;
            }

            ByteReader reader = new ByteReader(datas);
            int        count  = reader.Read <int> ();

            for (int i = 0; i < count; i++)
            {
                TextureData data = new TextureData();
                data.Filepath = reader.ReadString();
                _TextureDatas.Add(data);
            }
        }
Example #8
0
        public void read(byte[] bytes, ByteReader byteReader = null)
        {
            ByteReader reader = byteReader == null ? new ByteReader(bytes) : byteReader;

            reader.Read(out messageType);
            key   = reader.ReadString();
            value = reader.ReadString();
        }
Example #9
0
        /// <summary>
        /// 加载方块数据
        /// </summary>
        /// <param name="filepath">Filepath.</param>
        public void LoadCubeDataFromFile(string filepath)
        {
            if (string.IsNullOrEmpty(filepath))
            {
                return;
            }

            _CubeDatas.Clear();

            byte[] datas = ResourceManger.Instance.GetBytes(filepath);
            if (datas == null || datas.Length == 0)
            {
                return;
            }

            ByteReader reader = new ByteReader(datas);
            int        count  = reader.Read <int> ();

            for (int i = 0; i < count; i++)
            {
                CubeData data = new CubeData();
                data.Position      = reader.ReadVector3();
                data.FrontTexture  = reader.Read <int> ();
                data.BackTexture   = reader.Read <int> ();
                data.TopTexture    = reader.Read <int> ();
                data.BottomTexture = reader.Read <int> ();
                data.LeftTexture   = reader.Read <int> ();
                data.RightTexture  = reader.Read <int> ();
                _CubeDatas.Add(data);
            }
        }
Example #10
0
        public void ByteRead()
        {
            ByteReader reader = new ByteReader(m_byteBuf);

            for (int i = 0; i < AMOUNT; i++)
            {
                int result = reader.Read <int>();
            }
        }
Example #11
0
        public void ByteWrite()
        {
            ByteWriter writer = new ByteWriter(m_byteBuf);

            for (int i = 0; i < AMOUNT / 2; i++)
            {
                writer.Write(i % 2 == 0);
                writer.Write(i);
            }

            ByteReader reader = new ByteReader(m_byteBuf);

            for (int i = 0; i < AMOUNT / 2; i++)
            {
                bool b   = reader.Read <bool>();
                int  num = reader.Read <int>();
            }
        }
Example #12
0
        public void ByteReader_ReadToEnd()
        {
            var reader = new ByteReader(85);

            Assert.IsTrue(reader.Read());
            Assert.IsFalse(reader.Read());
            Assert.IsTrue(reader.Read());
            Assert.IsFalse(reader.Read());
            Assert.IsTrue(reader.Read());
            Assert.IsFalse(reader.Read());
            Assert.IsTrue(reader.Read());
            Assert.IsFalse(reader.Read());
        }
Example #13
0
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (_Type.IsGenericType && _Type.GetGenericTypeDefinition() == typeof(Queue <>))
            {
                Type var_QueueType        = typeof(Queue <>);
                Type var_GenericItemType  = _Type.GetGenericArguments()[0];
                Type var_GenericQueueType = var_QueueType.MakeGenericType(var_GenericItemType);

                ByteReader var_Reader = new ByteReader(_Bytes);

                bool var_IsNull = var_Reader.ReadBoolean();
                if (var_IsNull)
                {
                    _Object = null;
                    return(true);
                }

                //

                int var_ItemCount = var_Reader.ReadUInt16();

                byte[] var_ItemBytes = var_Reader.ReadBytesAndSize();

                ByteReader var_ItemReader = new ByteReader(var_ItemBytes);

                Type var_ListType        = typeof(List <>);
                Type var_GenericListType = var_ListType.MakeGenericType(var_GenericItemType);

                IList var_Items = Activator.CreateInstance(var_GenericListType) as IList;

                if (PrimitiveTypeMatcher.TypeDictionary.ContainsKey(var_GenericItemType))
                {
                    for (int i = 0; i < var_ItemCount; i++)
                    {
                        var_Items.Add(var_ItemReader.Read(var_GenericItemType));
                    }
                }
                else
                {
                    for (int i = 0; i < var_ItemCount; i++)
                    {
                        byte[] var_Bytes = var_ItemReader.ReadBytesAndSize();
                        Object var_Item  = Serializer.DeSerialize(var_GenericItemType, var_Bytes);
                        var_Items.Add(var_Item);
                    }
                }

                _Object = Activator.CreateInstance(var_GenericQueueType, var_Items);
                return(true);
            }

            _Object = null;
            return(false);
        }
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (!PrimitiveTypeMatcher.TypeHashSet.Contains(_Type))
            {
                _Object = null;
                return(false);
            }

            ByteReader var_Reader = new ByteReader(_Bytes);

            _Object = var_Reader.Read(_Type);
            return(true);
        }
Example #15
0
        public void read(byte[] bytes, ByteReader byteReader = null)
        {
            ByteReader reader = byteReader == null ? new ByteReader(bytes) : byteReader;

            reader.Read(out messageType);

            // read array settings
            int s_settings;

            reader.Read(out s_settings);
            settings = new List <xmq.settings.Property>(s_settings);

            for (int i_1 = 0; i_1 < s_settings; i_1++)
            {
                xmq.settings.Property e_name_2;

                e_name_2 = new xmq.settings.Property();
                e_name_2.read(null, reader);

                settings.Add(e_name_2);
            }
        }
Example #16
0
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (_Type.IsGenericType && _Type.GetGenericTypeDefinition() == typeof(List <>))
            {
                if (_Type.GetGenericArguments().Length == 1)
                {
                    //TODO: Kann man nicht _Type direkt nehemn :D
                    Type var_ListType        = typeof(List <>);
                    Type var_GenericItemType = _Type.GetGenericArguments()[0];
                    Type var_GenericListType = var_ListType.MakeGenericType(var_GenericItemType);

                    IList var_List = Activator.CreateInstance(var_GenericListType) as IList;

                    ByteReader var_Reader = new ByteReader(_Bytes);

                    bool var_IsNull = var_Reader.ReadBoolean();
                    if (var_IsNull)
                    {
                        _Object = null;
                        return(true);
                    }

                    //
                    int var_Count = var_Reader.ReadUInt16();

                    if (PrimitiveTypeMatcher.TypeHashSet.Contains(_Type))
                    {
                        for (int i = 0; i < var_Count; i++)
                        {
                            var_List.Add(var_Reader.Read(var_GenericItemType));
                        }
                    }
                    else
                    {
                        for (int i = 0; i < var_Count; i++)
                        {
                            byte[] var_Bytes = var_Reader.ReadBytesAndSize();
                            Object var_Item  = Serializer.DeSerialize(var_GenericItemType, var_Bytes);
                            var_List.Add(var_Item);
                        }
                    }

                    _Object = var_List;
                    return(true);
                }
            }

            _Object = null;
            return(false);
        }
        public void SizePrefixTest()
        {
            ByteWriter bw = new ByteWriter(16, false);

            bw.ReserveSizePrefix();
            bw.Write(1);
            bw.Write(2);
            bw.Write(3);

            Assert.AreEqual(16, bw.Offset);
            Assert.AreEqual(16, bw.Length);

            Assert.AreEqual(16, bw.PrefixSize());

            ByteReader br = new ByteReader(bw.Buffer);

            Assert.AreEqual(16, br.Read <int>());
        }
Example #18
0
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (!_Type.IsEnum)
            {
                _Object = null;
                return(false);
            }

            System.Type var_EnumUnderlyingType = System.Enum.GetUnderlyingType(_Type);

            ByteReader var_Reader = new ByteReader(_Bytes);

            _Object = var_Reader.Read(var_EnumUnderlyingType);

            _Object = Enum.ToObject(_Type, _Object);

            return(true);
        }
Example #19
0
    /// <summary>
    /// 创建一个新阵型
    /// </summary>
    /// <returns>The foramtion.</returns>
    /// <param name="url">URL.</param>
    public static Formation CreateForamtion(string url)
    {
        byte[] bytes = ResourceManger.Instance.GetBytes(url);
        if (bytes == null || bytes.Length == 0)
        {
            return(null);
        }

        ByteReader reader     = new ByteReader(bytes);
        int        childCount = reader.Read <int> ();

        Formation f = new Formation();

        for (int i = 0; i < childCount; i++)
        {
            Vector3 pos = reader.ReadVector3();
            f.AddPoint(pos);
        }

        return(f);
    }
Example #20
0
    /// <summary>
    /// 加载
    /// </summary>
    public override void Load()
    {
        ByteReader reader = LoadData();

        if (reader == null)
        {
            return;
        }

        this.RemoveAllChildren();

        int childCount = reader.Read <int> ();

        for (int i = 0; i < childCount; i++)
        {
            GameObject go  = CreateGameObject();
            Vector3    pos = reader.ReadVector3();
            go.transform.position = pos;
        }

        Debug.Log("Successful load!");
    }
Example #21
0
        // Add some non-zero constants to the mix.
        public void AddConstantsToTDB(RandoopConfiguration config)
        {
            foreach (SimpleTypeValues vs in config.simpleTypeValues)
            {
                Type type = Type.GetType(vs.simpleType);

                if (type == null)
                {
                    throw new Common.RandoopBareExceptions.InternalError("invalid simple type in XML config file.");
                }

                foreach (FileName fn in vs.fileNames)
                {
                    string fileName = fn.fileName;
                    if (!File.Exists(fileName))
                    {
                        throw new Common.RandoopBareExceptions.InvalidUserParamsException("Configuration file does not exist: " + fileName);
                    }

                    if (type.Equals(typeof(sbyte)))
                    {
                        SByteReader r = new SByteReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(sbyte), o));
                    }
                    else if (type.Equals(typeof(byte)))
                    {
                        ByteReader r = new ByteReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(byte), o));
                    }
                    else if (type.Equals(typeof(short)))
                    {
                        ShortReader r = new ShortReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(short), o));
                    }
                    else if (type.Equals(typeof(ushort)))
                    {
                        UshortReader r = new UshortReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(ushort), o));
                    }
                    else if (type.Equals(typeof(int)))
                    {
                        IntReader r = new IntReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(int), o));
                    }
                    else if (type.Equals(typeof(uint)))
                    {
                        UintReader r = new UintReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(uint), o));
                    }
                    else if (type.Equals(typeof(long)))
                    {
                        LongReader r = new LongReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(long), o));
                    }
                    else if (type.Equals(typeof(ulong)))
                    {
                        UlongReader r = new UlongReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(ulong), o));
                    }
                    else if (type.Equals(typeof(char)))
                    {
                        CharReader r = new CharReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(char), o));
                    }
                    else if (type.Equals(typeof(float)))
                    {
                        FloatReader r = new FloatReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(float), o));
                    }
                    else if (type.Equals(typeof(double)))
                    {
                        DoubleReader r = new DoubleReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(double), o));
                    }
                    else if (type.Equals(typeof(bool)))
                    {
                        BoolReader r = new BoolReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(bool), o));
                    }
                    else if (type.Equals(typeof(decimal)))
                    {
                        DecimalReader r = new DecimalReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(decimal), o));
                    }
                    else
                    {
                        if (!type.Equals(typeof(string)))
                        {
                            throw new Common.RandoopBareExceptions.InternalError("invalid simple type in XML config file.");
                        }
                        Common.StringReader r = new Common.StringReader();
                        foreach (object o in r.Read(fileName))
                            this.AddPlan(Plan.Constant(typeof(string), o));
                    }
                }
            }
        }
Example #22
0
        public void ByteReader_ReadPartial()
        {
            var reader = new ByteReader(15);

            Assert.AreEqual(3, reader.Read(2));
        }
Example #23
0
        // Add some non-zero constants to the mix.
        public void AddConstantsToTDB(RandoopConfiguration config)
        {
            foreach (SimpleTypeValues vs in config.simpleTypeValues)
            {
                Type type = Type.GetType(vs.simpleType);

                if (type == null)
                {
                    throw new Common.RandoopBareExceptions.InternalError("invalid simple type in XML config file.");
                }

                foreach (FileName fn in vs.fileNames)
                {
                    string fileName = fn.fileName;
                    if (!File.Exists(fileName))
                    {
                        throw new Common.RandoopBareExceptions.InvalidUserParamsException("Configuration file does not exist: " + fileName);
                    }

                    if (type.Equals(typeof(sbyte)))
                    {
                        SByteReader r = new SByteReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(sbyte), o));
                        }
                    }
                    else if (type.Equals(typeof(byte)))
                    {
                        ByteReader r = new ByteReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(byte), o));
                        }
                    }
                    else if (type.Equals(typeof(short)))
                    {
                        ShortReader r = new ShortReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(short), o));
                        }
                    }
                    else if (type.Equals(typeof(ushort)))
                    {
                        UshortReader r = new UshortReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(ushort), o));
                        }
                    }
                    else if (type.Equals(typeof(int)))
                    {
                        IntReader r = new IntReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(int), o));
                        }
                    }
                    else if (type.Equals(typeof(uint)))
                    {
                        UintReader r = new UintReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(uint), o));
                        }
                    }
                    else if (type.Equals(typeof(long)))
                    {
                        LongReader r = new LongReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(long), o));
                        }
                    }
                    else if (type.Equals(typeof(ulong)))
                    {
                        UlongReader r = new UlongReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(ulong), o));
                        }
                    }
                    else if (type.Equals(typeof(char)))
                    {
                        CharReader r = new CharReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(char), o));
                        }
                    }
                    else if (type.Equals(typeof(float)))
                    {
                        FloatReader r = new FloatReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(float), o));
                        }
                    }
                    else if (type.Equals(typeof(double)))
                    {
                        DoubleReader r = new DoubleReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(double), o));
                        }
                    }
                    else if (type.Equals(typeof(bool)))
                    {
                        BoolReader r = new BoolReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(bool), o));
                        }
                    }
                    else if (type.Equals(typeof(decimal)))
                    {
                        DecimalReader r = new DecimalReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(decimal), o));
                        }
                    }
                    else
                    {
                        if (!type.Equals(typeof(string)))
                        {
                            throw new Common.RandoopBareExceptions.InternalError("invalid simple type in XML config file.");
                        }
                        Common.StringReader r = new Common.StringReader();
                        foreach (object o in r.Read(fileName))
                        {
                            this.AddPlan(Plan.Constant(typeof(string), o));
                        }
                    }
                }
            }
        }
Example #24
0
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (!_Type.IsArray)
            {
                _Object = null;
                return(false);
            }

            ByteReader var_Reader = new ByteReader(_Bytes);

            bool var_IsNull = var_Reader.ReadBoolean();

            if (var_IsNull)
            {
                _Object = null;
                return(true);
            }

            //

            Type var_ElementType = _Type.GetElementType();

            //Read rank
            int var_Rank = var_Reader.ReadInt32();

            //Go through each dimension and read the length!
            int[] var_ArrayLength = new int[var_Rank];
            for (int d = 0; d < var_Rank; d++)
            {
                var_ArrayLength[d] = var_Reader.ReadInt32();
            }

            //Go through each dimension and read the lowerbound!
            int[] var_ArrayLowerBound = new int[var_Rank];
            for (int d = 0; d < var_Rank; d++)
            {
                var_ArrayLowerBound[d] = var_Reader.ReadInt32();
            }

            var var_Array = Array.CreateInstance(var_ElementType, var_ArrayLength);

            if (var_Rank == 1)
            {
                ArrayIndexer_D_1 arrayIndexer = new ArrayIndexer_D_1(var_ArrayLength[0], var_ArrayLowerBound[0]);

                if (PrimitiveTypeMatcher.TypeHashSet.Contains(var_ElementType))
                {
                    int[] var_IndexArray = new int[1];
                    while (arrayIndexer.MoveNext())
                    {
                        var_IndexArray[0] = arrayIndexer.Current_0;

                        var_Array.SetValue(var_Reader.Read(var_ElementType), var_IndexArray);
                    }
                }
                else
                {
                    int[] var_IndexArray = new int[1];
                    while (arrayIndexer.MoveNext())
                    {
                        var_IndexArray[0] = arrayIndexer.Current_0;

                        byte[] var_Bytes = var_Reader.ReadBytesAndSize();
                        Object var_Item  = Serializer.DeSerialize(_Type.GetElementType(), var_Bytes);
                        var_Array.SetValue(var_Item, var_IndexArray);
                    }
                }
            }
            else if (var_Rank == 2)
            {
                ArrayIndexer_D_2 arrayIndexer = new ArrayIndexer_D_2(var_ArrayLength[0], var_ArrayLength[1], var_ArrayLowerBound[0], var_ArrayLowerBound[1]);

                if (PrimitiveTypeMatcher.TypeHashSet.Contains(var_ElementType))
                {
                    int[] var_IndexArray = new int[2];
                    while (arrayIndexer.MoveNext())
                    {
                        var_IndexArray[0] = arrayIndexer.Current_0;
                        var_IndexArray[1] = arrayIndexer.Current_1;

                        var_Array.SetValue(var_Reader.Read(var_ElementType), var_IndexArray);
                    }
                }
                else
                {
                    int[] var_IndexArray = new int[2];
                    while (arrayIndexer.MoveNext())
                    {
                        var_IndexArray[0] = arrayIndexer.Current_0;
                        var_IndexArray[1] = arrayIndexer.Current_1;

                        byte[] var_Bytes = var_Reader.ReadBytesAndSize();
                        Object var_Item  = Serializer.DeSerialize(_Type.GetElementType(), var_Bytes);
                        var_Array.SetValue(var_Item, var_IndexArray);
                    }
                }
            }
            else
            {
                ArrayIndexer_D_N arrayIndexer = new ArrayIndexer_D_N(var_ArrayLength, var_ArrayLowerBound);

                if (PrimitiveTypeMatcher.TypeHashSet.Contains(var_ElementType))
                {
                    while (arrayIndexer.MoveNext())
                    {
                        var_Array.SetValue(var_Reader.Read(var_ElementType), arrayIndexer.Current);
                    }
                }
                else
                {
                    while (arrayIndexer.MoveNext())
                    {
                        byte[] var_Bytes = var_Reader.ReadBytesAndSize();
                        Object var_Item  = Serializer.DeSerialize(_Type.GetElementType(), var_Bytes);
                        var_Array.SetValue(var_Item, arrayIndexer.Current);
                    }
                }
            }

            _Object = var_Array;
            return(true);
        }
        private void InternDeSerialize(Object _Object, ByteReader _Reader, List <Type> _SerializeAbleBaseList, int _CurrentIndex)
        {
            Type var_CurrentType = _SerializeAbleBaseList[_CurrentIndex];

            Dictionary <int, FieldInfo> var_FoundFieldDictionary = new Dictionary <int, FieldInfo>();

            FieldInfo[] var_FoundFields;
            int[]       var_FoundFieldsId;
            bool[]      var_FoundFieldsOptional;

            FieldContext.LoadFields(var_CurrentType, out var_FoundFields, out var_FoundFieldsId, out var_FoundFieldsOptional);

            for (int i = 0; i < var_FoundFields.Length; i++)
            {
                var_FoundFieldDictionary.Add(var_FoundFieldsId[i], var_FoundFields[i]);
            }

            int var_FieldLength = _Reader.ReadByte();

            for (int i = 0; i < var_FieldLength; i++)
            {
                int var_FieldId = _Reader.ReadByte();

                FieldInfo var_FieldInfo;
                if (var_FoundFieldDictionary.TryGetValue(var_FieldId, out var_FieldInfo))
                {
                    var var_FieldType = var_FieldInfo.FieldType;

                    //
                    if (PrimitiveTypeMatcher.TypeHashSet.Contains(var_FieldType))
                    {
                        var_FieldInfo.SetValue(_Object, _Reader.Read(var_FieldType));
                    }
                    else
                    {
                        byte[] var_Bytes = _Reader.ReadBytesAndSize();
                        Object var_Value = Serializer.DeSerialize(var_FieldType, var_Bytes);
                        var_FieldInfo.SetValue(_Object, var_Value);
                    }

                    //
                    var_FoundFieldDictionary.Remove(var_FieldId);
                }
                else
                {
                    Console.WriteLine(var_FieldId + " not found!");
                }
            }

            foreach (var var_Pair in var_FoundFieldDictionary)
            {
                if (var_FoundFieldsOptional[var_Pair.Key])
                {
                    Console.WriteLine(var_Pair.Key + " is optional!");
                }
                else
                {
                    Console.WriteLine(var_Pair.Key + " is not optional and not set!");
                }
            }

            //Inheritance
            if (_Reader.Position != _Reader.Length)
            {
                this.InternDeSerialize(_Object, _Reader, _SerializeAbleBaseList, _CurrentIndex + 1);
            }
        }
Example #26
0
        public PngChunk(ByteReader stream)
        {
            // Read chunk length.
            var lengthBuffer = new byte[4];
            int numBytes     = stream.Read(lengthBuffer, 0, 4);

            if (numBytes >= 1 && numBytes <= 3)
            {
                Engine.Log.Warning($"Chunk length {numBytes} is not valid!", MessageSource.ImagePng);
                return;
            }

            Array.Reverse(lengthBuffer);
            var length = BitConverter.ToInt32(lengthBuffer, 0);

            // Invalid chunk or after end chunk.
            if (numBytes == 0)
            {
                return;
            }

            // Read the chunk type.
            var typeBuffer         = new byte[4];
            int typeBufferNumBytes = stream.Read(typeBuffer, 0, 4);

            if (typeBufferNumBytes >= 1 && typeBufferNumBytes <= 3)
            {
                throw new Exception("ImagePng: Chunk type header is not valid!");
            }
            var chars = new char[4];

            chars[0] = (char)typeBuffer[0];
            chars[1] = (char)typeBuffer[1];
            chars[2] = (char)typeBuffer[2];
            chars[3] = (char)typeBuffer[3];
            Type     = new string(chars);

            ChunkReader = stream.Branch(0, false, length);
            stream.Seek(length, SeekOrigin.Current);

            // Read compressed chunk.
            var crcBuffer           = new byte[4];
            int numBytesCompression = stream.Read(crcBuffer, 0, 4);

            if (numBytesCompression >= 1 && numBytesCompression <= 3)
            {
                throw new Exception("ImagePng: Compressed data header is not valid!");
            }
            Array.Reverse(crcBuffer);
            Crc = BitConverter.ToUInt32(crcBuffer, 0);

#if DEBUG
            var crc = new Crc32();
            crc.Update(typeBuffer);
            crc.Update(ChunkReader.Data.Span);

            // PNGs saved with Gimp spam the log with warnings.
            // https://gitlab.gnome.org/GNOME/gimp/-/issues/2111
            //if (crc.Value != Crc)
            //    Engine.Log.Warning($"CRC Error. PNG Image chunk {Type} is corrupt!", "ImagePng");
#endif
            Valid = true;
        }
Example #27
0
        private Results ProcessPacket(byte[] bytes, bool isOutbound, DateTime timestamp)
        {
            if (mTerminated)
            {
                return(Results.Terminated);
            }

            if (Build == 0)
            {
                var packet = new ByteReader(bytes);
                packet.Read <ushort>(); // rawSeq
                int length = packet.ReadInt();
                if (bytes.Length - 6 < length)
                {
                    logger.Debug($"Connection on port {mLocalEndpoint} did not have a MapleStory2 Handshake");
                    return(Results.CloseMe);
                }

                ushort opcode = packet.Read <ushort>();
                if (opcode != 0x01)
                {
                    // RequestVersion
                    logger.Debug($"Connection on port {mLocalEndpoint} did not have a valid MapleStory2 Connection Header");
                    return(Results.CloseMe);
                }

                uint version = packet.Read <uint>();
                uint siv     = packet.Read <uint>();
                uint riv     = packet.Read <uint>();
                uint blockIV = packet.Read <uint>();
                byte type    = packet.ReadByte();

                Build  = version;
                Locale = MapleLocale.UNKNOWN;

                outDecryptor = new MapleCipher.Decryptor(Build, siv, blockIV);
                inDecryptor  = new MapleCipher.Decryptor(Build, riv, blockIV);

                inDecryptor.Decrypt(bytes); // Advance the IV

                // Generate HandShake packet
                Definition definition = Config.Instance.GetDefinition(Build, Locale, false, opcode);
                if (definition == null)
                {
                    definition = new Definition {
                        Outbound = false,
                        Opcode   = opcode,
                        Name     = "RequestVersion",
                    };
                    SaveDefinition(Locale, Build, definition);
                }

                ArraySegment <byte> segment = new ArraySegment <byte>(packet.Buffer);
                var maplePacket             = new MaplePacket(timestamp, isOutbound, Build, opcode, segment);
                // Add to list of not exist (TODO: SortedSet?)
                if (!Opcodes.Exists(op => op.Outbound == maplePacket.Outbound && op.Header == maplePacket.Opcode))
                {
                    // Should be false, but w/e
                    Opcodes.Add(new Opcode(maplePacket.Outbound, maplePacket.Opcode));
                }

                AddPacket(maplePacket, false, true);

                logger.Info($"[CONNECTION] {mRemoteEndpoint} <-> {mLocalEndpoint}: MapleStory2 V{Build}");

                return(Results.Show);
            }

            try {
                MapleCipher.Decryptor decryptor = isOutbound ? outDecryptor : inDecryptor;
                ByteReader            packet    = decryptor.Decrypt(bytes);
                // It's possible to get an empty packet, just ignore it.
                // Decryption is still necessary to advance sequence number.
                if (packet.Available == 0)
                {
                    return(Results.Continue);
                }

                ushort opcode = packet.Peek <ushort>();
                ArraySegment <byte> segment = new ArraySegment <byte>(packet.Buffer, 2, packet.Length - 2);
                var maplePacket             = new MaplePacket(timestamp, isOutbound, Build, opcode, segment);
                AddPacket(maplePacket);

                return(Results.Continue);
            } catch (ArgumentException ex) {
                logger.Fatal(ex, "Exception while processing packets");
                return(Results.CloseMe);
            }
        }
Example #28
0
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage: <FILENAME>");
                return;
            }

            var filename = args[0];
            var stream   = new FileStream(filename, FileMode.Open, FileAccess.Read);
            var fileTail = new FileTail(stream);

            foreach (var stripe in fileTail.Stripes)
            {
                Console.WriteLine($"Reading stripe with {stripe.NumRows} rows");
                var stripeStreamCollection = stripe.GetStripeStreamCollection();

                if (fileTail.Footer.Types[0].Kind != ColumnTypeKind.Struct)
                {
                    throw new InvalidDataException($"The base type must be {nameof(ColumnTypeKind.Struct)}");
                }
                var names = fileTail.Footer.Types[0].FieldNames;

                for (int columnId = 1; columnId < fileTail.Footer.Types.Count; columnId++)
                {
                    var columnType = fileTail.Footer.Types[columnId];
                    var columnName = names[columnId - 1];

                    switch (columnType.Kind)
                    {
                    case ColumnTypeKind.Long:
                    case ColumnTypeKind.Int:
                    case ColumnTypeKind.Short:
                    {
                        Console.WriteLine($"Reading longs from column {columnId} ({columnName})");
                        var reader = new LongReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} longs");
                        break;
                    }

                    case ColumnTypeKind.Byte:
                    {
                        Console.WriteLine($"Reading bytes from column {columnId} ({columnName})");
                        var reader = new ByteReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} bytes");
                        break;
                    }

                    case ColumnTypeKind.Boolean:
                    {
                        Console.WriteLine($"Reading bools from column {columnId} ({columnName})");
                        var reader = new BooleanReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} bools");
                        break;
                    }

                    case ColumnTypeKind.Float:
                    {
                        Console.WriteLine($"Reading floats from column {columnId} ({columnName})");
                        var reader = new FloatReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} floats");
                        break;
                    }

                    case ColumnTypeKind.Double:
                    {
                        Console.WriteLine($"Reading doubles from column {columnId} ({columnName})");
                        var reader = new DoubleReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} doubles");
                        break;
                    }

                    case ColumnTypeKind.Binary:
                    {
                        Console.WriteLine($"Reading binary from column {columnId} ({columnName})");
                        var reader = new ColumnTypes.BinaryReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} binaries");
                        break;
                    }

                    case ColumnTypeKind.Decimal:
                    {
                        Console.WriteLine($"Reading decimals from column {columnId} ({columnName})");
                        var reader = new DecimalReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} decimals");
                        break;
                    }

                    case ColumnTypeKind.Timestamp:
                    {
                        Console.WriteLine($"Reading timestamps from column {columnId} ({columnName})");
                        var reader = new TimestampReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} timestamps");
                        break;
                    }

                    case ColumnTypeKind.Date:
                    {
                        Console.WriteLine($"Reading dates from column {columnId} ({columnName})");
                        var reader = new DateReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} dates");
                        break;
                    }

                    case ColumnTypeKind.String:
                    {
                        Console.WriteLine($"Reading strings from column {columnId} ({columnName})");
                        var reader = new ColumnTypes.StringReader(stripeStreamCollection, (uint)columnId);
                        var count  = reader.Read().Count();
                        Console.WriteLine($"Done reading {count} strings");
                        break;
                    }

                    default:
                        throw new NotImplementedException();
                    }
                }

                Console.WriteLine("Done reading stripe");
            }
        }
Example #29
0
 public T Read <T>() where T : struct => reader.Read <T>();
Example #30
0
        public bool DeSerialize(Type _Type, byte[] _Bytes, out object _Object)
        {
            if (!_Type.IsArray)
            {
                _Object = null;
                return(false);
            }

            ByteReader var_Reader = new ByteReader(_Bytes);

            bool var_IsNull = var_Reader.ReadBoolean();

            if (var_IsNull)
            {
                _Object = null;
                return(true);
            }

            //

            Type var_ElementType = _Type.GetElementType();

            //Read dimensions
            int var_Dimensions = var_Reader.ReadInt32();

            //Go through each dimension and read the length!
            int[] var_ArrayLength = new int[var_Dimensions];
            for (int d = 0; d < var_Dimensions; d++)
            {
                var_ArrayLength[d] = var_Reader.ReadInt32();
            }

            //Go through each dimension and read the lowerbound!
            int[] var_ArrayLowerBound = new int[var_Dimensions];
            for (int d = 0; d < var_Dimensions; d++)
            {
                var_ArrayLowerBound[d] = var_Reader.ReadInt32();
            }

            var var_Array = Array.CreateInstance(var_ElementType, var_ArrayLength);

            ArrayIndexer arrayIndexer = new ArrayIndexer(var_ArrayLength, var_ArrayLowerBound);

            if (PrimitiveTypeMatcher.TypeDictionary.ContainsKey(var_ElementType))
            {
                while (arrayIndexer.MoveNext())
                {
                    var_Array.SetValue(var_Reader.Read(var_ElementType), arrayIndexer.Current);
                }
            }
            else
            {
                while (arrayIndexer.MoveNext())
                {
                    byte[] var_Bytes = var_Reader.ReadBytesAndSize();
                    Object var_Item  = Serializer.DeSerialize(_Type.GetElementType(), var_Bytes);
                    var_Array.SetValue(var_Item, arrayIndexer.Current);
                }
            }

            _Object = var_Array;
            return(true);
        }