Exemple #1
0
        private void GameObject_Destroyed(object sender, Engine.Core.Events.Types.GameObjects.DestroyedEventArgs e)
        {
            var msg = MessagePool.Retrieve <Common.Actions.ToClient.GameObjectDestroyedAction>();

            msg.ObjectId = e.Destroyed.ObjectId;
            MessageProcessor.SendMessage(msg);
        }
Exemple #2
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();
            }
        }
Exemple #3
0
        private void GameObject_BasicPropertyChanged(object sender, GameObject.BasicPropertyChangeArgs e)
        {
            var msg = MessagePool.Retrieve <Common.Actions.ToClient.ObjectBasicPropertyChangedAction>();

            msg.Set(e.Type, e);
            MessageProcessor.SendMessage(msg);
        }
Exemple #4
0
        private void Gamemode_StateChanged(object sender, byte[] e)
        {
            var msg = MessagePool.Retrieve <Common.Actions.ToClient.GamemodeStateChangedAction>();

            msg.NewState = e;
            MessageProcessor.SendMessage(msg);
        }
Exemple #5
0
        private void GameObject_DestructionEnded(object sender, GameObject e)
        {
            var msg = MessagePool.Retrieve <Common.Actions.ToClient.GameObjectDestructionEndedAction>();

            msg.ObjectId = e.ObjectId;
            MessageProcessor.SendMessage(new Common.Actions.ToClient.GameObjectDestructionEndedAction(e));
        }
Exemple #6
0
        private void GameObject_StateChanged(object sender, Engine.Core.Events.Types.GameObjects.StateChangedEventArgs e)
        {
            var msg = MessagePool.Retrieve <Common.Actions.ToClient.ObjectStateChangedAction>();

            msg.PrivateData = e.State;
            msg.ObjectId    = e.Object.ObjectId;
            MessageProcessor.SendMessage(msg);
        }
Exemple #7
0
        public void TickGameStartCountdown(GameTime gameTime)
        {
            if (!Game.HasEnoughPlayersToStart)
            {
                var ttw = ServerSettings.Instance.TimeToWaitForPlayersReady;
                if (GameStartRemainingTimeout != ttw)
                {
                    //Send a countdown notification
                    GameStartRemainingTimeout = ttw;
                    OnCountdownStopped(this, ttw);
                }
                return;
            }
            else
            {
                if (GameStartRemainingTimeout == ServerSettings.Instance.TimeToWaitForPlayersReady)
                {
                    OnCountdownStarted(this, GameStartRemainingTimeout);
                }

                bool allPlayersReady = true;
                foreach (var plr in Players)
                {
                    if (!plr.Player.IsReady)
                    {
                        allPlayersReady = false;
                    }
                }
                if (allPlayersReady)
                {
                    GameStartRemainingTimeout = TimeSpan.Zero;
                }

                if (!GameStartTimeoutHasEnded)
                {
                    var msg = MessagePool.Retrieve <Common.Actions.ToClient.CountdownStartedAction>();
                    msg.CountdownTime = GameStartRemainingTimeout;
                    MessageProcessor.SendMessage(msg);
                }
                GameStartRemainingTimeout -= gameTime.ElapsedGameTime;

                if (GameStartTimeoutHasEnded)
                {
                    StartGame();
                }
            }
        }
Exemple #8
0
        public void HookEvents()
        {
            GameInstance.GameChanged += (s, e) =>
            {
                if (e.OldGame != null)
                {
                    e.OldGame.EventEngine.OnGameEnded            -= Game_Ended;
                    e.OldGame.EventEngine.OnGameStarted          -= Game_Started;
                    e.OldGame.EventEngine.OnGameTimescaleChanged -= Game_TimescaleChanged;

                    e.OldGame.EventEngine.OnGameObjectDestroyed            -= GameObject_Destroyed;
                    e.OldGame.EventEngine.OnGameObjectDestructionEnded     -= GameObject_DestructionEnded;
                    e.OldGame.EventEngine.OnGameObjectStateChanged         -= GameObject_StateChanged;
                    e.OldGame.EventEngine.OnGameObjectBasicPropertyChanged -= GameObject_BasicPropertyChanged;
                    e.OldGame.EventEngine.OnGameObjectCreated -= GameObject_Created;

                    e.OldGame.EventEngine.OnGamemodeStateChanged -= Gamemode_StateChanged;

                    UnhookPlayers(e.OldGame);
                }
                e.Game.EventEngine.OnGameEnded            += Game_Ended;
                e.Game.EventEngine.OnGameStarted          += Game_Started;
                e.Game.EventEngine.OnGameTimescaleChanged += Game_TimescaleChanged;

                e.Game.EventEngine.OnGameObjectDestroyed            += GameObject_Destroyed;
                e.Game.EventEngine.OnGameObjectDestructionEnded     += GameObject_DestructionEnded;
                e.Game.EventEngine.OnGameObjectStateChanged         += GameObject_StateChanged;
                e.Game.EventEngine.OnGameObjectBasicPropertyChanged += GameObject_BasicPropertyChanged;
                e.Game.EventEngine.OnGameObjectCreated += GameObject_Created;

                e.Game.EventEngine.OnGamemodeStateChanged += Gamemode_StateChanged;

                HookPlayers(e.Game);

                //And send out the game state
                MessageProcessor.SendMessage(MessagePool.Retrieve <Common.Actions.ToClient.GameCreatedAction>());
                MessageProcessor.SendMessage(new Common.Actions.ToClient.FullGameStateSentAction(Game));
            };
        }