public HttpResponseMessage KeepAlive(KeepAliveRequest request) { var result = new KeepAliveResult(); try { result = service.KeepAlive(request); } catch (Exception e) { result.ErrorMessage = e.Message; result.Success = false; return(Request.CreateResponse(HttpStatusCode.InternalServerError, result)); } return(Request.CreateResponse(HttpStatusCode.OK, result)); }
public KeepAliveResult KeepAlive(KeepAliveRequest request) { var result = new KeepAliveResult(); try { Room room = null; Hand hand = null; Round round = null; #region Set Room, Hand and Round if (GameCenter.RoomsByID.ContainsKey(request.Room)) { room = GameCenter.RoomsByID[request.Room]; } else { throw new RoomNotFoundException("Can't find room in game center"); } if (room.CurrentHand != null) { hand = room.CurrentHand; if (hand.CurrentRound != null) { round = hand.CurrentRound; } } #endregion #region Room's info #region Players info by table location //get room's players location in table //get all current active player's states at the table //get all players bets in the current round result.TableLocationOfActivePlayers = new int[10]; result.PlayersStates = new string[10]; result.PlayersBets = new double[10]; for (int i = 0; i < 10; i++) { Chair chair = null; foreach (Chair c in room.Chairs) { if (c.Index == i) { chair = c; break; } } if (chair == null) { throw new WrongIOException("Chair not found"); } if (room.TableLocationOfActivePlayers.ContainsKey(chair)) { Player player = room.TableLocationOfActivePlayers[chair]; result.TableLocationOfActivePlayers[i] = player.GetHashCode(); result.PlayersStates[i] = player.CurrentState.ToString(); if (hand != null && round != null) { result.PlayersBets[i] = room.CurrentHand.CurrentRound.LiveBets[player]; } } else { result.PlayersStates[i] = Player.State.Passive.ToString(); result.PlayersBets[i] = -1; } } #endregion result.IsTableFull = room.IsTableFull; #endregion #region Hand's info //get player's and table's cards if (hand != null) { result.PlayersAndTableCards = new int[52]; foreach (Player p in hand.ActivePlayers) { if (p.PrivateCards[0] != null && p.PrivateCards[1] != null) { result.PlayersAndTableCards[p.PrivateCards[0].Index] = p.GetHashCode(); result.PlayersAndTableCards[p.PrivateCards[1].Index] = p.GetHashCode(); } } for (int i = 0; i < hand.CommunityCards.Length; i++) { if (hand.CommunityCards[i] == null) { break; } result.PlayersAndTableCards[hand.CommunityCards[i].Index] = (-1) * (i + 1); } result.DealerId = hand.Dealer.GetHashCode(); } #endregion #region Round's info if (round != null) { result.CurrentPlayerID = round.CurrentPlayer.GetHashCode(); //get pot's values and amount to claim result.PotsValues = new List <double>(); result.PotsAmountToClaim = new List <double>(); if (round.CurrentPot == null) { throw new WrongIOException("Round's pot is somehow null..."); } Pot potIter = round.CurrentPot; while (potIter.BasePot != null) { potIter = potIter.BasePot; } while (potIter != null) { result.PotsValues.Add(potIter.Value); result.PotsAmountToClaim.Add(potIter.AmountToClaim); potIter = potIter.PartialPot; } //Note: Result.PlayersBets info is in Room's info (above) result.TotalRaise = round.TotalRaise; result.LastRaise = round.LastRaise; } #endregion //Player's info if (room.ActivePlayersByID.ContainsKey(request.PlayerID)) { result.PlayerWallet = room.ActivePlayersByID[request.PlayerID].Wallet.AmountOfMoney; } result.Success = true; } catch (RoomNotFoundException e) { result.Success = false; result.ErrorMessage = e.Message; } catch (WrongIOException e) { result.Success = false; result.ErrorMessage = e.Message; } return(result); }