Esempio n. 1
0
        public Server(Configuration configuration, GameCore game, bool openOnInit = true, ILogger logger = null)
        {
            if (configuration.Port == 0)
            {
                configuration.Port = 33132;
            }
            MessageProcessor = new ServerNetworkProcessor(this);
            MessageProcessor.OnMessageSentOrDiscarded += (a, b) => MessagePool.Release(b);
            GameInstance = new NetworkedGame(FullGameState.Create(game), logger, game.Settings);
            HookEvents();
            SetGame(game);

            Logger        = logger != null ? (ILogger) new ModuleLogger(logger, "Server") : new NullLogger();
            Login         = new LoginManager(this);
            Connections   = new ConnectionManager(this);
            Configuration = new InitializedConfiguration(configuration);
            Timers        = new Engine.Core.Timing.Timer.Factory();
            ChatHandler   = new Chat.ChatServer(this);

            Logger.Info($"Server Created.");
            if (openOnInit)
            {
                Open();
            }
        }
    public void Can_serialize_and_deserialize_entities()
    {
        var componentManager = new ComponentManager();
        var entityManager    = new EntityManager(componentManager);
        var entityFactory    = new EntityFactory();
        var serializer       = new Serializer();

        entityFactory.CreatePlayer(entityManager.Create(), new Vector2(200, 400), 1, PlayerIndex.One, default);
        entityFactory.CreatePlayer(entityManager.Create(), new Vector2(300, 400), 2, PlayerIndex.Two, default);

        var state = FullGameState.CreateFullGameState(componentManager, entityManager.Entities, 1, DateTime.UtcNow, DateTime.UtcNow.AddSeconds(1), 1);

        var writer = new NetDataWriter();

        writer.Put(serializer.Serialize(state));
        var bytes  = writer.CopyData();
        var reader = new NetDataReader(bytes);
        var target = serializer.Deserialize <FullGameState>(reader.GetRemainingBytes());

        target.Components.Should()
        .BeEquivalentTo(state.Components, o => o
                        .Excluding(c => c.Path.EndsWith(nameof(CollisionBody.OldPosition)) ||
                                   c.Path.EndsWith(nameof(PlayerState.LocalPlayerIndex)) ||
                                   c.Path.EndsWith(nameof(PlayerState.IsLocal))
                                   )
                        );
    }
Esempio n. 3
0
 public NetworkedGame(FullGameState fullState, ILogger gameLogger = null, EngineSettings settings = null)
 {
     if (fullState != null)
     {
         Game = fullState.CreateGameFromState(gameLogger, settings);
     }
     else
     {
         Game = new GameCore(gameLogger, new NullGamemode(), new ModAssetInfo());
     }
     Game.Authoritative = false;
 }
Esempio n. 4
0
    private void SendWorldData(NetPeer peer)
    {
        var utcNow      = DateTime.UtcNow;
        var resumeIn    = TimeSpan.FromSeconds(1);
        var resumeAtUtc = utcNow.Add(resumeIn);

        sharedContext.ResumeAtGameTime = gameTime.TotalGameTime + resumeIn;


        Console.WriteLine("Sending initial world data");
        var state  = FullGameState.CreateFullGameState(componentMapperService, ActiveEntities, sharedContext.FrameCounter, utcNow, resumeAtUtc, peer.Id);
        var bytes  = serializer.Serialize(state);
        var writer = new NetDataWriter();

        writer.Put(NetMessageType.FullGameState, bytes);
        peer.Send(writer, DeliveryMethod.ReliableOrdered);
        statusByPeer[peer] = PeerStatus.WorldDataSent;
    }
Esempio n. 5
0
        public void SetGame(GameCore game)
        {
            GameStartRemainingTimeout     = ServerSettings.Instance.TimeToWaitForPlayersReady;
            _disablePropertyNotifications = true;
            foreach (var player in Players)
            {
                player.Player.Tank        = null;
                player.Player.IsSpectator = false;
                //Clear existing attributes from the player object
                player.Player.SelectedTankReflectionName = null;
                player.Player.SpawnPoint       = Vector2.Zero;
                player.Player.Team             = null;
                player.Player.AllowedTankTypes = null;

                player.Player.IsReady = false;
                game.AddPlayer(player.Player);
            }
            _disablePropertyNotifications = false;
            GameInstance.FullGameState    = FullGameState.Create(game);
            Game.Authoritative            = true;
        }
 protected override void DeserializeInternal(NetIncomingMessage message)
 {
     State          = FullGameState.Read(message);
     EngineSettings = new Engine.Settings.EngineSettings();
     EngineSettings.Load(message.ReadString());
 }
 public FullGameStateSentAction(GameCore game)
 {
     State = FullGameState.Create(game); EngineSettings = game.Settings;
 }