@@ -85,6 +85,7 @@ void UPubnubSubsystem::DeinitPubnub()
85
85
ChannelSubscriptions.Empty ();
86
86
ChannelGroupSubscriptions.Empty ();
87
87
IsUserIDSet = false ;
88
+ delete[] AuthTokenBuffer;
88
89
}
89
90
90
91
void UPubnubSubsystem::SetUserID (FString UserID)
@@ -523,12 +524,16 @@ void UPubnubSubsystem::SetAuthToken(FString Token)
523
524
if (!CheckIsUserIDSet ())
524
525
{return ;}
525
526
526
- if (CheckIsFieldEmpty (Token, " Token" , " SetAuthToken" ))
527
- {return ;}
528
-
529
- FUTF8StringHolder TokenHolder (Token);
527
+ // Auth token has to be kept alive for the lifetime of the sdk, so we copy it into AuthTokenBuffer
528
+ FTCHARToUTF8 Converter (*Token);
529
+ AuthTokenLength = Converter.Length ();
530
+ delete[] AuthTokenBuffer;
531
+ AuthTokenBuffer = new char [AuthTokenLength + 1 ];
532
+ FMemory::Memcpy (AuthTokenBuffer, Converter.Get (), AuthTokenLength);
533
+ AuthTokenBuffer[AuthTokenLength] = ' \0 ' ;
534
+
530
535
// This is just a setter, so no need to call it on a separate thread
531
- pubnub_set_auth_token (ctx_pub, TokenHolder. Get () );
536
+ pubnub_set_auth_token (ctx_pub, AuthTokenBuffer );
532
537
}
533
538
534
539
void UPubnubSubsystem::FetchHistory (FString Channel, FOnFetchHistoryResponse OnFetchHistoryResponse, FPubnubFetchHistorySettings FetchHistorySettings)
@@ -1404,29 +1409,6 @@ void UPubnubSubsystem::PubnubResponseError(pubnub_res PubnubResponse, FString Er
1404
1409
});
1405
1410
}
1406
1411
1407
- void UPubnubSubsystem::PubnubPublishError ()
1408
- {
1409
- FString FinalErrorMessage;
1410
- if (ctx_pub == nullptr )
1411
- {
1412
- FinalErrorMessage = " Can't publish message. Publish context is invalid" ;
1413
- }
1414
-
1415
- FString PublishError (pubnub_last_publish_result (ctx_pub));
1416
- FinalErrorMessage = FString::Printf (TEXT (" Publish message failed. Error: %s." ), *PublishError);
1417
-
1418
- // Log and broadcast error
1419
- UE_LOG (PubnubLog, Error, TEXT (" %s" ), *FinalErrorMessage);
1420
-
1421
- // Errors has to be broadcasted on GameThread, otherwise engine will crash if someone uses them for example with widgets
1422
- AsyncTask (ENamedThreads::GameThread, [this , FinalErrorMessage]()
1423
- {
1424
- // Broadcast bound delegate with JsonResponse
1425
- OnPubnubError.Broadcast (FinalErrorMessage, EPubnubErrorType::PET_Error);
1426
- OnPubnubErrorNative.Broadcast (FinalErrorMessage, EPubnubErrorType::PET_Error);
1427
- });
1428
- }
1429
-
1430
1412
void UPubnubSubsystem::LoadPluginSettings ()
1431
1413
{
1432
1414
// Save all settings
@@ -1629,10 +1611,6 @@ void UPubnubSubsystem::PublishMessage_priv(FString Channel, FString Message, FOn
1629
1611
PublishedMessage.MessageType = EPubnubMessageType::PMT_Published;
1630
1612
PublishedMessage.CustomMessageType = PublishSettings.CustomMessageType ;
1631
1613
}
1632
- else
1633
- {
1634
- PubnubPublishError ();
1635
- }
1636
1614
1637
1615
// Delegate needs to be executed back on Game Thread
1638
1616
AsyncTask (ENamedThreads::GameThread, [this , OnPublishMessageResponse, PublishResult, PublishedMessage]()
@@ -1683,10 +1661,6 @@ void UPubnubSubsystem::Signal_priv(FString Channel, FString Message, FOnSignalRe
1683
1661
SignalMessage.MessageType = EPubnubMessageType::PMT_Signal;
1684
1662
SignalMessage.CustomMessageType = SignalSettings.CustomMessageType ;
1685
1663
}
1686
- else
1687
- {
1688
- PubnubPublishError ();
1689
- }
1690
1664
1691
1665
// Delegate needs to be executed back on Game Thread
1692
1666
AsyncTask (ENamedThreads::GameThread, [this , OnSignalResponse, PublishResult, SignalMessage]()
0 commit comments