Skip to content

Commit b1eaefc

Browse files
Updated from pipeline, Version : 17.0.2
1 parent 6773475 commit b1eaefc

18 files changed

+216
-68
lines changed

.variables

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
export LEVEL=CRITICAL
22
export REPO_NAME=justice-unreal-sdk-plugin
3-
export WORKDIR=/tmp/pipelines/3094756391/652507476/
4-
export COMMIT_HASH=2eea9e61f4be188fa3d4490fd5335e9a8405df2d
5-
export GIT_HASH=2eea9e61f4be188fa3d4490fd5335e9a8405df2d
6-
export VERSION=17.0.1
7-
export REVISION_ID=17.0.1
3+
export WORKDIR=/tmp/pipelines/3121776487/657457776/
4+
export COMMIT_HASH=413076fbe80fa7de5a91e878f8c7f9bc244396c1
5+
export GIT_HASH=413076fbe80fa7de5a91e878f8c7f9bc244396c1
6+
export VERSION=17.0.2
7+
export REVISION_ID=17.0.2
88
9-
export COMMIT_MESSAGE_BASE64='Y2hvcmUocmVsZWFzZSk6IDE3LjAuMSAtIGNvbW1pdGVkIGFuZCB0YWdnZWQgYnkgSmVua2lucwo='
9+
export COMMIT_MESSAGE_BASE64='Y2hvcmUocmVsZWFzZSk6IDE3LjAuMiAtIGNvbW1pdGVkIGFuZCB0YWdnZWQgYnkgSmVua2lucwo='

AccelByteUe4Sdk.uplugin

-1.12 KB
Binary file not shown.

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
### [17.0.2](https://bitbucket.org/accelbyte/justice-unreal-sdk-plugin/branches/compare/17.0.2%0D17.0.1) (2022-10-04)
6+
7+
8+
### Features
9+
10+
* **ban:** automatic token refresh when the ban has ended ([0282a3b](https://bitbucket.org/accelbyte/justice-unreal-sdk-plugin/commits/0282a3bfc90e8410c979bdc8a7c49bcdbf209c2c))
11+
12+
13+
### Bug Fixes
14+
15+
* wrong headers included in the source ([51835a2](https://bitbucket.org/accelbyte/justice-unreal-sdk-plugin/commits/51835a20507267d11c5f33f0ba58b876444ee21b))
16+
517
### [17.0.1](https://bitbucket.org/accelbyte/justice-unreal-sdk-plugin/branches/compare/17.0.1%0D17.0.0) (2022-09-28)
618

719
## [17.0.0](https://bitbucket.org/accelbyte/justice-unreal-sdk-plugin/branches/compare/17.0.0%0D16.2.1) (2022-09-27)

Content/CompatibilityMap.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
"maxVersion": "2.5.4"
3737
},
3838
"lobby": {
39-
"minVersion": "3.11.8",
40-
"maxVersion": "3.11.8"
39+
"minVersion": "3.11.9",
40+
"maxVersion": "3.11.9"
4141
},
4242
"group": {
4343
"minVersion": "2.11.7",

Source/AccelByteUe4Sdk/Private/Api/AccelByteLobbyApi.cpp

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,8 @@ void Lobby::Disconnect(bool ForceCleanup)
462462
FReport::Log(FString(__FUNCTION__));
463463

464464
ChannelSlug = "";
465-
CredentialsRef.OnTokenRefreshed().Remove(RefreshTokenDelegate.GetHandle());
465+
CredentialsRef.OnTokenRefreshed().Remove(TokenRefreshDelegateHandle);
466+
TokenRefreshDelegateHandle.Reset();
466467
if(WebSocket.IsValid())
467468
{
468469
WebSocket->Disconnect(ForceCleanup);
@@ -1515,7 +1516,18 @@ void Lobby::OnConnected()
15151516
{
15161517
UE_LOG(LogAccelByteLobby, Display, TEXT("Connected"));
15171518

1518-
CredentialsRef.OnTokenRefreshed().Add(RefreshTokenDelegate);
1519+
TokenRefreshDelegateHandle = CredentialsRef.OnTokenRefreshed().AddLambda(
1520+
[this](bool bSuccess)
1521+
{
1522+
if (bSuccess)
1523+
{
1524+
RefreshToken(CredentialsRef.GetAccessToken());
1525+
}
1526+
else
1527+
{
1528+
Disconnect(true);
1529+
}
1530+
});
15191531

15201532
ConnectSuccess.ExecuteIfBound();
15211533
}
@@ -1533,7 +1545,8 @@ void Lobby::OnClosed(int32 StatusCode, const FString& Reason, bool WasClean)
15331545
Disconnect();
15341546
}
15351547

1536-
CredentialsRef.OnTokenRefreshed().Remove(RefreshTokenDelegate.GetHandle());
1548+
CredentialsRef.OnTokenRefreshed().Remove(TokenRefreshDelegateHandle);
1549+
TokenRefreshDelegateHandle.Reset();
15371550

15381551
BanNotifReceived = false;
15391552
UE_LOG(LogAccelByteLobby, Display, TEXT("Connection closed. Status code: %d Reason: %s Clean: %d"), StatusCode, *Reason, WasClean);
@@ -2173,13 +2186,53 @@ void Lobby::HandleMessageNotif(const FString& ReceivedMessageType, const FString
21732186
{
21742187
BanNotifReceived = true;
21752188
FAccelByteModelsUserBannedNotification Result;
2176-
CredentialsRef.OnTokenRefreshed().Remove(RefreshTokenDelegate.GetHandle());
2177-
if (const bool bParseSuccess = FJsonObjectConverter::JsonObjectStringToUStruct(ParsedJsonString, &Result, 0, 0))
2189+
//CredentialsRef.OnTokenRefreshed().Remove(TokenRefreshDelegateHandle);
2190+
if (FJsonObjectConverter::JsonObjectStringToUStruct(ParsedJsonString, &Result, 0, 0))
21782191
{
2179-
HttpRef.BearerAuthRejected();
2192+
if (Result.UserId == CredentialsRef.GetUserId())
2193+
{
2194+
HttpRef.BearerAuthRejected();
2195+
}
2196+
21802197
if (ReceivedMessageType.Equals(LobbyResponse::UserBannedNotification))
21812198
{
21822199
UserBannedNotification.ExecuteIfBound(Result);
2200+
2201+
const int64 UtcNow = FDateTime::UtcNow().ToUnixTimestamp();
2202+
FDateTime BanEndDate{0};
2203+
FDateTime::ParseIso8601(*Result.EndDate, BanEndDate);
2204+
float BanDuration = BanEndDate.ToUnixTimestamp() - UtcNow;
2205+
double ScheduledTime = FPlatformTime::Seconds() + BanDuration;
2206+
2207+
FString Key = FString::Printf(TEXT("%s-%s"), *Result.UserId, *FAccelByteUtilities::GetUEnumValueAsString(Result.Ban));
2208+
2209+
FUnbanScheduleRef* Schedule = UnbanSchedules.Find(Key);
2210+
if (!Schedule || ScheduledTime < (*Schedule)->ScheduledTime)
2211+
{
2212+
if (Schedule)
2213+
{
2214+
FTickerAlias::GetCoreTicker().RemoveTicker((*Schedule)->DelegateHandle);
2215+
UnbanSchedules.Remove(Key);
2216+
}
2217+
2218+
TSharedRef<FAccelByteModelsUserBannedNotification> Data = MakeShared<FAccelByteModelsUserBannedNotification>(Result);
2219+
FUnbanScheduleRef NewSchedule = MakeShared<FUnbanSchedule>();
2220+
NewSchedule->DelegateHandle = FTickerAlias::GetCoreTicker().AddTicker(FTickerDelegate::CreateLambda(
2221+
[this, Data, ScheduledTime](float DeltaTime)
2222+
{
2223+
double CurrentTime = FPlatformTime::Seconds();
2224+
if (CurrentTime >= ScheduledTime)
2225+
{
2226+
Data->Enable = false;
2227+
UserUnbannedNotification.ExecuteIfBound(*Data);
2228+
return false;
2229+
}
2230+
return true;
2231+
})
2232+
, 0.2f);
2233+
NewSchedule->ScheduledTime = ScheduledTime;
2234+
UnbanSchedules.Add(Key, NewSchedule);
2235+
}
21832236
}
21842237
else if (ReceivedMessageType.Equals(LobbyResponse::UserUnbannedNotification))
21852238
{

Source/AccelByteUe4Sdk/Private/Core/AccelByteApiClient.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,15 @@ FApiClient::~FApiClient()
3333

3434
if (!bUseSharedCredentials)
3535
{
36-
CredentialsRef->Shutdown();
37-
HttpRef->Shutdown();
36+
FFunctionGraphTask::CreateAndDispatchWhenReady(
37+
[Credentials=CredentialsRef, HttpScheduler=HttpRef]()
38+
{
39+
Credentials->Shutdown();
40+
HttpScheduler->Shutdown();
41+
}
42+
, TStatId()
43+
, nullptr
44+
, ENamedThreads::GameThread);
3845
}
3946
}
4047

Source/AccelByteUe4Sdk/Private/Core/AccelByteCredentials.cpp

Lines changed: 61 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,26 @@ const FString& Credentials::GetOAuthClientSecret() const
9696

9797
void Credentials::SetAuthToken(const FOauth2Token NewAuthToken, float CurrentTime)
9898
{
99-
UserSessionExpire = CurrentTime + (NewAuthToken.Expires_in*FMath::FRandRange(0.7, 0.9));
100-
UserRefreshTime = UserSessionExpire;
99+
UserSessionExpire = CurrentTime + (NewAuthToken.Expires_in * FMath::FRandRange(0.7, 0.9));
100+
101+
double BanExpire = DBL_MAX;
102+
const int64 UtcNowTimestamp = FDateTime::UtcNow().ToUnixTimestamp();
103+
for (auto& Ban : NewAuthToken.Bans)
104+
{
105+
const int64 BanEndTimestamp = Ban.EndDate.ToUnixTimestamp();
106+
if (!Ban.Enabled || BanEndTimestamp < UtcNowTimestamp)
107+
{
108+
continue;
109+
}
110+
111+
const double BanDuration = CurrentTime + (BanEndTimestamp - UtcNowTimestamp);
112+
if (BanDuration < BanExpire)
113+
{
114+
BanExpire = BanDuration;
115+
}
116+
}
117+
118+
UserRefreshTime = UserSessionExpire < BanExpire ? UserSessionExpire : BanExpire;
101119
AuthToken = NewAuthToken;
102120
UserSessionState = ESessionState::Valid;
103121
}
@@ -193,39 +211,40 @@ void Credentials::PollRefreshToken(double CurrentTime)
193211
case ESessionState::Valid:
194212
if (UserRefreshTime <= CurrentTime)
195213
{
196-
Oauth2::GetTokenWithRefreshToken(
197-
ClientId, ClientSecret,
198-
AuthToken.Refresh_token,
199-
THandler<FOauth2Token>::CreateLambda([this, CurrentTime](const FOauth2Token& Result)
200-
{
201-
SetAuthToken(Result, CurrentTime);
202-
if (RefreshTokenAdditionalActions.IsBound())
214+
Oauth2::GetTokenWithRefreshToken(ClientId, ClientSecret
215+
, AuthToken.Refresh_token
216+
, THandler<FOauth2Token>::CreateLambda([this](const FOauth2Token& Result)
203217
{
204-
RefreshTokenAdditionalActions.Broadcast();
205-
RefreshTokenAdditionalActions.Clear();
206-
}
207-
208-
TokenRefreshedEvent.Broadcast();
209-
}),
210-
FErrorHandler::CreateLambda([this, CurrentTime](int32 ErrorCode, const FString& ErrorMessage)
211-
{
212-
if (UserRefreshBackoff <= 0.0)
218+
SetAuthToken(Result, FPlatformTime::Seconds());
219+
if (RefreshTokenAdditionalActions.IsBound())
220+
{
221+
RefreshTokenAdditionalActions.Broadcast(true);
222+
RefreshTokenAdditionalActions.Clear();
223+
}
224+
225+
TokenRefreshedEvent.Broadcast(true);
226+
})
227+
, FErrorHandler::CreateLambda([this](int32 ErrorCode, const FString& ErrorMessage)
213228
{
214-
UserRefreshBackoff = 10.0;
215-
}
216-
217-
UserRefreshBackoff *= 2.0;
218-
UserRefreshBackoff += FMath::FRandRange(1.0, 60.0);
219-
ScheduleRefreshToken(CurrentTime + UserRefreshBackoff);
220-
221-
if (RefreshTokenAdditionalActions.IsBound())
222-
{
223-
RefreshTokenAdditionalActions.Broadcast();
224-
RefreshTokenAdditionalActions.Clear();
225-
}
226-
227-
UserSessionState = ESessionState::Expired;
228-
}));
229+
if (UserRefreshBackoff <= 0.0)
230+
{
231+
UserRefreshBackoff = 10.0;
232+
}
233+
234+
UserRefreshBackoff *= 2.0;
235+
UserRefreshBackoff += FMath::FRandRange(1.0, 60.0);
236+
ScheduleRefreshToken(FPlatformTime::Seconds() + UserRefreshBackoff);
237+
238+
if (RefreshTokenAdditionalActions.IsBound())
239+
{
240+
RefreshTokenAdditionalActions.Broadcast(false);
241+
RefreshTokenAdditionalActions.Clear();
242+
}
243+
244+
UserSessionState = ESessionState::Expired;
245+
TokenRefreshedEvent.Broadcast(false);
246+
})
247+
);
229248

230249
UserSessionState = ESessionState::Refreshing;
231250
}
@@ -286,10 +305,16 @@ void Credentials::BearerAuthRejectedRefreshToken(FHttpRetryScheduler& HttpRef)
286305
UE_LOG(LogAccelByteCredentials, Verbose, TEXT("BearerAuthRejectedRefreshToken"));
287306
HttpRef.PauseBearerAuthRequest();
288307

289-
RefreshTokenAdditionalActions.Add(FVoidHandler::CreateLambda([&]()
308+
RefreshTokenAdditionalActions.AddLambda([&](bool bSuccess)
290309
{
291-
HttpRef.ResumeBearerAuthRequest(GetAccessToken());
292-
}));
310+
FString UpdatedToken = TEXT("");
311+
if (bSuccess)
312+
{
313+
UpdatedToken = GetAccessToken();
314+
}
315+
316+
HttpRef.ResumeBearerAuthRequest(UpdatedToken);
317+
});
293318

294319
ScheduleRefreshToken(FPlatformTime::Seconds());
295320
}

Source/AccelByteUe4Sdk/Private/Core/AccelByteHttpRetryScheduler.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,24 @@ void FHttpRetryScheduler::PauseBearerAuthRequest()
126126
{
127127
UE_LOG(LogAccelByteHttpRetry, Verbose, TEXT("HTTP Retry Scheduler PAUSED"));
128128
State = EState::Paused;
129+
TQueue<FAccelByteTaskPtr, EQueueMode::Spsc> TempQueue;
130+
131+
while (FAccelByteTaskPtr *TaskPtr = TaskQueue.Peek())
132+
{
133+
FAccelByteTaskPtr Task = *TaskPtr;
134+
135+
TaskQueue.Pop();
136+
Task->Pause();
137+
TempQueue.Enqueue(Task);
138+
}
139+
140+
while (FAccelByteTaskPtr *TaskPtr = TempQueue.Peek())
141+
{
142+
FAccelByteTaskPtr Task = *TaskPtr;
143+
144+
TempQueue.Pop();
145+
TaskQueue.Enqueue(Task);
146+
}
129147
}
130148

131149
void FHttpRetryScheduler::ResumeBearerAuthRequest(const FString& AccessToken)

Source/AccelByteUe4Sdk/Private/Core/AccelByteHttpRetryTask.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ namespace AccelByte
7070
{
7171
if (TaskState != EAccelByteTaskState::Paused)
7272
{
73+
TaskState = EAccelByteTaskState::Paused;
7374
BearerAuthRejectedRefreshHandle = BearerAuthRejectedRefresh.Add(THandler<FString>::CreateLambda([&](const FString& AccessToken)
7475
{
7576
BearerAuthUpdated(AccessToken);
@@ -78,7 +79,7 @@ namespace AccelByte
7879
}
7980
PauseTime = TaskTime;
8081

81-
return EAccelByteTaskState::Paused;
82+
return FAccelByteTask::Pause();
8283
}
8384

8485
void FHttpRetryTask::Tick(double CurrentTime)
@@ -235,18 +236,22 @@ namespace AccelByte
235236
void FHttpRetryTask::BearerAuthUpdated(const FString& AccessToken)
236237
{
237238
bIsBeenRunFromPause = true;
239+
if (TaskState != EAccelByteTaskState::Paused)
240+
{
241+
return;
242+
}
238243

239244
UE_LOG(LogAccelByteHttpRetry, Verbose, TEXT("BearerAuthUpdated"));
240245
if (AccessToken.IsEmpty())
241246
{
242-
UE_LOG(LogAccelByteHttpRetry, Verbose, TEXT("Bearer token is empty, Task is canceled"));
247+
UE_LOG(LogAccelByteHttpRetry, Verbose, TEXT("Bearer token is empty, Task will be canceled"));
243248
Cancel();
244249
return;
245250
}
246251
FString Authorization = FString::Printf(TEXT("Bearer %s"), *AccessToken);
247252
Request->SetHeader(TEXT("Authorization"), Authorization);
248253

249-
UE_LOG(LogAccelByteHttpRetry, Verbose, TEXT("Bearer token is empty, Task is canceled"));
254+
UE_LOG(LogAccelByteHttpRetry, Verbose, TEXT("Bearer token updated, Task will be resumed"));
250255
TaskState = EAccelByteTaskState::Retrying;
251256
NextRetryTime = FPlatformTime::Seconds();
252257
}

Source/AccelByteUe4Sdk/Private/Core/AccelByteHttpRetryTask.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace AccelByte
3030
virtual bool Finish() override;
3131
bool FinishFromCached(const FHttpResponsePtr& Response);
3232

33-
EAccelByteTaskState Pause();
33+
virtual EAccelByteTaskState Pause() override;
3434

3535
FHttpRequestPtr GetHttpRequest() const { return Request; };
3636

0 commit comments

Comments
 (0)