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 ****************"); } }