public async Task UT_Cache_RawOverrideSerializer_Async()
        {
            var raw = new RawSerializer();

            raw.SetSerializerFor <User>(u => Encoding.UTF8.GetBytes(u.Id.ToString()),
                                        b => new User()
            {
                Id = int.Parse(Encoding.UTF8.GetString(b))
            });
            var ctx = new Context(Common.Config, raw);

            Thread.Sleep(100);
            var users = await GetUsersAsync();

            string key  = "UT_Cache_RawOverrideSerializer_Async";
            string key2 = "UT_Cache_RawOverrideSerializer_Async2";

            ctx.Cache.Remove(new[] { key, key2 });
            await ctx.Cache.SetObjectAsync(key, users[0]);

            await ctx.Cache.SetHashedAsync(key2, "X", users[1]);

            var v = await ctx.Cache.GetObjectAsync <User>(key);

            var v2 = await ctx.Cache.GetHashedAsync <User>(key2, "X");

            var v3 = await ctx.Cache.GetObjectAsync <int>(key);

            Assert.AreEqual(users[0].Id, v.Id);
            Assert.AreEqual(users[1].Id, v2.Id);
            Assert.AreEqual(users[0].Id, v3);
        }
Example #2
0
 public void StreamDeserializationTest()
 {
     using (MemoryStream testStream = new MemoryStream(this.TestStructInstanceData))
     {
         TestStruct deserialized = RawSerializer.ReadStructFromRawData <TestStruct>(testStream);
         Assert.AreEqual <TestStruct>(deserialized, this.TestStructInstance);
     }
 }
Example #3
0
        private object DeserializePacket(byte[] buffer, object packet)
        {
            RawSerializer rawSerializer = new RawSerializer(packet.GetType(), false);
            MemoryStream  source        = new MemoryStream(buffer);

            rawSerializer.Deserialize(packet, source);
            return(packet);
        }
Example #4
0
        //---------------------------------------------------------------
        #endregion
        //---------------------------------------------------------------

        //---------------------------------------------------------------
        #region Methods
        //---------------------------------------------------------------
        /// <summary>
        /// Helper function loading a lump from file into structs
        /// </summary>
        /// <param name="lump">Vertices, Faces, ...</param>
        /// <param name="structType">type of struct to load into</param>
        /// <returns>list of instances of structType</returns>
        private IList LoadLump(QuakeLumps lump, Type structType)
        {
            LumpLocation location = (LumpLocation)locations[(int)lump];

            stream.Seek(location.Offset, SeekOrigin.Begin);
            int vertexNum = (int)(location.Length / Marshal.SizeOf(structType));

            return(RawSerializer.DeserializeArray(stream, structType, vertexNum));
        }
Example #5
0
        private ushort SerializePacket(byte[] buffer, object packet)
        {
            RawSerializer rawSerializer = new RawSerializer(packet.GetType(), false);
            MemoryStream  target        = new MemoryStream(buffer);
            int           num;

            rawSerializer.Serialize(packet, target, out num);
            return((ushort)num);
        }
Example #6
0
 public void StreamSerializationTest()
 {
     using (MemoryStream testStream = new MemoryStream())
     {
         RawSerializer.WriteRawData(testStream, this.TestStructInstance);
         byte[] serialized = testStream.ToArray();
         Assert.IsTrue(Enumerable.SequenceEqual <byte>(serialized, this.TestStructInstanceData));
     }
 }
Example #7
0
        private void SerializeHeader(byte[] buffer, ushort size, ushort command)
        {
            HEADER        hEADER        = new HEADER(size + 5, command);
            RawSerializer rawSerializer = new RawSerializer(hEADER.GetType(), false);
            MemoryStream  target        = new MemoryStream(buffer);
            int           num;

            rawSerializer.Serialize(hEADER, target, out num);
        }
Example #8
0
        /// <summary>
        /// Initialize the serializer, consisting of the following stack:
        /// GZip -> Crypto -> MemoryStream
        /// </summary>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        protected void InitializeSerializer(byte[] key, byte[] iv)
        {
            writeBuffer = new MemoryStream();
            EncryptTransformer et = new EncryptTransformer(EncryptionAlgorithm.Rijndael);

            et.IV = iv;
            ICryptoTransform ict = et.GetCryptoServiceProvider(key);

            encStream  = new CryptoStream(writeBuffer, ict, CryptoStreamMode.Write);
            comp       = new GZipStream(encStream, CompressionMode.Compress, true);                     // important to be set to true!
            serializer = new RawSerializer(comp);
        }
Example #9
0
 private int RecvHeader(ref HEADER header)
 {
     try
     {
         byte[]        buffer        = new byte[5];
         int           result        = this._parent.Sock.Receive(buffer);
         RawSerializer rawSerializer = new RawSerializer(header.GetType(), false);
         MemoryStream  source        = new MemoryStream(buffer);
         rawSerializer.Deserialize <HEADER>(ref header, source);
         return(result);
     }
     catch (Exception)
     {
     }
     return(0);
 }
        public void UT_Cache_RawOverrideSerializer_object()
        {
            var raw = new RawSerializer();

            raw.SetSerializerFor <object>(o => Encoding.UTF8.GetBytes(o.GetHashCode().ToString()),
                                          b => int.Parse(Encoding.UTF8.GetString(b)));
            var ctx = new Context(Common.Config, raw);

            Thread.Sleep(1000);
            string key = "UT_Cache_RawOverrideSerializer_object";

            ctx.Cache.Remove(new[] { key });
            ctx.Cache.SetObject(key, this);
            var v = ctx.Cache.GetObject <int>(key);

            Assert.AreEqual(this.GetHashCode(), v);
        }
        public async Task UT_Cache_RawOverrideSerializer_object_Async()
        {
            var raw = new RawSerializer();

            raw.SetSerializerFor <object>(o => Encoding.UTF8.GetBytes(o.GetHashCode().ToString()),
                                          b => int.Parse(Encoding.UTF8.GetString(b)));
            var ctx = new Context(Common.Config, raw);

            Thread.Sleep(100);
            string key = "UT_Cache_RawOverrideSerializer_object_Async";

            ctx.Cache.Remove(new[] { key });
            User usr = new User();
            await ctx.Cache.SetObjectAsync <object>(key, usr);

            var v = await ctx.Cache.GetObjectAsync <object>(key);

            Assert.AreEqual(usr.GetHashCode(), v);
        }
Example #12
0
        /// <summary>
        /// DataSet���л���ѹ��
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static byte[] CompressDataSet(DataSet ds)
        {
            byte[] compressedBuf;

            #region serialize
            RawSerializer rs = new RawSerializer();
            byte[] buf = rs.Serialize(ds);
            #endregion

            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            System.IO.Compression.GZipStream gs = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Compress, true);

            gs.Write(buf, 0, buf.Length);
            gs.Close();

            compressedBuf = ms.ToArray();

            return compressedBuf;
        }
Example #13
0
        /// <summary>
        /// Loads the model.
        /// </summary>
        /// <param name="stream">Stream to load model from.</param>
        /// <returns>The loaded model.</returns>
        public Model LoadModel(Stream stream)
        {
            BlendMesh mesh;

            // get header and check if it is ok
            MD2_Header header = (MD2_Header)RawSerializer.Deserialize(stream, typeof(MD2_Header));

            if (header.Ident != 844121161 || header.Version != 8)
            {
                return(null);
            }

            // Load skins
            MD2_Skin[] skinNames = (MD2_Skin[])RawSerializer.DeserializeArray(stream, typeof(MD2_Skin), header.NumSkins);

            // Load texture coordinates
            MD2_TextureCoordinate[] textureCoordinates = (MD2_TextureCoordinate[])RawSerializer.DeserializeArray(stream, typeof(MD2_TextureCoordinate), header.NumTextureCoordinates);

            // Load triangless
            MD2_Triangle[] triangles   = (MD2_Triangle[])RawSerializer.DeserializeArray(stream, typeof(MD2_Triangle), header.NumTris);
            IndexStream    indexStream = new IndexStream16(triangles.Length);

            for (int i = 0; i < triangles.Length; i++)
            {
                // indexStream[i] = triangles[i].VertexIndex[j;
            }

            mesh = new BlendMesh(header.NumFrames);

            // Load frames
            for (int i = 0; i < header.NumFrames; i++)
            {
                MD2_Frame      frame    = (MD2_Frame)RawSerializer.Deserialize(stream, typeof(MD2_Frame));
                MD2_Vertex[]   vertices = (MD2_Vertex[])RawSerializer.DeserializeArray(stream, typeof(MD2_Vertex), header.NumVertices);
                VertexUnit     vu       = new VertexUnit(VertexFormat.Position, vertices.Length);
                PositionStream ps       = (PositionStream)vu[typeof(Purple.Graphics.VertexStreams.PositionStream)];
                mesh.Meshes[i] = new Mesh(new SubSet(vu, indexStream));
            }
            return(new Model(mesh, null));
        }
Example #14
0
        static void DumpHeaders(string file)
        {
            using (var stream = File.OpenRead(file))
            {
                Console.WriteLine("MAT header data for file {0}:".FormatInvariant(file));
                Console.WriteLine("MAT Header section");

                var header = RawSerializer.Deserialize <MatHeader>(stream);

                if (header.Type == MatHeader.MatType.Texture)
                {
                    Console.WriteLine(header);
                    for (int i = 0; i < header.MatRecordCount; i++)
                    {
                        Console.WriteLine();
                        Console.WriteLine("MAT record section");
                        Console.WriteLine(RawSerializer.Deserialize <MatRecordHeader>(stream));
                    }

                    for (int i = 0; i < header.MatRecordCount; i++)
                    {
                        var textureHeader = RawSerializer.Deserialize <TextureDataHeader>(stream);
                        Console.WriteLine();
                        Console.WriteLine("MAT record section");
                        Console.WriteLine(textureHeader);

                        // Skip over texture data
                        long dataSize = textureHeader.SizeX * textureHeader.SizeY * header.Bitdepth;
                        stream.Seek(dataSize, SeekOrigin.Current);
                    }
                }
                else
                {
                    Console.WriteLine("Unsupported or unrecognized MAT type, only texture MATs are supported");
                    Environment.Exit(1);
                }
            }
        }
Example #15
0
        /// <summary>
        /// loads a quake3 level from a stream
        /// </summary>
        /// <param name="stream">stream to load from</param>
        /// <returns>level as a mesh</returns>
        public Mesh Load(Stream stream)
        {
            Mesh mesh = new Mesh();

            this.stream = stream;

            // get header and check if it is ok
            QuakeHeader header = (QuakeHeader)RawSerializer.Deserialize(stream, typeof(QuakeHeader));

            if (header.ID != 1347633737 || header.Version != 0x2e)
            {
                return(null);
            }

            // get locations of lumps
            locations = RawSerializer.DeserializeArray(stream, typeof(LumpLocation), (int)QuakeLumps.LumpNumber);

            // get lumps
            IList quakeVertices  = LoadLump(QuakeLumps.Vertices, typeof(QuakeVertex));
            IList quakeFaces     = LoadLump(QuakeLumps.Faces, typeof(QuakeFace));
            IList quakeTextures  = LoadLump(QuakeLumps.Textures, typeof(QuakeTexture));
            IList quakeLightMaps = LoadLump(QuakeLumps.Lightmaps, typeof(QuakeLightMap));


            // Load all texture images and put into array
            IList textures = LoadTextures(quakeTextures);
            // Load lightMaps, create texture and put into array
            IList lightMaps = LoadLightMaps(quakeLightMaps);

            // create list from vertices
            VertexUnit     vertexUnit = new VertexUnit(VertexFormat.PositionTexture2, quakeVertices.Count);
            PositionStream pos        = (PositionStream)vertexUnit[typeof(PositionStream)];
            TextureStream  texStream  = (TextureStream)vertexUnit[typeof(TextureStream)];
            TextureStream  light      = (TextureStream)vertexUnit[typeof(TextureStream), 1];

            int i = 0;

            foreach (QuakeVertex v in quakeVertices)
            {
                pos[i]       = new Math.Vector3(v.Position[0], v.Position[2], -v.Position[1]);
                texStream[i] = new Math.Vector2(v.TextureCoord[0], v.TextureCoord[1]);
                light[i]     = new Math.Vector2(v.LightmapCoord[0], v.LightmapCoord[1]);
                i++;
            }

            // presort faces
            Array.Sort(((Array)quakeFaces));

            // create mesh
            int       oldLightMap = ((QuakeFace)quakeFaces[0]).LightmapID;
            int       oldTexture  = ((QuakeFace)quakeFaces[0]).TextureID;
            ArrayList indices     = new ArrayList();

            for (i = 0; i < quakeFaces.Count; ++i)
            {
                QuakeFace qf = (QuakeFace)quakeFaces[i];
                if (qf.Type == 1)
                {
                    if (qf.TextureID != oldTexture || qf.LightmapID != oldLightMap)
                    {
                        mesh.SubSets.Add(new SubSet(vertexUnit, IndexStream.Create(indices, vertexUnit.Size)));
                        Textures texs = new Textures("color", (ITexture)textures[oldTexture]);
                        if (oldLightMap == -1)
                        {
                            texs["lightMap"] = null;
                        }
                        else
                        {
                            texs["lightMap"] = (ITexture)lightMaps[oldLightMap];
                        }
                        mesh.Textures.Add(texs);
                        indices.Clear();
                    }

                    // add indices => convert from fan to list
                    for (int j = 2; j < qf.NumOfVerts; j++)
                    {
                        indices.Add(qf.VertexIndex);
                        indices.Add(qf.VertexIndex + j - 1);
                        indices.Add(qf.VertexIndex + j);
                    }

                    oldTexture  = qf.TextureID;
                    oldLightMap = qf.LightmapID;
                }
            }
            return(mesh);
        }
Example #16
0
        public void ByteArrayDeserializationTest()
        {
            TestStruct deserialized = RawSerializer.GetStructFromRawData <TestStruct>(this.TestStructInstanceData);

            Assert.AreEqual <TestStruct>(deserialized, this.TestStructInstance);
        }
Example #17
0
 public void ByteArraySerializationTest()
 {
     byte[] serialized = RawSerializer.GetRawData <TestStruct>(this.TestStructInstance);
     Assert.IsTrue(Enumerable.SequenceEqual <byte>(serialized, this.TestStructInstanceData));
 }
 public void UT_Cache_RawOverrideSerializer()
 {
     var raw = new RawSerializer();
     raw.SetSerializerFor<User>(u => Encoding.UTF8.GetBytes(u.Id.ToString()),
         b => new User() {Id = int.Parse(Encoding.UTF8.GetString(b))});
     var ctx = new Context(Common.Config, raw);
     Thread.Sleep(1000);
     var users = GetUsers();
     string key = "UT_Cache_RawOverrideSerializer";
     string key2 = "UT_Cache_RawOverrideSerializer2";
     ctx.Cache.Remove(new[] {key, key2});
     ctx.Cache.SetObject(key, users[0]);
     ctx.Cache.SetHashed(key2, "X", users[1]);
     var v = ctx.Cache.GetObject<User>(key);
     var v2 = ctx.Cache.GetHashed<User>(key2, "X");
     var v3 = ctx.Cache.GetObject<int>(key);
     Assert.AreEqual(users[0].Id, v.Id);
     Assert.AreEqual(users[1].Id, v2.Id);
     Assert.AreEqual(users[0].Id, v3);
 }
 public void UT_Cache_RawOverrideSerializer_object()
 {
     var raw = new RawSerializer();
     raw.SetSerializerFor<object>(o => Encoding.UTF8.GetBytes(o.GetHashCode().ToString()),
         b => int.Parse(Encoding.UTF8.GetString(b)));
     var ctx = new Context(Common.Config, raw);
     Thread.Sleep(1000);
     string key = "UT_Cache_RawOverrideSerializer_object";
     ctx.Cache.Remove(new[] { key });
     User usr = new User();
     ctx.Cache.SetObject<object>(key, usr);
     var v = ctx.Cache.GetObject<object>(key);
     Assert.AreEqual(usr.GetHashCode(), v);
 }
Example #20
0
        private MD3Part LoadMD3(string part)
        {
            using (Stream stream = fileSystem.Open(path + part + ".md3")) {
                // get header and check if it is ok
                MD3_Header header = (MD3_Header)RawSerializer.Deserialize(stream, typeof(MD3_Header));
                if (header.Id != 860898377 || header.Version != 15)
                {
                    return(null);
                }

                // load bone frames
                MD3_Frame[] frames = (MD3_Frame[])RawSerializer.DeserializeArray(stream, typeof(MD3_Frame), header.NumFrames);

                // load tags
                SortedList links = GetLinks((MD3_Tag[])RawSerializer.DeserializeArray(stream, typeof(MD3_Tag), header.NumTags * header.NumFrames));

                long meshOffset = stream.Position;

                // one mesh for every frame
                BlendMesh mesh = new BlendMesh(header.NumFrames);

                // load meshes
                for (int iMesh = 0; iMesh < header.NumMeshes; iMesh++)
                {
                    stream.Position = meshOffset;
                    MD3_MeshHeader meshHeader = (MD3_MeshHeader)RawSerializer.Deserialize(stream, typeof(MD3_MeshHeader));

                    MD3_Skin[] skins = (MD3_Skin[])RawSerializer.DeserializeArray(stream, typeof(MD3_Skin), meshHeader.NumSkins);

                    stream.Position = meshOffset + meshHeader.TriangleOffset;
                    MD3_Triangle[] triangles = (MD3_Triangle[])RawSerializer.DeserializeArray(stream, typeof(MD3_Triangle), meshHeader.NumTriangles);

                    stream.Position = meshOffset + meshHeader.TexCoordOffset;
                    MD3_TexCoord[] texCoords = (MD3_TexCoord[])RawSerializer.DeserializeArray(stream, typeof(MD3_TexCoord), meshHeader.NumVertices);

                    stream.Position = meshOffset + meshHeader.VertexOffset;
                    MD3_Vertex[] vertices = (MD3_Vertex[])RawSerializer.DeserializeArray(stream, typeof(MD3_Vertex), meshHeader.NumFrames * meshHeader.NumVertices);

                    float    scale = 64.0f;
                    string   name  = StringHelper.Convert(meshHeader.Name);
                    ITexture tx    = (ITexture)textures[name];

                    Triangle[] tris = new Triangle[triangles.Length];
                    for (int i = 0; i < triangles.Length; i++)
                    {
                        tris[i].A = (triangles[i]).A;
                        tris[i].B = (triangles[i]).B;
                        tris[i].C = (triangles[i]).C;
                    }
                    IndexStream indexStream = IndexStream16.FromTriangles(tris);

                    int vertCount = meshHeader.NumVertices; // *meshHeader.NumFrames;

                    for (int iFrame = 0; iFrame < meshHeader.NumFrames; iFrame++)
                    {
                        VertexUnit     vertexUnit = new VertexUnit(VertexFormat.PositionNormalTexture, vertCount);
                        PositionStream pos        = (PositionStream)vertexUnit[typeof(PositionStream)];
                        NormalStream   normal     = (NormalStream)vertexUnit[typeof(NormalStream)];
                        TextureStream  tex        = (TextureStream)vertexUnit[typeof(TextureStream)];

                        for (int i = 0; i < vertCount; i++)
                        {
                            int vertIndex = iFrame * meshHeader.NumVertices + i;
                            pos[i] = new Vector3(vertices[vertIndex].X / scale,
                                                 vertices[vertIndex].Z / scale,
                                                 -vertices[vertIndex].Y / scale);

                            int texIndex = i % meshHeader.NumVertices;
                            tex[i] = new Vector2(texCoords[texIndex].U,
                                                 texCoords[texIndex].V);

                            //Normal vector
                            int   compressedNormal = ((MD3_Vertex)vertices[vertIndex]).Normal;
                            float lng = (compressedNormal & 0xFF) * Math.Basic.PI / 128;
                            float lat = ((compressedNormal >> 8) & 0xFF) * Math.Basic.PI / 128;

                            normal[i] = new Vector3(Math.Trigonometry.Cos(lat) * Math.Trigonometry.Sin(lng),
                                                    Math.Trigonometry.Cos(lng),
                                                    -Math.Trigonometry.Sin(lat) * Math.Trigonometry.Sin(lng));
                        }
                        if (mesh.Meshes[iFrame] == null)
                        {
                            mesh.Meshes[iFrame] = new Mesh();
                        }
                        mesh.Meshes[iFrame].SubSets.Add(new SubSet(vertexUnit, indexStream));
                        mesh.Meshes[iFrame].Textures.Add(new Textures("color", tx));
                    }

                    // Increase the offset into the file
                    meshOffset += meshHeader.MeshSize;
                }

                return(new MD3Part(mesh, links));
            }
        }