Esempio n. 1
0
 public static void FetchTournaments(SuccessHandler success, FriendlyErrorHandler failure)
 {
     fetchedTournamentsCallback = () => {
         success();
     };
     ArbiterBinding.FetchTournaments(FetchTournamentsSuccessHandler, failure);
 }
Esempio n. 2
0
    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);
    }