Example #1
0
        private void UpdateGameModelTask(CancellationToken ct)
        {
            int updateErrorCount = 0;

            while (!cts.IsCancellationRequested)
            {
                // If the online session was terminated or had changed
                if (OnlineSession.Instance == null || OnlineSession.Instance.SessionId != Model.HashId)
                {
                    break;
                }

                if (TryUpdateGameModel())
                {
                    updateErrorCount = 0;
                }
                else
                {
                    updateErrorCount++;
                    if (updateErrorCount >= ErrorCountLimit)
                    {
                        var terminateSessionEvent = new TerminateSessionEvent()
                        {
                            SendToServer = false,
                            Cause        = TerminateSessionEvent.TerminationCause.HostDisconnection
                        };
                        EventManager.Instance.Notice(terminateSessionEvent);
                    }
                }
                Thread.Sleep(500);
            }
        }
        private void HandleOnlineSessionEvent(AbstractSessionEvent sessionEvent)
        {
            var terminateEvent = sessionEvent as TerminateSessionEvent;

            if (terminateEvent != null)
            {
                TerminateSessionEvent.ExplainCauseToUser(terminateEvent.Cause);
                if (IsGameRunning())
                {
                    EndGame(EndGameType.Disconnect);
                }
                ExitGame();
                EnterSubstate(OnlineSubstate.OnlineBoard);
            }

            var kickPlayerEvent = sessionEvent as KickPlayerEvent;

            if (kickPlayerEvent != null)
            {
                if (kickPlayerEvent.KickedPlayerId == Profile.Instance.CurrentProfile.UserHashId)
                {
                    MessageHelper.ShowMessage("Vous avez mal à votre popotin!", "Le puissant serviteur de la reine du bal vous à expulsé du bal à coup de pied sur les fesses!");
                    ExitGame();
                    EnterSubstate(OnlineSubstate.OnlineBoard);
                }
            }

            var playerReadyEvent = sessionEvent as PlayerReadyEvent;

            if (playerReadyEvent != null)
            {
            }

            var startOnlineGame = sessionEvent as StartGameEvent;

            if (startOnlineGame != null)
            {
                _currentGame.Start(false);
                _currentSubState = OnlineSubstate.InGame;
            }

            var endOnlineGame = sessionEvent as EndOnlineGameEvent;

            if (endOnlineGame != null)
            {
                Console.WriteLine("**************** Received EndOnlineGameEvent ****************");
                EndOnlineGameEvent.ExplainCauseToUser(endOnlineGame.EndCause);
                EndGame(endOnlineGame.EndCause);
                ExitGame();
                EnterSubstate(OnlineSubstate.OnlineBoard);
            }

            var playerForfeit = sessionEvent as PlayerForfeitEvent;

            if (playerForfeit != null)
            {
                Console.WriteLine("**************** A player had forfeit ****************");
            }
        }