LootLocker Unreal SDK 10.4.0
Game backend SDK for Unreal Engine
Loading...
Searching...
No Matches
LootLockerRemoteSessionRequestHandler.h
Go to the documentation of this file.
1// Copyright (c) 2021 LootLocker
2
3#pragma once
4
5
6#include "CoreMinimal.h"
9#include "TimerManager.h"
10#include "Kismet/BlueprintAsyncActionBase.h"
11#include "LootLockerSDK/Private/Utils/LootLockerUtilities.h"
13#include "LootLockerRemoteSessionRequestHandler.generated.h"
14
15class UTexture2D;
16
17//==================================================
18// Data Type Definitions
19//==================================================
22UENUM(BlueprintType, Category = "LootLocker")
27{
28 Created = 0,
29 Claimed = 1,
30 Verified = 2,
31 Authorized = 3,
32 Cancelled = 4,
33 Timed_out = 5,
34 Failed = 6
35};
37
40UENUM(BlueprintType, Category = "LootLocker")
45{
49 login = 0,
53 link = 1
54};
56
60USTRUCT(BlueprintType, Category = "LootLocker")
62{
63 GENERATED_BODY()
67 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
68 FString player_name = "";
72 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
73 int32 player_id = 0;
77 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
78 FString public_uid = "";
82 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
83 FString player_ulid = "";
87 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
88 bool seen_before = false;
92 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
93 bool check_grant_notifications = false;
97 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
98 bool check_deactivation_notifications = false;
102 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
103 int32 xp = 0;
107 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
108 int32 level = 0;
112 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
117 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
118 int32 account_balance = 0;
122 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
123 FString player_identifier = "";
127 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
128 FString player_created_at = "";
132 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
133 FString wallet_id = "";
134};
135
139USTRUCT(BlueprintType, Category = "LootLocker")
141{
142 GENERATED_BODY()
146 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
147 FString Code = "";
151 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
152 FString Nonce = "";
156 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
157 FString Redirect_url = "";
161 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
162 FString Redirect_url_qr_base64 = "";
166 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
167 UTexture2D* Redirect_url_qr_texture = nullptr;
171 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
172 FString Display_url = "";
173};
174
175//==================================================
176// Request Definitions
177//==================================================
178
182USTRUCT(BlueprintType, Category = "LootLocker")
184{
185 GENERATED_BODY()
189 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
190 FString Title_id = "";
194 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
195 FString Environment_id = "";
199 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
200 FString Game_version = "";
201};
202
206USTRUCT(BlueprintType, Category = "LootLocker")
208{
209 GENERATED_BODY()
213 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
214 FString Game_api_key = "";
218 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
219 FString Game_version = "";
223 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
224 FString Lease_code = "";
228 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
229 FString Nonce = "";
230};
231
232USTRUCT(BlueprintType)
234{
235 GENERATED_BODY()
236 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "LootLocker")
237 FString refresh_token = "";
238};
239
240//==================================================
241// Response Definitions
242//==================================================
243
247USTRUCT(BlueprintType, Category = "LootLocker")
249{
250 GENERATED_BODY()
254 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
255 FString Code = "";
259 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
260 FString Nonce = "";
264 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
265 FString Redirect_url = "";
269 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
270 FString Redirect_url_qr_base64 = "";
274 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
275 FString Display_url = "";
279 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
284 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
286};
287
291USTRUCT(BlueprintType, Category = "LootLocker")
293{
294 GENERATED_BODY()
298 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
300};
301
305USTRUCT(BlueprintType, Category = "LootLocker")
307{
308 GENERATED_BODY()
312 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
317 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
318 FString Refresh_token = "";
322 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
324};
325
329USTRUCT(BlueprintType, Category = "LootLocker")
331{
332 GENERATED_BODY()
336 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LootLocker")
337 FString Refresh_token = "";
338};
339
340//==================================================
341// Delegate Definitions
342//==================================================
343
346
362
363
364//==================================================
365// API Class Definition
366//==================================================
367
369{
370 static constexpr int RetryLimit = 5;
371 FString LeaseCode = "";
372 FString LeaseNonce = "";
375 float PollingIntervalSeconds = 1.0f;
376 FDateTime LastUpdatedAt;
377 int Retries = 0;
378 bool ShouldCancel = false;
380
381 FLootLockerRemoteSessionProcess(float _PollingIntervalSeconds, float timeOutAfterMinutes);
382};
383
385UCLASS()
386class LOOTLOCKERSDK_API ULootLockerRemoteSessionRequestHandler : public UObject
387{
388 GENERATED_BODY()
389public:
391
392 static void CancelRemoteSessionProcess(const FString& ProcessID);
393 static FString StartRemoteSession(
398 float PollingIntervalSeconds = 1.0f,
399 float TimeOutAfterMinutes = 5.0f,
400 const FString& ForPlayerWithUlid = "",
402 static FString RefreshRemoteSession(const FString& RefreshToken, const FLootLockerRefreshRemoteSessionResponseDelegate& OnComplete);
403 static FString ContinualPollingAction(const FString& ProcessID,
406 static void KillProcess(const FString& ProcessID);
407
408protected:
409 static FString LeaseRemoteSession(
410 const FString& TitleId,
411 const FString& EnvironmentId,
413 const FString& ForPlayerWithUlid,
414 const LLAPI<FLootLockerLeaseRemoteSessionResponse>::FResponseInspectorCallback& OnCompleteCallback,
416 static FString StartRemoteSession(const FString& LeaseCode, const FString& LeaseNonce, const LLAPI<FLootLockerStartRemoteSessionResponse>::FResponseInspectorCallback& OnCompleteCallback);
417 static void SetTimer(FTimerHandle TimerHandle, const FTimerDelegate& BaseDelegate, float TimeToNextPoll);
418 static void ClearTimer(FTimerHandle TimerHandle);
419private:
420
421 static TMap<FString, FLootLockerRemoteSessionProcess> RemoteSessionProcesses;
422};
423
424//==================================================
425// Async Blueprint Delegate Definitions
426//==================================================
427
431DECLARE_DYNAMIC_MULTICAST_DELEGATE_SevenParams(FLootLockerAsyncRemoteSessionMulticastDelegate, FString, LeaseProcessID, FLootLockerRemoteSessionLeaseData, LeaseData, bool, HasPlayerData, FString, SessionTokenOnSuccess, FString, RefreshTokenOnSuccess, FLootLockerRemoteSessionPlayerData, PlayerDataOnSuccess, FLootLockerResponse, ResponseOnFailure);
432
433//==================================================
434// Async Blueprint Node Definitions
435//==================================================
436
437/***/
438UCLASS()
439class ULootLockerAsyncStartRemoteSession : public UBlueprintAsyncActionBase
440{
441 GENERATED_BODY()
442public:
463 UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", Category = "LootLocker Methods | Remote Session", WorldContext = "WorldContextObject", AdvancedDisplay = "PollingIntervalSeconds,TimeOutAfterMinutes,ForPlayerWithUlid,Provider", PollingIntervalSeconds = 1.0f, TimeOutAfterMinutes = 5.0f, ForPlayerWithUlid = ""))
464 static LOOTLOCKERSDK_API ULootLockerAsyncStartRemoteSession* AsyncStartRemoteSession(UObject* WorldContextObjectfloat, float PollingIntervalSeconds, float TimeOutAfterMinutes, ELootLockerAccountProvider Provider = ELootLockerAccountProvider::Guest);
465
488 UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", Category = "LootLocker Methods | Remote Session", WorldContext = "WorldContextObject", AdvancedDisplay = "PollingIntervalSeconds,TimeOutAfterMinutes,ForPlayerWithUlid,Provider", PollingIntervalSeconds = 1.0f, TimeOutAfterMinutes = 5.0f, ForPlayerWithUlid = ""))
489 static LOOTLOCKERSDK_API ULootLockerAsyncStartRemoteSession* AsyncStartRemoteSessionForLinking(UObject* WorldContextObject, FString ForPlayerWithUlid, float PollingIntervalSeconds, float TimeOutAfterMinutes, ELootLockerAccountProvider Provider = ELootLockerAccountProvider::Guest);
490
491
493 UPROPERTY(BlueprintAssignable)
494 FLootLockerAsyncRemoteSessionMulticastDelegate OnProcessStarted;
496 UPROPERTY(BlueprintAssignable)
497 FLootLockerAsyncRemoteSessionMulticastDelegate OnLeaseClaimed;
499 UPROPERTY(BlueprintAssignable)
500 FLootLockerAsyncRemoteSessionMulticastDelegate OnLeaseVerified;
502 UPROPERTY(BlueprintAssignable)
503 FLootLockerAsyncRemoteSessionMulticastDelegate OnProcessCancelled;
505 UPROPERTY(BlueprintAssignable)
506 FLootLockerAsyncRemoteSessionMulticastDelegate OnProcessTimedOut;
508 UPROPERTY(BlueprintAssignable)
509 FLootLockerAsyncRemoteSessionMulticastDelegate OnProcessFailed;
511 UPROPERTY(BlueprintAssignable)
512 FLootLockerAsyncRemoteSessionMulticastDelegate OnProcessFinished;
513
515 LOOTLOCKERSDK_API virtual void Activate() override;
516
517protected:
518 FString ForPlayerWithUlid = "";
521 FString LeaseProcessID = "";
522 float PollingIntervalInSeconds = 0.0f;
523 float TimeoutAfterMinutes = 0.0f;
524 UPROPERTY()
526
527 UFUNCTION()
528 LOOTLOCKERSDK_API virtual void HandleLeaseProcessStarted(const FLootLockerLeaseRemoteSessionResponse& LeaseProcessStartedResponse);
529 UFUNCTION()
530 LOOTLOCKERSDK_API virtual void HandleLeaseProcessUpdate(const FLootLockerRemoteSessionStatusPollingResponse& LeaseProcessUpdateResponse);
531 UFUNCTION()
532 LOOTLOCKERSDK_API virtual void HandleLeaseProcessCompleted(const FLootLockerStartRemoteSessionResponse& LeaseProcessCompletedResponse);
533};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_SevenParams(FLootLockerAsyncRemoteSessionMulticastDelegate, FString, LeaseProcessID, FLootLockerRemoteSessionLeaseData, LeaseData, bool, HasPlayerData, FString, SessionTokenOnSuccess, FString, RefreshTokenOnSuccess, FLootLockerRemoteSessionPlayerData, PlayerDataOnSuccess, FLootLockerResponse, ResponseOnFailure)
Multicast Delegate for events triggered from the Async Remote Session node.
Definition LootLockerRemoteSessionRequestHandler.h:440
Definition LootLockerRemoteSessionRequestHandler.h:387
ULootLockerRemoteSessionRequestHandler()
Definition LootLockerRemoteSessionRequestHandler.h:390
static void KillProcess(const FString &ProcessID)
static FString StartRemoteSession(const FString &LeaseCode, const FString &LeaseNonce, const LLAPI< FLootLockerStartRemoteSessionResponse >::FResponseInspectorCallback &OnCompleteCallback)
static FString ContinualPollingAction(const FString &ProcessID, const FLootLockerRemoteSessionStatusPollingResponseDelegate &RemoteSessionLeaseStatusUpdate=FLootLockerRemoteSessionStatusPollingResponseDelegate(), const FLootLockerStartRemoteSessionResponseDelegate &OnComplete=FLootLockerStartRemoteSessionResponseDelegate())
static void CancelRemoteSessionProcess(const FString &ProcessID)
static FString RefreshRemoteSession(const FString &RefreshToken, const FLootLockerRefreshRemoteSessionResponseDelegate &OnComplete)
static FString StartRemoteSession(ELootLockerRemoteSessionLeaseIntent Intent=ELootLockerRemoteSessionLeaseIntent::login, const FLootLockerLeaseRemoteSessionResponseDelegate &RemoteSessionLeaseInformation=FLootLockerLeaseRemoteSessionResponseDelegate(), const FLootLockerRemoteSessionStatusPollingResponseDelegate &RemoteSessionLeaseStatusUpdate=FLootLockerRemoteSessionStatusPollingResponseDelegate(), const FLootLockerStartRemoteSessionResponseDelegate &OnComplete=FLootLockerStartRemoteSessionResponseDelegate(), float PollingIntervalSeconds=1.0f, float TimeOutAfterMinutes=5.0f, const FString &ForPlayerWithUlid="", ELootLockerAccountProvider Provider=ELootLockerAccountProvider::Guest)
static void ClearTimer(FTimerHandle TimerHandle)
static FString LeaseRemoteSession(const FString &TitleId, const FString &EnvironmentId, ELootLockerRemoteSessionLeaseIntent Intent, const FString &ForPlayerWithUlid, const LLAPI< FLootLockerLeaseRemoteSessionResponse >::FResponseInspectorCallback &OnCompleteCallback, ELootLockerAccountProvider Provider=ELootLockerAccountProvider::Guest)
static void SetTimer(FTimerHandle TimerHandle, const FTimerDelegate &BaseDelegate, float TimeToNextPoll)
ELootLockerAccountProvider
Account providers possible to use for connected accounts.
Definition LootLockerConnectedAccountsRequestHandler.h:21
void(* FLootLockerRefreshRemoteSessionResponseDelegate)(FLootLockerRefreshRemoteSessionResponse)
C++ response delegate for receiving the refreshed remote session.
Definition LootLockerRemoteSessionRequestHandler.h:361
void(* FLootLockerStartRemoteSessionResponseDelegate)(FLootLockerStartRemoteSessionResponse)
C++ response delegate for receiving the finalized remote session data (whether successful or not)
Definition LootLockerRemoteSessionRequestHandler.h:357
ELootLockerRemoteSessionLeaseIntent
Possible intents for remote sessions.
Definition LootLockerRemoteSessionRequestHandler.h:45
void(* FLootLockerRemoteSessionStatusPollingResponseDelegate)(FLootLockerRemoteSessionStatusPollingResponse)
C++ response delegate for receiving continual polling updates.
Definition LootLockerRemoteSessionRequestHandler.h:353
void(* FLootLockerLeaseRemoteSessionResponseDelegate)(FLootLockerLeaseRemoteSessionResponse)
C++ response delegate for receiving the remote session lease information.
Definition LootLockerRemoteSessionRequestHandler.h:349
ELootLockerRemoteSessionLeaseStatus
Possible entity kinds that catalog entries can have.
Definition LootLockerRemoteSessionRequestHandler.h:27
@ link
Intent is to link different providers.
@ login
Intent is to log in using a leased remote session.
Definition LootLockerAuthenticationRequestHandler.h:381
Definition LootLockerAuthenticationRequestHandler.h:83
Request body for remote session lease (now required fields)
Definition LootLockerRemoteSessionRequestHandler.h:184
Response containing the lease codes, redirect URLs, current lease status, and intent returned when st...
Definition LootLockerRemoteSessionRequestHandler.h:249
Definition LootLockerAuthenticationRequestHandler.h:367
Definition LootLockerRemoteSessionRequestHandler.h:234
Response containing the refreshed authentication data and a new refresh token for an existing remote ...
Definition LootLockerRemoteSessionRequestHandler.h:331
Holds the lease codes, redirect URL, Base64 QR code, and display URL needed to drive the remote sessi...
Definition LootLockerRemoteSessionRequestHandler.h:141
Holds the player data returned when a remote session lease is successfully authorized,...
Definition LootLockerRemoteSessionRequestHandler.h:62
Definition LootLockerRemoteSessionRequestHandler.h:369
FTimerHandle RemoteSessionProcessTimerHandle
Definition LootLockerRemoteSessionRequestHandler.h:379
FDateTime LastUpdatedAt
Definition LootLockerRemoteSessionRequestHandler.h:376
FDateTime LeasingProcessTimeoutTime
Definition LootLockerRemoteSessionRequestHandler.h:374
FLootLockerRemoteSessionProcess(float _PollingIntervalSeconds, float timeOutAfterMinutes)
Response containing the current lease status of a remote session when polled during the authorization...
Definition LootLockerRemoteSessionRequestHandler.h:293
Base response struct — every SDK callback receives a struct that derives from this.
Definition LootLockerResponse.h:19
Request to exchange a remote session lease code and nonce for an authorized session using the game AP...
Definition LootLockerRemoteSessionRequestHandler.h:208
Response returned when remote session polling completes, containing the lease status and,...
Definition LootLockerRemoteSessionRequestHandler.h:307