/// <summary> /// Back to general chat /// </summary> /// <param name="user"></param> /// <param name="opponent"></param> public void BackToChat(string user, string opponent) { if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(opponent)) { try { GameMng.DeleteGame(user, opponent); GameMng.DeleteHowToFirst(user, opponent); if (_callback.ContainsKey(user)) { _callback[user].BackToChatFromServer(user, opponent); } if (_callback.ContainsKey(opponent)) { _callback[opponent].BackToChatFromServer(opponent, user); } } catch (Exception ex) { _callback[user].RecieveError(ex.Message); _callback[opponent].RecieveError(ex.Message); } } }
/// <summary> /// Computer Player Logic /// </summary> /// <param name="computer">name of comp player</param> /// <param name="opponent">name of user player</param> /// <param name="diceNumbers">number of dice</param> public void MoveCheckerAuto(string computer, string opponent) { if (_callback.ContainsKey(opponent)) { var game = GameMng.GetGame(computer, opponent); if (game == null) { return; } var diceNumbers = game.DiceLogic.GetRandomDices(); if (diceNumbers[0] == diceNumbers[1]) { diceNumbers.AddRange(diceNumbers); } _callback[opponent].RecieveRoll(Player.autoPlayer.ToString(), diceNumbers); bool result = false; try { foreach (var number in diceNumbers) { result = GameMng.CheckersMoovingLogicAuto(computer, opponent, number); if (result) { var gameTable = GameMng.GetGameTableForSend(computer, opponent); if (gameTable != null) { var whiteCheckers = gameTable[0]; var blackCheckers = gameTable[1]; var barCheckers = gameTable[2]; _callback[opponent].UpdateTable(opponent, computer, whiteCheckers, blackCheckers, barCheckers); } } if (GameMng.IsGameOver(opponent, computer)) { _callback[opponent].GameOverFromServer(opponent, computer, false); GameMng.DeleteGame(computer, opponent); } } if (_callback.ContainsKey(opponent)) { _callback[opponent].SetMasterFromServer(opponent, computer); } } catch (Exception ex) { _callback[opponent].RecieveError(ex.Message); return; } } }
public void UserLeftGame(string userName, string opponentName) { if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(opponentName)) { var callback = OperationContext.Current.GetCallbackChannel <IClientCallback>(); try { BackToChat(opponentName, userName); GameMng.DeleteHowToFirst(userName, opponentName); GameMng.DeleteGame(userName, opponentName); } catch (Exception ex) { callback.RecieveError(ex.Message); } } }
/// <summary> /// the game ended with the victory of one of the users /// </summary> /// <param name="userName"></param> /// <param name="opponentName"></param> public void GameOver(string userName, string opponentName) { if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(opponentName)) { var callback = OperationContext.Current.GetCallbackChannel <IClientCallback>(); try { if (_callback.ContainsKey(opponentName)) { _callback[userName].GameOverFromServer(userName, opponentName, true); _callback[opponentName].GameOverFromServer(opponentName, userName, false); GameMng.DeleteGame(userName, opponentName); } } catch (Exception ex) { callback.RecieveError(ex.InnerException.Message); } } }
/// <summary> /// Moves the selected checker /// </summary> /// <param name="user">user name</param> /// <param name="opponent">opponent name</param> /// <param name="currIndex">index of selected checker</param> /// <param name="number">number the dice</param> public void MoveChecker(string user, string opponent, int currIndex, int number) { //lock (padlock) //{ if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(opponent)) { var game = GameMng.GetGame(user, opponent); if (game == null) { return; } var callback = OperationContext.Current.GetCallbackChannel <IClientCallback>(); bool result = false; if (_callback.ContainsKey(user)) { try { var doubleDice = game.DoubleDice; var diffDice = game.DifferentDice; try { result = GameMng.CheckersMoovingLogic(user, opponent, currIndex, number); } catch (Exception ex) { _callback[user].RecieveGameError(ex.Message); _callback[user].MoveEnableFromServer(user, opponent); if (_callback.ContainsKey(opponent)) { _callback[opponent].SetWaiterFromServer(opponent, user); } return; } if (result) { var gameTable = GameMng.GetGameTableForSend(user, opponent); var whiteCheckers = gameTable[0]; var blackCheckers = gameTable[1]; var barCheckers = gameTable[2]; _callback[user].UpdateTable(user, opponent, whiteCheckers, blackCheckers, barCheckers); if (opponent != Player.autoPlayer.ToString()) { _callback[opponent].UpdateTable(opponent, user, whiteCheckers, blackCheckers, barCheckers); } if (doubleDice != null && doubleDice.IsMoovingFinish()) { // GameMng.DeleteDoubleDice(user, opponent); if (opponent != Player.autoPlayer.ToString()) { _callback[opponent].SetMasterFromServer(opponent, user); } _callback[user].SetWaiterFromServer(user, opponent); //turn computer moving if (opponent == Player.autoPlayer.ToString()) { MoveCheckerAuto(opponent, user); } } else if (diffDice != null && diffDice.IsMoovingFinish()) { // GameMng.DeleteDifferentDice(user, opponent); if (opponent != Player.autoPlayer.ToString()) { _callback[opponent].SetMasterFromServer(opponent, user); } _callback[user].SetWaiterFromServer(user, opponent); //turn computer moving if (opponent == Player.autoPlayer.ToString()) { MoveCheckerAuto(opponent, user); } } if (GameMng.IsGameOver(user, opponent)) { _callback[user].GameOverFromServer(user, opponent, true); if (opponent != Player.autoPlayer.ToString()) { _callback[opponent].GameOverFromServer(opponent, user, false); } GameMng.DeleteGame(user, opponent); } } else { if (_callback.ContainsKey(opponent)) { _callback[user].SetWaiterFromServer(user, opponent); } if (_callback.ContainsKey(opponent)) { _callback[opponent].SetMasterFromServer(opponent, user); } else { MoveCheckerAuto(opponent, user); } } } catch (Exception ex) { callback.RecieveGameError(ex.Message); if (_callback.ContainsKey(opponent)) { _callback[opponent].RecieveGameError(ex.Message); } } } } //} }