예제 #1
0
        public void TestJsonSerialization()
        {
            var    xml     = SerializationAdapter.GetAdapter(SerializationAdapterType.JSON);
            var    test    = new TestObj();
            string xmlData = xml.Serialize(test);

            Assert.IsTrue(!string.IsNullOrEmpty(xmlData));
        }
예제 #2
0
        public void TestXmlDeserialize()
        {
            var    xml     = SerializationAdapter.GetAdapter(SerializationAdapterType.XML);
            var    test    = new TestObj();
            string xmlData = xml.Serialize(test);

            var expect = xml.Deserialize <TestObj>(xmlData);

            Assert.AreEqual(expect.Name, test.Name);
        }
예제 #3
0
        private SerializationAdapter GetAdaper(string contentType)
        {
            SerializationAdapter adapter = null;

            if (contentType.Contains("json"))
            {
                adapter = SerializationAdapter.GetAdapter(SerializationAdapterType.JSON);
            }

            return(adapter);
        }
예제 #4
0
        public void TestSerializerFactory()
        {
            var json = SerializationAdapter.GetAdapter(SerializationAdapterType.JSON);
            var xml  = SerializationAdapter.GetAdapter(SerializationAdapterType.XML);


            Assert.IsNotNull(json);
            Assert.AreEqual <Type>(typeof(JsonSerializer), json.GetType(), "Incorrect type");
            Assert.IsNotNull(xml);
            Assert.AreEqual <Type>(typeof(XmlSerializer), xml.GetType(), "Incorrect type");
        }
예제 #5
0
        public static string ToXml <T>(this T helper) where T : class
        {
            Type myType = helper.GetType();

            if (!myType.IsSerializable)
            {
                return(null);
            }

            var adapter = SerializationAdapter.GetAdapter(SerializationAdapterType.XML);

            return(adapter.Serialize(helper));
        }
        private string CreateMessage <T>(string commandName, T instanceToSend)
        {
            var content = SerializationAdapter.SerializeObject
                          (
                new NetworkCommand()
            {
                CommandName     = commandName,
                CommandArgument = typeof(T).FullName,
                Data            = SerializationAdapter.SerializeObject(instanceToSend)
            }
                          );

            return(content);
        }
예제 #7
0
        private static T GetObject <T>(string contents, SerializationAdapterType type)
        {
            var adapter = SerializationAdapter.GetAdapter(type);

            return((T)adapter.Deserialize(contents, typeof(T)));
        }
        private GameStateData ToGameState(IGameSectorLayerService gameSector,
                                          string loginToken)
        {
            var player = gameSector
                         .DataLayer
                         .Players
                         .FirstOrDefault(somePlayer => somePlayer.LoginToken == loginToken);


            //var playerRectangle = new Rectangle(player.CurrentImage.Position.ToVector2().ToPoint(), new Point((int)MathF.Round(player.Stats.Aura * (int)MathF.Round(player.CurrentImage.Width * player.CurrentImage.Scale.X))));
            var playerRectangleWithAura = ImageToRectangleTransformationService.Transform(player.CurrentImage, (int)MathF.Round(player.CurrentImage.Width * player.CurrentImage.Scale.X * player.Stats.Aura));
            var playerRectangle         = ImageToRectangleTransformationService.Transform(player.CurrentImage);

            var playerCanUseDialog = gameSector
                                     .DataLayer
                                     .Layers
                                     .Where(l => l.DataAsEnumerable <IdentifiableCircularLocation>().Any(
                                                location =>
            {
                var radiusAsVector2   = location.Radius.ToVector2();
                var locationRectangle = ImageToRectangleTransformationService.Transform(location.Position,
                                                                                        1f.ToVector2(),
                                                                                        (int)MathF.Round(radiusAsVector2.X),
                                                                                        (int)MathF.Round(radiusAsVector2.Y));
                return(locationRectangle.Intersects(playerRectangle));
            }))
                                     .Any();

            var playerNearEnemies = gameSector
                                    .DataLayer
                                    .Enemies
                                    .Where(enemy => ImageToRectangleTransformationService.Transform(enemy.CurrentImage)
                                           .Intersects(playerRectangleWithAura))
                                    .Any();

            var bankAccountSum = gameSector
                                 .DataLayer
                                 .GetLayersByType <IntBank>()
                                 .SelectMany(l => l.DataAsEnumerable <IntBank>())
                                 .Where(b => b.OwnerName == player.LoginToken)
                                 .Sum(b => b.Amount);


            var unserializedPlayerMetadata = new PlayerMetadataBag()
            {
                MoneyCount      = bankAccountSum,
                Stats           = player.Stats,
                GameSectorTag   = gameSector.Tag,
                ChosenStat      = player.ChosenStat,
                Items           = gameSector.DataLayer.Items.Where(item => item.OwnerName == player.DisplayName).ToList(),
                CurrentDialog   = gameSector.PlayerDialogService.GetDialogNodeByLoginToken(player.LoginToken),
                ServerEventName = playerNearEnemies ? "Enemies" : playerCanUseDialog ? "Dialog" : string.Empty
            };

            var cache = new GameStateData
            {
                Commands   = new List <string>(),
                LoginToken = player.LoginToken
            };

            //pass camera data
            cache.Screen = gameSector.IODataLayer.GetGameStateByLoginToken(loginToken)?.Screen;

            cache.Camera = new CameraData
            {
                Position = player.CurrentImage.Position,
                Rotation = player.CurrentImage.Rotation
            };

            //convert entities to images ( this is poor data, means only data needed )
            cache.Images?.Clear();
            cache.Images = new List <ImageData>();
            cache.Images.AddRange(gameSector
                                  .DataLayer
                                  .Players
                                  .Where(e => Vector2.Distance(
                                             e.CurrentImage.Position.ToVector2(),
                                             player.CurrentImage.Position.ToVector2()) <= DrawingDistance)
                                  .Select(playerInfo => playerInfo.CurrentImage)
                                  .ToList());

            cache.Images.AddRange(gameSector
                                  .DataLayer
                                  .Enemies
                                  .Where(e => Vector2.Distance(
                                             e.CurrentImage.Position.ToVector2(),
                                             player.CurrentImage.Position.ToVector2()) <= DrawingDistance)
                                  .Select(enemy => enemy.CurrentImage).ToList());

            cache.Images.AddRange(gameSector
                                  .DataLayer
                                  .Projectiles
                                  .Where(e => Vector2.Distance(
                                             e.CurrentImage.Position.ToVector2(),
                                             player.CurrentImage.Position.ToVector2()) <= DrawingDistance)
                                  .Select(projectile => projectile.CurrentImage).ToList());

            cache.Images.AddRange(gameSector
                                  .DataLayer
                                  .Items
                                  .Where(e => Vector2.Distance(
                                             e.CurrentImage.Position.ToVector2(),
                                             player.CurrentImage.Position.ToVector2()) <= DrawingDistance && !e.InInventory)
                                  .Select(item => item.CurrentImage).ToList());

            cache.Images.AddRange(gameSector
                                  .DataLayer
                                  .GeneralCharacter
                                  .Where(e => Vector2.Distance(
                                             e.CurrentImage.Position.ToVector2(),
                                             player.CurrentImage.Position.ToVector2()) <= DrawingDistance)
                                  .Select(prop => prop.CurrentImage).ToList());

            cache.Images.AddRange(gameSector
                                  .DataLayer
                                  .ImageData
                                  .Where(e => Vector2.Distance(
                                             e.Position.ToVector2(),
                                             player.CurrentImage.Position.ToVector2()) <= DrawingDistance + 1024 || e.SelectedFrame.Contains("fog"))
                                  .ToList());

            //get selected item of player (just in case) / for now...
            var previousSelectedItem = gameSector
                                       .DataLayer
                                       .PlayerItems
                                       .FirstOrDefault(pItem => pItem.OwnerName == player.DisplayName && pItem.Selected);


            unserializedPlayerMetadata.TimeStamp = DateTime.Now;

            //Position of the meta data is here now.. but it should be changed later on
            cache.Metadata = new IdentifiableNetworkCommand()
            {
                Id              = player.CurrentImage.Id,
                CommandName     = gameSector.Tag,
                CommandArgument = unserializedPlayerMetadata.GetType().FullName,
                Data            = SerializationAdapter.SerializeObject(unserializedPlayerMetadata)
            };


            return(cache);
        }