예제 #1
0
        public void TestVectorAnyObject()
        {
            var writer = new Amf3Writer();
            var reader = new Amf3Reader();

            reader.RegisterTypedObject <TestCls>();

            var t = new TestCls()
            {
                T1 = 3.3,
                T2 = "abc",
                T3 = "abd",
                t4 = new Vector <int>()
                {
                    2000, 30000, 400000
                }
            };

            using (var sc = new SerializationContext())
            {
                var v = new Vector <object>()
                {
                    t, 3.2, 4.5
                };
                writer.WriteBytes(v, sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                reader.TryGetVectorObject(buffer, out var readVal, out var consumed);

                Assert.IsTrue(readVal.GetType().GetGenericArguments().First() == typeof(object));
                Assert.AreEqual(v, readVal);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #2
0
        public void TestObject()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            var obj = new AmfObject
            {
                { "t1", (uint)2 },
                { "t2", 3.1 }
            };

            obj.AddDynamic("t3", new Vector <int>()
            {
                2, 3, 4
            });

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes(obj, sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetObject(buffer, out var readVal, out var consumed));
                var readObj = (AmfObject)readVal;
                Assert.AreEqual(readObj.Fields["t1"], (uint)2);
                Assert.AreEqual(readObj.Fields["t2"], 3.1);
                Assert.AreEqual(readObj.DynamicFields["t3"], new Vector <int>()
                {
                    2, 3, 4
                });
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #3
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref count);
     reader.Read(ref dwordsPerVertex);
     reader.Read(ref resultId);
 }
예제 #4
0
        public void TestIExternalizable()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            reader.RegisterExternalizable <iexternalizable>();

            var ext = new iexternalizable()
            {
                v1 = 0.1,
                v2 = 1
            };

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes(ext, sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetObject(buffer, out var readVal, out var consumed));
                var val = (iexternalizable)readVal;

                Assert.AreEqual(val.v1, ext.v1);
                Assert.AreEqual(val.v2, ext.v2);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #5
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref indexBufferId);
     reader.Read(ref firstIndex);
     reader.Read(ref numTriangles);
 }
예제 #6
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref name);
     reader.Read(ref span);
     reader.Read(ref delta);
 }
예제 #7
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref programId);
     reader.Read(ref vertexProgram);
     reader.Read(ref fragmentProgram);
 }
예제 #8
0
        public void TestObject3()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            reader.RegisterTypedObject <TestCls>();

            var t = new TestCls()
            {
                T1 = 3.3,
                T2 = "abc",
                T3 = "abd",
                t4 = new Vector <int>()
                {
                    2000, 30000, 400000
                }
            };

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes(t, sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetObject(buffer, out var readVal, out var consumed));
                Assert.AreEqual(t, readVal);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #9
0
        public void TestArray()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            var arr = new Amf3Array();

            arr["a"] = (uint)1;
            arr["b"] = 2.1;
            arr["d"] = null;

            arr.DensePart.Add(1);
            arr.DensePart.Add(1.2);

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes(arr, sc);

                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetArray(buffer, out var readVal, out var consumed));
                Assert.AreEqual(arr["a"], readVal["a"]);
                Assert.AreEqual(arr["b"], readVal["b"]);
                Assert.AreEqual(arr["d"], readVal["d"]);
                Assert.AreEqual(1.0, readVal[0]);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #10
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref time);
     reader.Read(ref id);
     reader.Read(ref size);
     reader.Read(ref stackid);
 }
예제 #11
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref index);
     reader.Read(ref vertexBufferId);
     reader.Read(ref bufferOffset);
     reader.Read(ref format);
 }
예제 #12
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref vertexBufferId);
     reader.Read(ref source);
     reader.Read(ref startVertex);
     reader.Read(ref countVertices);
 }
예제 #13
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref indexBufferId);
     reader.Read(ref source);
     reader.Read(ref offset);
     reader.Read(ref count);
 }
예제 #14
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref x);
     reader.Read(ref y);
     reader.Read(ref w);
     reader.Read(ref h);
 }
예제 #15
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref width);
     reader.Read(ref height);
     reader.Read(ref antialias);
     reader.Read(ref depthstencil);
 }
예제 #16
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref time);
     reader.Read(ref numticks);
     reader.Read(ref ticktimes);
     reader.Read(ref callstack);
 }
예제 #17
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref xmin);
     reader.Read(ref xmax);
     reader.Read(ref ymin);
     reader.Read(ref ymax);
 }
예제 #18
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref programType);
     reader.Read(ref firstRegister);
     reader.Read(ref data);
     reader.Read(ref numRegisters);
 }
예제 #19
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref width);
     reader.Read(ref height);
     reader.Read(ref format);
     reader.Read(ref optimizeForRenderToTexture);
     reader.Read(ref streamingLevels);
     reader.Read(ref resultId);
 }
예제 #20
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref red);
     reader.Read(ref green);
     reader.Read(ref blue);
     reader.Read(ref alpha);
     reader.Read(ref depth);
     reader.Read(ref stencil);
     reader.Read(ref mask);
 }
예제 #21
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref xmin);
     reader.Read(ref xmax);
     reader.Read(ref ymin);
     reader.Read(ref ymax);
     reader.Read(ref name);
     reader.Read(ref symbolname);
     reader.Read(ref modified);
 }
예제 #22
0
 public void Serialize(Amf3Reader reader)
 {
     reader.ReadObjectHeader(ClassDef);
     reader.Read(ref textureId);
     reader.Read(ref srcdata);
     reader.Read(ref srcbytesperline);
     reader.Read(ref srcformat);
     reader.Read(ref srccompressedformat);
     reader.Read(ref srcw);
     reader.Read(ref srch);
     reader.Read(ref inverted);
     reader.Read(ref miplevel);
 }
예제 #23
0
파일: AmfCodec.cs 프로젝트: abel/sinan
 public static List<object> Decode(byte[] buffer, int offset, int count)
 {
     const int headLen = 4;
     if (count > headLen)
     {
         List<object> objs = new List<object>();
         Amf3Reader<Variant> reader = new Amf3Reader<Variant>(buffer, offset + headLen, count - headLen);
         while (reader.Unfinished)
         {
             objs.Add(reader.ReadObject());
         }
         return objs;
     }
     return null;
 }
예제 #24
0
        public void TestUndefined()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes(new Harmonic.Networking.Amf.Common.Undefined(), sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetUndefined(buffer, out var readVal, out var consumed));
                Assert.IsNotNull(readVal);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #25
0
        public void TestNull()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes((object)null, sc);
                var buffer = new byte[sc.MessageLength];

                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetNull(buffer, out var readVal, out var consumed));
                Assert.IsNull(readVal);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #26
0
        public void TestByteArray()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            using (var sc = new SerializationContext())
            {
                var arr = new byte[] { 1, 2, 3 };
                writer.WriteBytes(arr, sc);

                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetByteArray(buffer, out var readVal, out var consumed));
                Assert.IsTrue(arr.SequenceEqual(readVal));
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #27
0
        public void TestString()
        {
            var writer = new Amf3Writer();
            var reader = new Amf3Reader();

            using (var sc = new SerializationContext())
            {
                for (int i = 0; i < 1000; i++)
                {
                    var str = Guid.NewGuid().ToString();
                    writer.WriteBytes(str, sc);
                    var buffer = new byte[sc.MessageLength];
                    sc.GetMessage(buffer);

                    Assert.IsTrue(reader.TryGetString(buffer, out var readVal, out var consumed));
                    Assert.AreEqual(str, readVal);
                    Assert.AreEqual(buffer.Length, consumed);
                }
            }
        }
예제 #28
0
        public void TestVectorDouble()
        {
            var writer = new Amf3Writer();
            var reader = new Amf3Reader();

            using (var sc = new SerializationContext())
            {
                var v = new Vector <double>()
                {
                    2, 3, 4
                };
                writer.WriteBytes(v, sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                reader.TryGetVectorDouble(buffer, out var readVal, out var consumed);
                Assert.AreEqual(v, readVal);
                Assert.AreEqual(buffer.Length, consumed);
            }
        }
예제 #29
0
        public void TestXml()
        {
            var writer = new Amf3Writer();
            var reader = new Amf3Reader();

            using (var sc = new SerializationContext())
            {
                var xml  = new Amf3Xml();
                var elem = xml.CreateElement("price");
                xml.AppendChild(elem);
                writer.WriteBytes(xml, sc);
                var buffer = new byte[sc.MessageLength];
                sc.GetMessage(buffer);

                Assert.IsTrue(reader.TryGetXml(buffer, out var ud, out var consunmed));
                Assert.IsNotNull(ud);
                Assert.AreNotEqual(ud.GetElementsByTagName("price").Count, 0);
                Assert.AreEqual(consunmed, buffer.Length);
            }
        }
예제 #30
0
        public void TestBoolean()
        {
            var reader = new Amf3Reader();
            var writer = new Amf3Writer();

            using (var sc = new SerializationContext())
            {
                writer.WriteBytes(true, sc);
                var buffer = new byte[sc.MessageLength];;
                sc.GetMessage(buffer);
                Assert.IsTrue(reader.TryGetBoolean(buffer, out var readVal, out var consumed));
                Assert.AreEqual(buffer.Length, consumed);
                Assert.IsTrue(readVal);

                writer.WriteBytes(false, sc);
                sc.GetMessage(buffer);
                Assert.IsTrue(reader.TryGetBoolean(buffer, out readVal, out consumed));
                Assert.AreEqual(buffer.Length, consumed);
                Assert.IsFalse(readVal);
            }
        }
예제 #31
0
        public void TestInteger()
        {
            var reader  = new Amf3Reader();
            var writer  = new Amf3Writer();
            var backend = new byte[5];

            using (var sc = new SerializationContext())
            {
                for (int i = 0; i <= Amf3Writer.U29MAX; i += 0xFF)
                {
                    var value = (uint)i;
                    writer.WriteBytes(value, sc);
                    var buffer = backend.AsSpan(0, sc.MessageLength);
                    buffer.Clear();
                    sc.GetMessage(buffer);
                    Assert.IsTrue(reader.TryGetUInt29(buffer, out var readValue, out var consumed));
                    Assert.AreEqual(readValue, value);
                    Assert.AreEqual(consumed, buffer.Length);
                }
            }
        }
예제 #32
0
파일: GMBusiness.cs 프로젝트: abel/sinan
 /// <summary>
 /// 查看玩家信息
 /// </summary>
 /// <param name="note"></param>
 /// <param name="comm"></param>
 internal static object ViewPlayer(Notification note)
 {
     string[] strs = GetCommand(note);
     if (strs.Length != 1) return null;
     PlayerBusiness player = PlayersProxy.FindPlayerByName(strs[0].Trim());
     if (player == null)
     {
         return string.Format(TipManager.GetMessage(GMReturn.NoName), strs[0]);
     }
     var v = new PlayerDetail(player, 2);
     Amf3Writer writer = new Amf3Writer(65535, false);
     writer.WriteObject(v);
     Amf3Reader<Variant> reader = new Amf3Reader<Variant>(writer.Array, 0, writer.Count);
     object b = reader.ReadObject();
     return new object[] { player.Online, b };
 }