public static void FetchTournaments(SuccessHandler success, FriendlyErrorHandler failure) { fetchedTournamentsCallback = () => { success(); }; ArbiterBinding.FetchTournaments(FetchTournamentsSuccessHandler, failure); }
public static void JoinTournament(string buyIn, Dictionary <string, string> filters, JoinTournamentCallback success, FriendlyErrorHandler failure) { Func <Tournament, bool> isScorableByCurrentUser = (tournament) => { return((tournament.Status == Tournament.StatusType.Initializing || tournament.Status == Tournament.StatusType.InProgress) && tournament.UserCanReportScore(user.Id)); }; TournamentsCallback gotTournamentsPollHelper = (tournaments) => { List <Tournament> joinableTournaments = tournaments.Where(iTourn => isScorableByCurrentUser(iTourn)).ToList(); if (joinableTournaments.Count > 0) { tournamentPoller.Stop(); success(joinableTournaments[0]); } // Else wait for the poller to call this anon func again... }; int retries = 0; const int MAX_RETRIES = 6; Action askAgain = () => { retries++; if (retries > MAX_RETRIES) { List <string> errors = new List <string>(); errors.Add("Tournament request limit exceeded. Ceasing new requests."); List <string> descriptions = new List <string>(); descriptions.Add("The tournament timed-out. Please try again later."); failure(errors, descriptions); tournamentPoller.Stop(); } else { ArbiterBinding.FetchTournaments(gotTournamentsPollHelper, failure); } }; SuccessHandler gotRequestResponse = () => { tournamentPoller.SetAction(askAgain); }; TournamentsCallback gotTournamentsFirstTimeHelper = (tournaments) => { List <Tournament> joinableTournaments = tournaments.Where(iTourn => isScorableByCurrentUser(iTourn)).ToList(); if (joinableTournaments.Count > 0) { success(joinableTournaments[0]); } else { RequestTournament(buyIn, filters, gotRequestResponse, failure); } }; ArbiterBinding.FetchTournaments(gotTournamentsFirstTimeHelper, failure); }