public Bet(UserDataManager manager, Match match, POCO.BetPoco poco)
        {
            Id = poco._id;
            MyMatch = match;
            MatchHash = poco.match_hash;
            UserContext = manager.User;

            SetOutcome(poco.outcome);

            if (match != null)
            {
                if (match.Player1 != null && poco.offerer_choice_id == match.Player1.Id)
                {
                    OffererChoice = match.Player1;
                    TakerChoice = match.Player2;
                }
                else
                {
                    OffererChoice = match.Player2;
                    TakerChoice = match.Player1;
                }
            }

            var offerer = new POCO.UserBase { _id = poco.offerer_id, username = poco.offerer_username };
            Offerer = manager.GetPgUser(offerer);
            OffererOdds = poco.offerer_odds;
            OffererWager = poco.offerer_wager;

            var taker = new POCO.UserBase { _id = poco.taker_id, username = poco.taker_username };
            if (!string.IsNullOrWhiteSpace(taker._id))
                Taker = manager.GetPgUser(taker);
        }
 public void OnMatchesLoaded(List<MatchPoco> matches)
 {
     foreach (var match in matches)
     {
         Match item = new Match(match);
         _matches.Add(item);
     }
     OnPropertyChanged("Matches");
 }
 public void OnWinnerReported(Match match)
 {
     if (match == null)
     {
         LoadMatches();
     }
     else
     {
         _matches.Remove(match);
         OnPropertyChanged("Matches");
     }
 }
 public void ReportMatchWinner(Match match)
 {
     _session.ReportMatchWinner(match, OnWinnerReported);
 }
        public void SetMatch(Match match)
        {
            MapName = match.Map;

            _match = match;
            var operandA = match.Player1;
            var operandB = match.Player2;

            _betOperandA = operandA;
            _betOperandB = operandB;
            UpdateSummary();
        }
 public void ReportMatchWinner(Match match, Action<Match> onCompleted)
 {
     RestResponse<ApiResponse> response = null;
     _userData.PgSession.BeginAndCallback(delegate
     {
         var url = _userData.PgSession.GetWebAppFunction("/api", "/matches/" + match.Id + ".json");
         var client = new RestClient(url);
         var request = new RestRequest(Method.PUT);
         response = (RestResponse<ApiResponse>)client.Execute<ApiResponse>(request);
     }, delegate
     {
         if (!response.IsOk())
         {
             string msg = response.Data.errors == null ? response.StatusCode.ToString() : string.Concat(response.Data.errors);
             MessageDialog.Show(_window, "Failed to report winner", msg);
             onCompleted(null);
         }
         else
         {
             onCompleted(match);
         }
     });
 }
 public void CancelBet(Bet bet)
 {
     RestResponse<ApiResponse> response = null;
     _userData.PgSession.BeginAndCallback(delegate
     {
         var url = _userData.PgSession.GetWebAppFunction("/api", "/game_rooms/" + GameRoom.Id + "/bets/" + bet.Id + ".json");
         var client = new RestClient(url);
         var request = new RestRequest(Method.DELETE);
         response = (RestResponse<ApiResponse>)client.Execute<ApiResponse>(request);
     }, delegate
     {
         if (response.IsOk())
         {
             if (MyMatch.Id == bet.MyMatch.Id && bet.MyMatch.State == MatchState.created)
             {
                 _myMatch = new Match();
             }
         }
         else
         {
             string msg = response.Data.errors == null ? response.StatusCode.ToString() : string.Concat(response.Data.errors);
             MessageDialog.Show(_window, "Failed to delete bet", msg);
         }
     });
 }
        public void UpdateMatch(Match m)
        {
            MyMatch.IsEditable = false;

            var url = _userData.PgSession.GetWebApiV1Function("/matches/" + m.Id + ".json");
            var poco = new //POCO.MatchPoco
            {
                game_id = m.GameId,
                betting = m.IsBetting,

                player_1_name = m.Player1.ShortDescription,
                player_1_type = m.Player1.PocoType,
                player_1_id = m.Player1.Id,

                player_2_name = m.Player2.ShortDescription,
                player_2_type = m.Player2.PocoType,
                player_2_id = m.Player2.Id,

                map = m.Map,
            };
            var root = new { match = poco };

            RestResponse<ApiResponse> response = null;
            _userData.PgSession.BeginAndCallback(delegate
            {
                response = SocketSession.Rest<ApiResponse>(url, Method.PUT, root);
            }, delegate
            {
                if (!response.IsOk())
                {
                    MyMatch.IsEditable = true;
                    MessageDialog.Show(_window, "Failed to update match", "Sorry, failed to update match.\r\nDetails: " + response.ErrorMessage);
                }
            });
        }
 public void OnBetNew(BetPoco poco)
 {
     Bet bet = new Bet(_userData, MyMatch, poco);
     RoomBets.Add(bet);
     _myMatch = new Match();
 }
        public void LoadBets()
        {
            if (GameRoom.Bets.Length > 0) return;

            RestResponse<List<BetPoco>> response = null;
            _userData.PgSession.BeginAndCallback(delegate
            {
                var url = _userData.PgSession.GetWebAppFunction("/api", "/game_rooms/" + GameRoom.Id + "/bets", "include_matches=true");
                var client = new RestClient(url);
                var request = new RestRequest(Method.GET);
                response = (RestResponse<List<BetPoco>>)client.Execute<List<BetPoco>>(request);
            }, delegate
            {
                if (response.IsOk())
                {
                    if (response.Data != null)
                    {
                        var bets = response.Data;
                        foreach (BetPoco bet in bets)
                        {
                            Match match = new Match(bet.match);
                            Bet item = new Bet(_userData, match, bet);
                            RoomBets.Add(item);
                        }
                    }
                }
                else
                {
                    MessageDialog.Show(_window, "Failed to get Bets", "Sorry, failed to get bet list.\r\nDetails: " + response.ErrorMessage);
                }
            });
        }