Пример #1
0
        private async Task FireRequestBlock(Request request)
        {
            var requests = CommonRequest.FillRequest(request, Client);

            var serverRequest = await GetRequestBuilder().GetRequestEnvelope(requests);

            var serverResponse = await PostProto <Request>(serverRequest);

            var responses = serverResponse.Returns;

            if (responses != null)
            {
                var checkChallengeResponse = new CheckChallengeResponse();
                if (2 <= responses.Count)
                {
                    checkChallengeResponse.MergeFrom(responses[1]);

                    CommonRequest.ProcessCheckChallengeResponse(Client, checkChallengeResponse);
                }

                var getInventoryResponse = new GetInventoryResponse();
                if (4 <= responses.Count)
                {
                    getInventoryResponse.MergeFrom(responses[3]);

                    CommonRequest.ProcessGetInventoryResponse(Client, getInventoryResponse);
                }

                var downloadSettingsResponse = new DownloadSettingsResponse();
                if (6 <= responses.Count)
                {
                    downloadSettingsResponse.MergeFrom(responses[5]);

                    CommonRequest.ProcessDownloadSettingsResponse(Client, downloadSettingsResponse);
                }
            }
        }
Пример #2
0
        public static void ProcessCommonResponses(Client client, RepeatedField <ByteString> responses, bool processBuddyWalked = true, bool processInBox = true)
        {
            if (responses != null)
            {
                var checkChallengeResponse = new CheckChallengeResponse();
                if (responses.Count > 1)
                {
                    checkChallengeResponse.MergeFrom(responses[1]);
                    CommonRequest.ProcessCheckChallengeResponse(client, checkChallengeResponse);
                }

                var getHatchedEggsResponse = new GetHatchedEggsResponse();
                if (responses.Count > 2)
                {
                    getHatchedEggsResponse.MergeFrom(responses[2]);
                    CommonRequest.ProcessGetHatchedEggsResponse(client, getHatchedEggsResponse);
                }

                var getInventoryResponse = new GetInventoryResponse();
                if (responses.Count > 3)
                {
                    getInventoryResponse.MergeFrom(responses[3]);
                    CommonRequest.ProcessGetInventoryResponse(client, getInventoryResponse);
                }

                var checkAwardedBadgesResponse = new CheckAwardedBadgesResponse();
                if (responses.Count > 4)
                {
                    checkAwardedBadgesResponse.MergeFrom(responses[4]);
                    CommonRequest.ProcessCheckAwardedBadgesResponse(client, checkAwardedBadgesResponse);
                }

                var downloadSettingsResponse = new DownloadSettingsResponse();
                if (responses.Count > 5)
                {
                    downloadSettingsResponse.MergeFrom(responses[5]);
                    CommonRequest.ProcessDownloadSettingsResponse(client, downloadSettingsResponse);
                }
                var index = 5;
                if (processBuddyWalked)
                {
                    index++;
                    var getBuddyWalkedResponse = new GetBuddyWalkedResponse();
                    if (responses.Count > index)
                    {
                        getBuddyWalkedResponse.MergeFrom(responses[index]);
                        CommonRequest.ProcessGetBuddyWalkedResponse(client, getBuddyWalkedResponse);
                    }
                }
                if (processInBox)
                {
                    index++;
                    var getInboxResponse = new GetInboxResponse();

                    if (responses.Count > index)
                    {
                        getInboxResponse.MergeFrom(responses[index]);
                        CommonRequest.ProcessGetInboxResponse(client, getInboxResponse);
                    }
                }
            }
        }
Пример #3
0
        private async Task FireRequestBlock(Request request)
        {
            var requests = CommonRequest.FillRequest(request, Client);

            var serverRequest = await GetRequestBuilder().GetRequestEnvelope(requests, true).ConfigureAwait(false);

            var serverResponse = await PostProto <Request>(serverRequest).ConfigureAwait(false);

            if (!string.IsNullOrEmpty(serverResponse.ApiUrl))
            {
                Client.ApiUrl = "https://" + serverResponse.ApiUrl + "/rpc";
            }

            if (serverResponse.AuthTicket != null)
            {
                Client.AuthTicket = serverResponse.AuthTicket;
            }

            switch (serverResponse.StatusCode)
            {
            case ResponseEnvelope.Types.StatusCode.InvalidAuthToken:
                Client.AuthToken = null;
                throw new AccessTokenExpiredException();

            case ResponseEnvelope.Types.StatusCode.Redirect:
                // 53 means that the api_endpoint was not correctly set, should be at this point, though, so redo the request
                await FireRequestBlock(request).ConfigureAwait(false);

                return;

            case ResponseEnvelope.Types.StatusCode.BadRequest:
                // Your account may be banned! please try from the official client.
                throw new LoginFailedException("Your account may be banned! please try from the official client.");

            case ResponseEnvelope.Types.StatusCode.Unknown:
                break;

            case ResponseEnvelope.Types.StatusCode.Ok:
                break;

            case ResponseEnvelope.Types.StatusCode.OkRpcUrlInResponse:
                break;

            case ResponseEnvelope.Types.StatusCode.InvalidRequest:
                break;

            case ResponseEnvelope.Types.StatusCode.InvalidPlatformRequest:
                break;

            case ResponseEnvelope.Types.StatusCode.SessionInvalidated:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var responses = serverResponse.Returns;

            if (responses != null)
            {
                var checkChallengeResponse = new CheckChallengeResponse();
                if (2 <= responses.Count)
                {
                    checkChallengeResponse.MergeFrom(responses[1]);

                    CommonRequest.ProcessCheckChallengeResponse(Client, checkChallengeResponse);
                }

                var getInventoryResponse = new GetInventoryResponse();
                if (4 <= responses.Count)
                {
                    getInventoryResponse.MergeFrom(responses[3]);

                    CommonRequest.ProcessGetInventoryResponse(Client, getInventoryResponse);
                }

                var downloadSettingsResponse = new DownloadSettingsResponse();
                if (6 <= responses.Count)
                {
                    downloadSettingsResponse.MergeFrom(responses[5]);

                    CommonRequest.ProcessDownloadSettingsResponse(Client, downloadSettingsResponse);
                }
            }
        }
Пример #4
0
        public async Task FireRequestBlock(Request request)
        {
            var requests = CommonRequest.AddChallengeRequest(request, Client);

            var serverRequest  = GetRequestBuilder().GetRequestEnvelope(requests, true);
            var serverResponse = await PostProto <Request>(serverRequest).ConfigureAwait(false);

            var platfResponses = serverResponse.PlatformReturns;

            if (platfResponses != null)
            {
                var mapPlatform = platfResponses.FirstOrDefault(x => x.Type == PlatformRequestType.UnknownPtr8);
                if (mapPlatform != null)
                {
                    var unknownPtr8Response = UnknownPtr8Response.Parser.ParseFrom(mapPlatform.Response);
                    Resources.Api.UnknownPtr8Message = unknownPtr8Response.Message;
                }
            }

            switch (serverResponse.StatusCode)
            {
            case ResponseEnvelope.Types.StatusCode.SessionInvalidated:
            case ResponseEnvelope.Types.StatusCode.InvalidAuthToken:
                Logger.Debug("Invalid token.");
                Client.AuthToken = null;
                throw new AccessTokenExpiredException();

            case ResponseEnvelope.Types.StatusCode.InvalidPlatformRequest:
                Logger.Debug("Invalid Platform.");
                Client.AuthToken = null;
                throw new InvalidPlatformException();

            case ResponseEnvelope.Types.StatusCode.Redirect:
                // 53 means that the api_endpoint was not correctly set, should be at this point, though, so redo the request
                if (!string.IsNullOrEmpty(serverResponse.ApiUrl))
                {
                    Client.ApiUrl = "https://" + serverResponse.ApiUrl + "/rpc";
                    Logger.Debug("New Client.ApiUrl: " + Client.ApiUrl);
                }
                Logger.Debug("Redirecting");
                await FireRequestBlock(request).ConfigureAwait(false);

                return;

            case ResponseEnvelope.Types.StatusCode.BadRequest:
                // Your account may be banned! please try from the official client.
                throw new LoginFailedException("Your account may be banned! please try from the official client.");

            case ResponseEnvelope.Types.StatusCode.Unknown:
                break;

            case ResponseEnvelope.Types.StatusCode.Ok:
                break;

            case ResponseEnvelope.Types.StatusCode.OkRpcUrlInResponse:
                if (!string.IsNullOrEmpty(serverResponse.ApiUrl))
                {
                    Client.ApiUrl = "https://" + serverResponse.ApiUrl + "/rpc";
                    Logger.Debug("New Client.ApiUrl: " + Client.ApiUrl);
                }
                break;

            case ResponseEnvelope.Types.StatusCode.InvalidRequest:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (serverResponse.AuthTicket != null)
            {
                Client.AuthTicket = serverResponse.AuthTicket;
                Logger.Debug("Received AuthTicket: " + Client.AuthTicket);
            }

            var responses = serverResponse.Returns;

            if (responses != null)
            {
                var getPlayerResponse = new GetPlayerResponse();
                if (1 <= responses.Count)
                {
                    getPlayerResponse.MergeFrom(responses[0]);
                    CommonRequest.ProcessGetPlayerResponse(Client, getPlayerResponse);
                }
                var checkChallengeResponse = new CheckChallengeResponse();
                if (2 <= responses.Count)
                {
                    checkChallengeResponse.MergeFrom(responses[1]);
                    CommonRequest.ProcessCheckChallengeResponse(Client, checkChallengeResponse);
                }
            }
        }