コード例 #1
0
        public void Send <T, U>(T packet, U[] slices) where T : IPacketHeader where U : IDataSlice
        {
            if (IsConnecting == false && IsConnected == false)
            {
                return;
            }

            int headerSize = ClassSerializer.GetProfile(typeof(T)).BufferLength;
            int sliceSize  = ClassSerializer.GetProfile(typeof(U)).BufferLength;

            byte[] datagram = new byte[headerSize + (sliceSize * slices.Length)];

            byte[] header = ClassSerializer.Serialize(packet);
            ByteUtil.Put(0, header, ref datagram);

            for (int i = 0; i < slices.Length; i++)
            {
                byte[] slicedata = ClassSerializer.Serialize(slices[i]);
                ByteUtil.Put(headerSize + (i * sliceSize), slicedata, ref datagram);
            }
            ByteUtil.DumpNum(datagram);

            try {
                DataCountOut += datagram.Length;
                DataTotalOut += datagram.Length;
                udpClient.Send(datagram, datagram.Length);
            } catch (SocketException exception) {
                Console.WriteLine(exception.ToString());
                // Error codes:
                // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2
            }
        }
コード例 #2
0
ファイル: BaseServer.cs プロジェクト: conariumsoft/RunGun
        public void Send <T, U>(INetworkPeer peer, T packet, U[] slices) where T : IPacketHeader where U : IDataSlice
        {
            //int headerSize = Marshal.SizeOf(typeof(T));
            //int sliceSize = Marshal.SizeOf(typeof(U));
            int headerSize = ClassSerializer.GetProfile(typeof(T)).BufferLength;
            int sliceSize  = ClassSerializer.GetProfile(typeof(U)).BufferLength;

            byte[] datagram = new byte[headerSize + (sliceSize * slices.Length)];

            byte[] header = ClassSerializer.Serialize(packet);
            ByteUtil.Put(0, header, ref datagram);

            for (int i = 0; i < slices.Length; i++)
            {
                byte[] slicedata = ClassSerializer.Serialize(slices[i]);
                ByteUtil.Put(headerSize + (i * sliceSize), slicedata, ref datagram);
            }

            ByteUtil.DumpNum(datagram);
            try {
                udpClient.Send(datagram, datagram.Length, peer.IPAddress);
            } catch (SocketException exception) {
                Console.WriteLine("Exception:" + exception.ToString());

                // Error codes:
                // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2
            }
        }
コード例 #3
0
        public void SerializeFieldToStringTest()
        {
            ClassSerializer target = new ClassSerializer(); // TODO: Initialize to an appropriate value
            DBField         field  = new DBField();

            field.DbName = "myname";
            string result   = target.SerializeToString(field);
            string expected = @"<?xml version=""1.0""?>
<DBField xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
  <Isn>0</Isn>
  <IndexInRecord>0</IndexInRecord>
  <Attr>0</Attr>
  <AllowNull>false</AllowNull>
  <DefaultNull>false</DefaultNull>
  <Length>0</Length>
  <DiffUpdate>0</DiffUpdate>
  <Dec>0</Dec>
  <Whole>0</Whole>
  <PartOfDateTime>0</PartOfDateTime>
  <DefaultStorage>false</DefaultStorage>
  <DbName>myname</DbName>
</DBField>";

            Assert.AreEqual(expected, result);
        }
コード例 #4
0
ファイル: Packet.cs プロジェクト: ilhamjalu/Leder-Efter
    /// <summary>Adds an object to the packet.</summary>
    /// <param name="_value">The object to add.</param>
    public void Write <T>(T _value)
    {
        byte[] _objectByteArray = ClassSerializer.ObjectToByteArray(_value); //serialize object and convert it to byte array

        Write(_objectByteArray.Length);                                      // Add the length of the object byte array to the packet
        Write(_objectByteArray);                                             // Add the object byte array itself
    }
コード例 #5
0
        public void MissingProperty()
        {
            var cs     = new ClassSerializer(typeof(EmptyClass));
            var r      = new Reader("!Test.EmptyClass{MissingProp:1}");
            var result = cs.Read(r, null, null) as EmptyClass;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
        }
コード例 #6
0
        public void SortedProperties()
        {
            var value = new SortedPropertyClass();
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(DerivedClass));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.SortedPropertyClass{MyString1Property:?null,MyString2Property:?null,MyString3Property:?null}", w.ToString());
        }
コード例 #7
0
 public void AddListener <T>(Protocol code, Callback <T> method) where T : new()
 {
     OnServerMessage += (bytedata) => {
         if (bytedata[0] == (byte)code)
         {
             method(ClassSerializer.Deserialize <T>(bytedata));
         }
     };
 }
コード例 #8
0
        public void AnticipateTypeDefinition()
        {
            var r = new Reader("!Test.PropertyClassGuid{MyGuid:fb82b37ccc56415ebaea773f4bbe7203}");

            var anticipated = ClassSerializer.AnticipateType(r);

            Assert.AreEqual(new Guid("fb82b37ccc56415ebaea773f4bbe7203"), anticipated.guid);
            Assert.AreEqual(typeof(PropertyClassGuid), anticipated.type);
            Assert.IsNull(anticipated.instance);

            Assert.IsNotNull(r.ReadType <PropertyClassGuid>(null, null));
        }
コード例 #9
0
ファイル: BaseServer.cs プロジェクト: conariumsoft/RunGun
 public void Send <T>(INetworkPeer peer, T packet) where T : IPacket
 {
     byte[] data = ClassSerializer.Serialize(packet);
     ByteUtil.DumpNum(data);
     try {
         udpClient.Send(data, data.Length, peer.IPAddress);
     } catch (SocketException exception) {
         Console.WriteLine("ERR: " + exception.ToString());
         // Error codes:
         // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2
     }
 }
コード例 #10
0
ファイル: Packet.cs プロジェクト: ilhamjalu/Leder-Efter
 /// <summary>Reads an object from the packet.</summary>
 /// <param name="_moveReadPos">Whether or not to move the buffer's read position.</param>
 public T ReadObject <T>(bool _moveReadPos = true)
 {
     try
     {
         int    _length          = ReadInt(_moveReadPos);                // Get the length of the object bytes array
         byte[] _objectByteArray = ReadBytes(_length, _moveReadPos);     // Get the object byte array
         return((T)ClassSerializer.ByteArrayToObject(_objectByteArray)); // Convert the byte array and return the object
     }
     catch
     {
         throw new Exception("Could not read value of type 'object'!");
     }
 }
コード例 #11
0
        public void SerializeToStringTest()
        {
            ClassSerializer target = new ClassSerializer(); // TODO: Initialize to an appropriate value
            SampleClass     s      = new SampleClass()
            {
                A = "value a", B = 5
            };
            string result = target.SerializeToString(s);

            string expected = "<?xml version=\"1.0\"?>\r\n<SampleClass xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <A>value a</A>\r\n  <B>5</B>\r\n</SampleClass>";

            Assert.AreEqual(expected, result);
        }
コード例 #12
0
        public void MissingClass()
        {
            var r       = new Reader("!Test.CascadedClass{MyEmptyClass:!Test.UnknownClass{},MyPropertyClass:!Test.PropertyClass{MyStringProperty:\"Hello World!\"}}");
            var cs      = new ClassSerializer(typeof(CascadedClass));
            var context = new SerializationContext();
            var result  = cs.Read(r, null, context) as CascadedClass;

            Assert.IsNotNull(result);
            Assert.IsTrue(context.HasErrors);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsNull(result.MyEmptyClass);
            Assert.IsInstanceOf(typeof(PropertyClass), result.MyPropertyClass);
            Assert.AreEqual("Hello World!", result.MyPropertyClass.MyStringProperty);
        }
コード例 #13
0
        public void CustomPropertyReader()
        {
            var cs     = new ClassSerializer(typeof(CustomPropertySerializerClass));
            var r      = new Reader("!Test.CustomPropertySerializerClass{UseReader:False,TestString:\"Test\"}");
            var result = cs.Read(r, null, null) as CustomPropertySerializerClass;

            Assert.IsNotNull(result);
            Assert.AreEqual("Test", result.TestString);

            r      = new Reader("!Test.CustomPropertySerializerClass{UseReader:True,TestString:\"Test\"}");
            result = cs.Read(r, null, null) as CustomPropertySerializerClass;
            Assert.IsNotNull(result);
            Assert.AreEqual("TEST", result.TestString);
        }
コード例 #14
0
        public static IAxSerializer WriteClass <T>(this IAxSerializer s, T source) where T : class
        {
            Delegate @delegate;
            bool     flag = !Delegates.TryGetValue(typeof(T), out @delegate);

            if (flag)
            {
                @delegate = Serializer.GetDynamicSerializer(typeof(T)).CreateDelegate(typeof(ClassSerializer <T>));
            }
            ClassSerializer <T> classSerializer = (ClassSerializer <T>)@delegate;

            classSerializer(s, source);
            return(s);
        }
コード例 #15
0
        //--------------------------------------------------------------------------------------------------

        bool DeserializeBody(Reader reader, SerializationContext context)
        {
            var  model            = context.GetInstance <Model>();
            bool reuseModelBodies = false;

            Body.CloneOptions cloneOptions = default;

            switch (context.Scope)
            {
            case SerializationScope.UndoRedo:
                reuseModelBodies = true;
                break;

            case SerializationScope.CopyPaste:
                context.TryGetInstance(out cloneOptions);
                reuseModelBodies = true;     // ask later
                break;
            }

            if (!reuseModelBodies || model == null)
            {
                return(false); // Use standard serializer
            }

            // Try to find referenced body shapes in current model
            var anticipated = ClassSerializer.AnticipateType(reader);

            if (anticipated.type != null && typeof(Body).IsAssignableFrom(anticipated.type))
            {
                // Try finding body in model?
                var body = model.FindInstance(anticipated.guid) as Body;
                if (body != null)
                {
                    // Ask if options are available, otherwise assume re-using
                    if (!(cloneOptions?.CloneReferencedBodies ?? false))
                    {
                        // operand already in model, use this
                        Body = body;
                        reader.SkipListOrMapValue();
                        return(true);
                    }
                }
            }

            // Not in Model
            Body = reader.ReadType <Body>(null, context);
            return(true);
        }
コード例 #16
0
        public void ArrayReferenced()
        {
            var value = new ArrayClassReferenced(true);
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(ArrayClassReferenced));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.ArrayClassReferenced{Array1:[11,42,65],Array2:[11,42,65]}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as ArrayClassReferenced;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsFalse(value.IsSame(result)); // Reference has been lost
        }
コード例 #17
0
        public void ArrayAlreadyInstantiated()
        {
            var value = new ArrayClassInitialized(true);
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(ArrayClassInitialized));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.ArrayClassInitialized{Array1:[11,42,65]}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as ArrayClassInitialized;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsTrue(value.IsSame(result), "Read back value is not the same.");
        }
コード例 #18
0
        public void EmptyArray()
        {
            var value = new ArrayClass(false);
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(ArrayClass));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.ArrayClass{Array1:[]}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as ArrayClass;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsTrue(value.IsSame(result), "Read back value is not the same.");
        }
コード例 #19
0
ファイル: BaseServer.cs プロジェクト: conariumsoft/RunGun
        public void AddListener <T>(Protocol code, Callback <T> method) where T : IPacket, new()
        {
            OnUserMessage += (sender, bytedata) => {
                if (bytedata[0] == (byte)code)
                {
                    T payload;

                    try {
                        payload = ClassSerializer.Deserialize <T>(bytedata);
                    } catch (Exception) {
                        return;
                    }
                    method(sender, payload);
                }
            };
        }
コード例 #20
0
        public void NullReferencedClass()
        {
            var value = new CascadedClass(null);
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(CascadedClass));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.CascadedClass{MyEmptyClass:!Test.EmptyClass{},MyPropertyClass:?null}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as CascadedClass;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsTrue(value.IsSame(result), "Read back value is not the same.");
        }
コード例 #21
0
        public void DictReferenced()
        {
            var value = new DictionaryClassReferenced(true);
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(DictionaryClassReferenced));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.DictionaryClassReferenced{Dict1:{\"11\":11,\"42\":42,\"65\":65},Dict2:{\"11\":11,\"42\":42,\"65\":65}}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as DictionaryClassReferenced;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsFalse(value.IsSame(result), "Read back value is not the same.");
        }
コード例 #22
0
        public void DictIsNull()
        {
            var value = new DictionaryClass();
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(DictionaryClass));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.DictionaryClass{Dict1:?null}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as DictionaryClass;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsTrue(value.IsSame(result), "Read back value is not the same.");
        }
コード例 #23
0
        public void CustomPropertyWriter()
        {
            var cs  = new ClassSerializer(typeof(CustomPropertySerializerClass));
            var obj = new CustomPropertySerializerClass();
            var w   = new Writer();

            Assert.IsTrue(cs.Write(w, obj, null));
            Assert.AreEqual("!Test.CustomPropertySerializerClass{UseReader:False,TestString:\"Test\"}", w.ToString());

            obj = new CustomPropertySerializerClass {
                UseWriter = true
            };
            w = new Writer();
            Assert.IsTrue(cs.Write(w, obj, null));
            Assert.AreEqual("!Test.CustomPropertySerializerClass{UseReader:False,TestString:\"TEST\"}", w.ToString());
        }
コード例 #24
0
        public void ListReferenced()
        {
            var value = new IntListClassReferenced(true);
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(IntListClassReferenced));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.IntListClassReferenced{List1:[11,42,65],List2:[11,42,65]}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as IntListClassReferenced;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsFalse(value.IsSame(result), "Read back value is not the same.");
        }
コード例 #25
0
        public void AnticipateTypeReference()
        {
            var ctx = new SerializationContext();
            var r   = new Reader("!Test.PropertyClassGuid{MyGuid:fb82b37ccc56415ebaea773f4bbe7203}?fb82b37ccc56415ebaea773f4bbe7203");
            var obj = r.ReadType <PropertyClassGuid>(null, null);

            Assert.IsNotNull(obj);

            var anticipated = ClassSerializer.AnticipateType(r, ctx);

            Assert.AreEqual(new Guid("fb82b37ccc56415ebaea773f4bbe7203"), anticipated.Guid);
            Assert.AreEqual(typeof(PropertyClassGuid), anticipated.Type);
            Assert.AreSame(obj, anticipated.Instance);

            Assert.AreSame(obj, r.ReadType <PropertyClassGuid>(null, null));
        }
コード例 #26
0
        public void SerializableCallback()
        {
            var value = new CallbackClass();
            var w     = new Writer();
            var cs    = new ClassSerializer(typeof(CallbackClass));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.CallbackClass{}", w.ToString());
            Assert.True(value.AllSerializeCallbacksTriggered());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as CallbackClass;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsTrue(result.AllDeserializeCallbacksTriggered());
        }
コード例 #27
0
        /**
         * public void OnPreEnable()
         * {
         *  if (PluginManager.Obj.GetPlugin<Asphalt.Api.Asphalt>() == null)
         *      Disable("Dependency 'Asphalt-MDK' not found!");
         * }
         **/

        public void OnEnable()
        {
            Instance = this;

            if (IsDisabled())
            {
                return;
            }

            OldWarpsStorage = ClassSerializer <Warps> .Deserialize(Path.Combine(ServiceHelper.GetServerPluginFolder(this), "storage", "old_warps.json"));

            OldHomesStorage = ClassSerializer <Homes> .Deserialize(Path.Combine(ServiceHelper.GetServerPluginFolder(this), "storage", "old_homes.json"));

            BackPos = new Dictionary <string, Vector3>();

            EventManager.RegisterListener(new AdvTpEventListener());
        }
コード例 #28
0
ファイル: ModManifestHandler.cs プロジェクト: ShoosGun/DIMOWA
        public ModDataHandler(string caminhoDoJogo, string caminhoDaPastaDeMods, string caminhoDaPastaDeManifestos)
        {
            string loaderModOWPath = "";

            try
            {
                loaderModOWPath = DirectorySearchTools.GetFilePathInDirectory(loaderModOWFile, caminhoDoJogo);
            }
            catch { ConsoleWindowHelper.Warning(string.Format("{0} couldn't be found, the mod loader probrabilly hasn't been installed yet.", loaderModOWFile)); }
            ModEnabledList = new ModFolderAndList()
            {
                ModFolder = "", ModList = new string[] { }
            };
            try
            {
                ClassSerializer.ReadFromFile(loaderModOWPath, ModEnabledList);
            }
            catch
            {
                ConsoleWindowHelper.Exception(string.Format("{0} couldn't be read, the problem can be fixed by pressing save.", loaderModOWFile));
            }

            string[] todosOsJsons            = Directory.GetFiles(caminhoDaPastaDeManifestos, "*manifest.json", SearchOption.AllDirectories);
            List <ModManifestJson> manifests = new List <ModManifestJson>();

            for (int i = 0; i < todosOsJsons.Length; i++)
            {
                var modData = JsonReader.ReadFromJson <ModManifestJson>(todosOsJsons[i]);
                if (modData.FileName != dimowaModLoaderFile)
                {
                    manifests.Add(modData);
                }
                else
                {
                    ManifestDoLoader = modData;
                }
            }
            if (string.IsNullOrEmpty(ManifestDoLoader.FileName))
            {
                ConsoleWindowHelper.FatalException("DIMOWAModLoader.dll needs to be inside the mods folder with its manifest.json, make sure that it is in there.");
            }

            ManifestsDosMods      = manifests.ToArray();
            DIMOWALoaderInstaller = new DIMOWALoaderInstaller(caminhoDoJogo, caminhoDaPastaDeMods);
        }
コード例 #29
0
        public void AnticipateSkippedTypeReference()
        {
            var ctx = new SerializationContext();
            var r   = new Reader("[!Test.PropertyClassGuid{MyGuid:fb82b37ccc56415ebaea773f4bbe7203},?fb82b37ccc56415ebaea773f4bbe7203]");

            Assume.That(r.BeginList());
            Assume.That(r.BeginListValue());
            var anticipated = ClassSerializer.AnticipateType(r, ctx);

            Assert.AreEqual(new Guid("fb82b37ccc56415ebaea773f4bbe7203"), anticipated.Guid);
            Assert.AreEqual(typeof(PropertyClassGuid), anticipated.Type);
            r.SkipListOrMapValue();

            Assume.That(r.BeginListValue());
            anticipated = ClassSerializer.AnticipateType(r, ctx);
            Assert.AreEqual(new Guid("fb82b37ccc56415ebaea773f4bbe7203"), anticipated.Guid);
            Assert.AreEqual(typeof(PropertyClassGuid), anticipated.Type);
        }
コード例 #30
0
        public void Property()
        {
            var value = new PropertyClass
            {
                MyStringProperty = "Hello World!"
            };
            var w  = new Writer();
            var cs = new ClassSerializer(typeof(PropertyClass));

            Assert.True(cs.Write(w, value, null));
            Assert.AreEqual("!Test.PropertyClass{MyStringProperty:\"Hello World!\"}", w.ToString());

            var r      = new Reader(w.ToString());
            var result = cs.Read(r, null, null) as PropertyClass;

            Assert.IsNotNull(result);
            Assert.IsFalse(r.AnyLeft, "Any characters left.");
            Assert.IsTrue(value.IsSame(result), "Read back value is not the same.");
        }