4
4
5
5
#include " SpatialGameInstance.h"
6
6
#include " TimerManager.h"
7
+ #include " SpatialGDKSettings.h"
7
8
#include " SpatialWorkerConnection.h"
8
9
9
10
#include " GDKLogging.h"
@@ -15,79 +16,36 @@ void ADeploymentsPlayerController::BeginPlay()
15
16
16
17
bShowMouseCursor = true ;
17
18
18
- QueryPIT ();
19
- }
19
+ USpatialGameInstance* SpatialGameInstance = GetGameInstance<USpatialGameInstance> ();
20
+ SpatialWorkerConnection = SpatialGameInstance-> GetSpatialWorkerConnection ();
20
21
21
- void ADeploymentsPlayerController::EndPlay (const EEndPlayReason::Type Reason)
22
- {
23
- GetWorld ()->GetTimerManager ().ClearAllTimersForObject (this );
24
- }
25
-
26
- void OnLoginTokens (void * UserData, const Worker_Alpha_LoginTokensResponse* LoginTokens)
27
- {
28
- ADeploymentsPlayerController* contoller = static_cast <ADeploymentsPlayerController*>(UserData);
29
- if (LoginTokens->status .code == WORKER_CONNECTION_STATUS_CODE_SUCCESS)
30
- {
31
- UE_LOG (LogGDK, Log, TEXT (" Success: Login Token Count %d" ), LoginTokens->login_token_count );
32
- contoller->Populate (LoginTokens);
33
- }
34
- else
22
+ if (SpatialWorkerConnection == nullptr )
35
23
{
36
- UE_LOG (LogGDK, Log, TEXT (" Failure: Error %s" ), UTF8_TO_TCHAR (LoginTokens->status .detail ));
24
+ // We might not be using spatial networking in which case SpatialWorkerConnection will not exist so we should just return
25
+ return ;
37
26
}
38
- }
39
27
40
- void OnPlayerIdentityToken (void * UserData, const Worker_Alpha_PlayerIdentityTokenResponse* PIToken)
41
- {
42
- if (PIToken->status .code == WORKER_CONNECTION_STATUS_CODE_SUCCESS)
43
- {
44
- UE_LOG (LogGDK, Log, TEXT (" Success: Received PIToken: %s" ), UTF8_TO_TCHAR (PIToken->player_identity_token ));
45
- ADeploymentsPlayerController* controller = static_cast <ADeploymentsPlayerController*>(UserData);
46
- controller->LatestPITokenData = PIToken->player_identity_token ;
47
- controller->LatestPIToken = UTF8_TO_TCHAR (PIToken->player_identity_token );
48
-
49
- if (!controller->GetWorld ()->GetTimerManager ().IsTimerActive (controller->QueryDeploymentsTimer ))
28
+ FString SpatialWorkerType = SpatialGameInstance->GetSpatialWorkerType ().ToString ();
29
+ SpatialWorkerConnection->RegisterOnLoginTokensCallback ([this ](const Worker_Alpha_LoginTokensResponse* Deployments){
30
+ Populate (Deployments);
31
+ if (!GetWorld ()->GetTimerManager ().IsTimerActive (QueryDeploymentsTimer))
50
32
{
51
- controller-> GetWorld ()->GetTimerManager ().SetTimer (controller-> QueryDeploymentsTimer , controller, &ADeploymentsPlayerController::QueryDeployments, 5 .0f , true , 0 .0f );
33
+ GetWorld ()->GetTimerManager ().SetTimer (QueryDeploymentsTimer, this , &ADeploymentsPlayerController::ScheduleRefreshDeployments, 10 .0f , true , 0 .0f );
52
34
}
53
- }
54
- else
35
+ return true ;
36
+ });
37
+
38
+ if (GetDefault<USpatialGDKSettings>()->bUseDevelopmentAuthenticationFlow )
55
39
{
56
- UE_LOG (LogGDK, Log, TEXT (" Failure: Error %s" ), UTF8_TO_TCHAR (PIToken->status .detail ));
57
- ADeploymentsPlayerController* controller = static_cast <ADeploymentsPlayerController*>(UserData);
58
-
59
- if (controller->GetWorld ()->GetTimerManager ().IsTimerActive (controller->QueryDeploymentsTimer ))
60
- {
61
- controller->GetWorld ()->GetTimerManager ().ClearTimer (controller->QueryDeploymentsTimer );
62
- }
40
+ SpatialWorkerConnection->Connect (true , 0 );
63
41
}
64
42
}
65
43
66
- void ADeploymentsPlayerController::QueryDeployments ()
67
- {
68
- Worker_Alpha_LoginTokensRequest* LTParams = new Worker_Alpha_LoginTokensRequest ();
69
- LTParams->player_identity_token = LatestPITokenData;
70
- LTParams->worker_type = " UnrealClient" ;
71
- Worker_Alpha_LoginTokensResponseFuture* LTFuture = Worker_Alpha_CreateDevelopmentLoginTokensAsync (" locator.improbable.io" , 444 , LTParams);
72
- Worker_Alpha_LoginTokensResponseFuture_Get (LTFuture, nullptr , this , OnLoginTokens);
73
- }
74
-
75
- void ADeploymentsPlayerController::QueryPIT ()
44
+ void ADeploymentsPlayerController::EndPlay (const EEndPlayReason::Type Reason)
76
45
{
77
- Worker_Alpha_PlayerIdentityTokenRequest* PITParams = new Worker_Alpha_PlayerIdentityTokenRequest ();
78
- // Replace this string with a dev auth token, see docs for information on how to generate one of these
79
- PITParams->development_authentication_token = " REPLACE ME" ;
80
- PITParams->player_id = " Player Id" ;
81
- PITParams->display_name = " " ;
82
- PITParams->metadata = " " ;
83
- PITParams->use_insecure_connection = false ;
84
-
85
- Worker_Alpha_PlayerIdentityTokenResponseFuture* PITFuture = Worker_Alpha_CreateDevelopmentPlayerIdentityTokenAsync (" locator.improbable.io" , 444 , PITParams);
86
-
87
- if (PITFuture != nullptr )
88
- {
89
- Worker_Alpha_PlayerIdentityTokenResponseFuture_Get (PITFuture, nullptr , this , OnPlayerIdentityToken);
90
- }
46
+ if (SpatialWorkerConnection != nullptr )
47
+ SpatialWorkerConnection->RegisterOnLoginTokensCallback ([](const Worker_Alpha_LoginTokensResponse* Deployments){return false ;});
48
+ GetWorld ()->GetTimerManager ().ClearAllTimersForObject (this );
91
49
}
92
50
93
51
FDeploymentInfo Parse (const Worker_Alpha_LoginTokenDetails LoginToken)
@@ -137,12 +95,19 @@ void ADeploymentsPlayerController::Populate(const Worker_Alpha_LoginTokensRespon
137
95
138
96
void ADeploymentsPlayerController::JoinDeployment (const FString& LoginToken)
139
97
{
98
+ if (SpatialWorkerConnection == nullptr )
99
+ {
100
+ UE_LOG (LogGDK, Error, TEXT (" Failure: failed to Join Deployment caused by SpatialWorkerConnection is nullptr" ));
101
+ return ;
102
+ }
103
+
104
+ const FLocatorConfig& LocatorConfig = SpatialWorkerConnection->LocatorConfig ;
140
105
FURL TravelURL;
141
- TravelURL.Host = TEXT ( " locator.improbable.io " ) ;
106
+ TravelURL.Host = LocatorConfig. LocatorHost ;
142
107
TravelURL.AddOption (TEXT (" locator" ));
143
- TravelURL.AddOption (*FString::Printf (TEXT (" playeridentity=%s" ), *LatestPIToken ));
108
+ TravelURL.AddOption (*FString::Printf (TEXT (" playeridentity=%s" ), *LocatorConfig. PlayerIdentityToken ));
144
109
TravelURL.AddOption (*FString::Printf (TEXT (" login=%s" ), *LoginToken));
145
-
110
+
146
111
OnLoadingStarted.Broadcast ();
147
112
148
113
ClientTravel (TravelURL.ToString (), TRAVEL_Absolute, false );
@@ -152,3 +117,9 @@ void ADeploymentsPlayerController::SetLoadingScreen(UUserWidget* LoadingScreen)
152
117
{
153
118
GetGameInstance ()->GetGameViewportClient ()->AddViewportWidgetContent (LoadingScreen->TakeWidget ());
154
119
}
120
+
121
+ void ADeploymentsPlayerController::ScheduleRefreshDeployments ()
122
+ {
123
+ if (SpatialWorkerConnection != nullptr )
124
+ SpatialWorkerConnection->RequestDeploymentLoginTokens ();
125
+ }
0 commit comments