static void ChallengePlayerCompleted(string data, int matchId) { var response = JsonSerializer.DeseriaizeFromJSON<ChallengeResponse>(data); if (string.IsNullOrEmpty(response.Error)) { Match match; CentralServerSession session; using (IGameDataService dataService = new GameDataService()) { match = dataService.GetMatch(matchId, null); session = dataService.GetCentralServerSession(null, null, match.CurrentGameId.Value); dataService.Attach(session); session.CentralServerGameId = response.GameId; dataService.Save(); TicTacToeHost.Instance.AcceptChallenge(match.PlayerTwoId, match.MatchId); if (response.YourTurn) { dataService.SetPlayerTurn(match.CurrentGameId.Value, match.PlayerOneId); dataService.Save(); } else { dataService.SetPlayerTurn(match.CurrentGameId.Value, match.PlayerTwoId); dataService.Save(); TicTacToeHost.Instance.Move(new Move() { GameId = match.CurrentGameId.Value, PlayerId = match.PlayerTwoId, X = response.X, Y = response.Y }, false); } } } }
static void PostMoveCompleted(string data, int matchId) { var response = JsonSerializer.DeseriaizeFromJSON<MoveResponse>(data); bool newGame = false; int gameId; int oldGameId; Match match; Player tttdPlayer; CentralServerSession session; StatusFlag flag = CentralServerCommunicationChannel.ParseStatus(response.StatusFlag); using (IGameDataService dataService = new GameDataService()) { match = dataService.GetMatch(matchId, null); session = dataService.GetCentralServerSession(null, null, match.CurrentGameId.Value); tttdPlayer = dataService.GetPlayer(match.PlayerOneId); oldGameId = match.CurrentGameId.Value; if (response.NewGameId != null && response.NewGameId > 0 && response.NewGameId != session.CentralServerGameId) { int newGameId = TicTacToeHost.Instance.ConfigureGame(matchId); gameId = newGameId; newGame = true; session = dataService.CreateCentralServerSession(newGameId, response.NewGameId); } else { gameId = match.CurrentGameId.Value; } dataService.Save(); } if (response.YourTurn //|| (newGame && response.X == null && response.Y == null) ) { using (IGameDataService dataService = new GameDataService()) { dataService.SetPlayerTurn(gameId, match.PlayerOneId); dataService.Save(); } } else if(flag == StatusFlag.ChallengeMove || flag == StatusFlag.ChallengeWin) { using (IGameDataService dataService = new GameDataService()) { dataService.EndGame(oldGameId, null); dataService.Save(); } } else if (response.X >= 0 && response.Y >= 0) { if (flag == StatusFlag.AcceptLoss) { using (IGameDataService dataService = new GameDataService()) { dataService.EndGame(oldGameId, match.PlayerOneId); dataService.Save(); } } if (newGame) { using (IGameDataService dataService = new GameDataService()) { dataService.SetPlayerTurn(gameId, match.PlayerTwoId); dataService.Save(); } } Move move = new Move() { GameId = gameId, PlayerId = match.PlayerTwoId }; GameState state = TicTacToeHost.Instance.GetGameState(gameId, match.PlayerTwoId); if (state.Mode == PlayMode.DeathMatch) { move.OriginX = response.X; move.OriginY = response.Y; for (int x = 0; x < 3; x++) { for (int y = 0; y < 3; y++) { if (state.GameBoard[x][y] == null || state.GameBoard[x][y] == 0) { move.X = x; move.Y = y; } } } } else { move.X = response.X.Value; move.Y = response.Y.Value; } MoveResult opponentMoveResult = TicTacToeHost.Instance.Move(move, false); GameState postMoveState = TicTacToeHost.Instance.GetGameState(gameId, match.PlayerTwoId); if (opponentMoveResult != MoveResult.Valid || flag == StatusFlag.WinningMove || postMoveState.YouWon) { MoveRequest challengeRequest = new MoveRequest(); challengeRequest.GameId = session.CentralServerGameId.Value; challengeRequest.PlayerName = tttdPlayer.PlayerName; challengeRequest.X = 0; challengeRequest.Y = 0; bool challenging = false; if (opponentMoveResult != MoveResult.Valid) { challengeRequest.Flags = CentralServerCommunicationChannel.GetStatus(StatusFlag.ChallengeMove); challenging = true; } else { if (flag == StatusFlag.WinningMove && !postMoveState.YouWon) { challengeRequest.Flags = CentralServerCommunicationChannel.GetStatus(StatusFlag.ChallengeWin); challenging = true; } else { challengeRequest.Flags = CentralServerCommunicationChannel.GetStatus(StatusFlag.AcceptLoss); } } if (challenging) { using (IGameDataService dataService = new GameDataService()) { dataService.EndGame(gameId, null); dataService.Save(); } } CentralServerCommunicationChannel.Instance.PostMove(challengeRequest, match.CurrentGameId.Value, match.MatchId); } } }
private void UpdateChallengeState(int playerId, int matchId, bool? state) { using (IGameDataService gameDataService = new GameDataService()) { Match match = gameDataService.GetMatch(matchId, null); GameConfiguration config = GameConfigCache.Instance.GetConfig(matchId); if (match.EndDate == null) { gameDataService.Attach(match); bool challengeStateChange = false; if (match.PlayerOneId == playerId && match.PlayerOneAccepted != state) { match.PlayerOneAccepted = state; challengeStateChange = true; } else if (match.PlayerTwoId == playerId && match.PlayerTwoAccepted != state) { match.PlayerTwoAccepted = state; challengeStateChange = true; } if (playerId == match.PlayerOneId || playerId == match.PlayerTwoId && challengeStateChange) { match.StateDate = DateTime.Now; if (match.PlayerOneAccepted == false && match.PlayerTwoAccepted == false) { match.EndDate = match.StateDate; } else if (match.PlayerOneAccepted == true && match.PlayerTwoAccepted == true && config.GameType != GameType.Network) { gameDataService.SetPlayerTurn(match.CurrentGameId.Value, match.PlayerOneId); } } gameDataService.Save(); } } }