void FOnlineIdentityAmazon::TickLogin(float DeltaTime) { if (bHasLoginOutstanding) { LastCheckElapsedTime += DeltaTime; TotalCheckElapsedTime += DeltaTime; // See if enough time has elapsed in order to check for completion if (LastCheckElapsedTime > 1.f || // Do one last check if we're getting ready to time out TotalCheckElapsedTime > MaxCheckElapsedTime) { LastCheckElapsedTime = 0.f; FString Title; if (FPlatformMisc::GetWindowTitleMatchingText(TEXT("accessToken"), Title)) { bHasLoginOutstanding = false; FUserOnlineAccountAmazon User; if (ParseLoginResults(Title, User)) { TSharedRef<FUserOnlineAccountAmazon> UserRef(new FUserOnlineAccountAmazon(User.UserId, User.SecretKey, User.AuthTicket)); UserAccounts.Add(User.UserId, UserRef); TriggerOnLoginCompleteDelegates(LocalUserNumPendingLogin, true, *UserRef->GetUserId(), FString()); } else { TriggerOnLoginCompleteDelegates(LocalUserNumPendingLogin, false, FUniqueNetIdString(TEXT("")), FString(TEXT("RegisterUser() failed to parse the user registration results"))); } } // Trigger the delegate if we hit the timeout limit else if (TotalCheckElapsedTime > MaxCheckElapsedTime) { bHasLoginOutstanding = false; TriggerOnLoginCompleteDelegates(LocalUserNumPendingLogin, false, FUniqueNetIdString(TEXT("")), FString(TEXT("RegisterUser() timed out without getting the data"))); } } // Reset our time trackers if we are done ticking for now if (!bHasLoginOutstanding) { LastCheckElapsedTime = 0.f; TotalCheckElapsedTime = 0.f; } } }
void FOnlineIdentityLeet::MeUser_HttpRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded) { UE_LOG_ONLINE(Display, TEXT("FOnlineIdentityLeet::MeUser_HttpRequestComplete")); bool bResult = false; FString ResponseStr, ErrorStr; FUserOnlineAccountLeet User; FPendingLoginUser PendingRegisterUser = LoginUserRequests.FindRef(HttpRequest.Get()); // Remove the request from list of pending entries LoginUserRequests.Remove(HttpRequest.Get()); if (bSucceeded && HttpResponse.IsValid()) { ResponseStr = HttpResponse->GetContentAsString(); if (EHttpResponseCodes::IsOk(HttpResponse->GetResponseCode())) { UE_LOG(LogOnline, Verbose, TEXT("RegisterUser request complete. url=%s code=%d response=%s"), *HttpRequest->GetURL(), HttpResponse->GetResponseCode(), *ResponseStr); if (User.FromJson(ResponseStr)) { if (!User.UserId.IsEmpty()) { // copy and construct the unique id TSharedRef<FUserOnlineAccountLeet> UserRef(new FUserOnlineAccountLeet(User)); UserRef->UserIdPtr = MakeShareable(new FUniqueNetIdString(User.UserId)); // update/add cached entry for user UserAccounts.Add(User.UserId, UserRef); // update the access token UserRef->AuthTicket = PendingRegisterUser.AccessToken; // keep track of user ids for local users UserIds.Add(PendingRegisterUser.LocalUserNum, UserRef->GetUserId()); bResult = true; } else { ErrorStr = FString::Printf(TEXT("Missing user id. payload=%s"), *ResponseStr); } } else { ErrorStr = FString::Printf(TEXT("Invalid response payload=%s"), *ResponseStr); } } else { ErrorStr = FString::Printf(TEXT("Invalid response. code=%d error=%s"), HttpResponse->GetResponseCode(), *ResponseStr); } } else { ErrorStr = TEXT("No response"); } if (!ErrorStr.IsEmpty()) { UE_LOG(LogOnline, Warning, TEXT("RegisterUser request failed. %s"), *ErrorStr); } TriggerOnLoginCompleteDelegates(PendingRegisterUser.LocalUserNum, bResult, FUniqueNetIdString(User.UserId), ErrorStr); }