44#include " Async/Async.h"
55#include " Camera/CameraTypes.h"
66#include " Camera/PlayerCameraManager.h"
7+ #include " Cesium3DTilesSelection/CesiumIonTilesetContentLoaderFactory.h"
78#include " Cesium3DTilesSelection/EllipsoidTilesetLoader.h"
9+ #include " Cesium3DTilesSelection/IModelMeshExportContentLoaderFactory.h"
10+ #include " Cesium3DTilesSelection/ITwinCesiumCuratedContentLoaderFactory.h"
11+ #include " Cesium3DTilesSelection/ITwinRealityDataContentLoaderFactory.h"
812#include " Cesium3DTilesSelection/Tile.h"
913#include " Cesium3DTilesSelection/TilesetLoadFailureDetails.h"
1014#include " Cesium3DTilesSelection/TilesetOptions.h"
1115#include " Cesium3DTilesSelection/TilesetSharedAssetSystem.h"
12- #include " Cesium3DTilesSelection/CesiumIonTilesetContentLoaderFactory.h"
13- #include " Cesium3DTilesSelection/IModelMeshExportContentLoaderFactory.h"
14- #include " Cesium3DTilesSelection/ITwinCesiumCuratedContentLoaderFactory.h"
15- #include " Cesium3DTilesSelection/ITwinRealityDataContentLoaderFactory.h"
1616#include " Cesium3DTilesetLoadFailureDetails.h"
1717#include " Cesium3DTilesetRoot.h"
1818#include " CesiumActors.h"
@@ -473,14 +473,15 @@ void ACesium3DTileset::SetITwinID(const FString& InITwinID) {
473473 }
474474}
475475
476- void ACesium3DTileset::SetITwinAccessToken (const FString& InAccessToken) {
477- if (this ->ITwinAccessToken != InAccessToken) {
476+ void ACesium3DTileset::SetITwinConnection (
477+ UCesiumITwinConnection* InConnection) {
478+ if (this ->ITwinConnection != InConnection) {
478479 if (this ->TilesetSource == ETilesetSource::FromITwinCesiumCuratedContent ||
479480 this ->TilesetSource == ETilesetSource::FromIModelMeshExportService ||
480481 this ->TilesetSource == ETilesetSource::FromITwinRealityData) {
481482 this ->DestroyTileset ();
482483 }
483- this ->ITwinAccessToken = InAccessToken ;
484+ this ->ITwinConnection = InConnection ;
484485 }
485486}
486487
@@ -1196,7 +1197,9 @@ void ACesium3DTileset::LoadTileset() {
11961197 externals,
11971198 Cesium3DTilesSelection::ITwinCesiumCuratedContentLoaderFactory (
11981199 static_cast <uint32_t >(this ->ITwinCesiumContentID ),
1199- TCHAR_TO_UTF8 (*this ->ITwinAccessToken )),
1200+ this ->ITwinConnection ->GetConnection ()
1201+ ->getAccessToken ()
1202+ .getToken ()),
12001203 options);
12011204 break ;
12021205 case ETilesetSource::FromIModelMeshExportService:
@@ -1211,7 +1214,9 @@ void ACesium3DTileset::LoadTileset() {
12111214 Cesium3DTilesSelection::IModelMeshExportContentLoaderFactory (
12121215 TCHAR_TO_UTF8 (*this ->IModelID ),
12131216 std::nullopt ,
1214- TCHAR_TO_UTF8 (*this ->ITwinAccessToken )),
1217+ this ->ITwinConnection ->GetConnection ()
1218+ ->getAccessToken ()
1219+ .getToken ()),
12151220 options);
12161221 break ;
12171222 case ETilesetSource::FromITwinRealityData:
@@ -1228,9 +1233,33 @@ void ACesium3DTileset::LoadTileset() {
12281233 this ->ITwinID .IsEmpty () ? std::nullopt
12291234 : std::make_optional<std::string>(
12301235 TCHAR_TO_UTF8 (*this ->ITwinID )),
1231- TCHAR_TO_UTF8 (*this ->ITwinAccessToken ),
1232- [asyncSystem](const std::string&) {
1233- return asyncSystem.createResolvedFuture <CesiumUtility::Result<std::string>>(CesiumUtility::Result<std::string>(std::string{}));
1236+ this ->ITwinConnection ->GetConnection ()->getAccessToken ().getToken (),
1237+ [asyncSystem, pConnection = this ->ITwinConnection ->GetConnection ()](
1238+ const std::string&) {
1239+ if (!pConnection->getRefreshToken ()) {
1240+ return asyncSystem.createResolvedFuture <
1241+ CesiumUtility::
1242+ Result<std::string>>(CesiumUtility::ErrorList::error (
1243+ " Access token for reality data is expired, no refresh token available." ));
1244+ }
1245+
1246+ return pConnection->me ().thenImmediately (
1247+ [pConnection](
1248+ CesiumUtility::Result<CesiumITwinClient::UserProfile>&&
1249+ result) -> CesiumUtility::Result<std::string> {
1250+ if (!result.value ) {
1251+ return CesiumUtility::Result<std::string>(result.errors );
1252+ }
1253+
1254+ if (!pConnection->getAccessToken ().isValid ()) {
1255+ return CesiumUtility::Result<
1256+ std::string>(CesiumUtility::ErrorList::error (
1257+ " Tried to refresh access token for reality data, but was not able to obtain valid token." ));
1258+ }
1259+
1260+ return CesiumUtility::Result<std::string>(
1261+ pConnection->getAccessToken ().getToken ());
1262+ });
12341263 }),
12351264 options);
12361265 break ;
@@ -2346,7 +2375,7 @@ void ACesium3DTileset::PostEditChangeProperty(
23462375 PropName == GET_MEMBER_NAME_CHECKED (ACesium3DTileset, IModelID) ||
23472376 PropName == GET_MEMBER_NAME_CHECKED (ACesium3DTileset, RealityDataID) ||
23482377 PropName == GET_MEMBER_NAME_CHECKED (ACesium3DTileset, ITwinID) ||
2349- PropName == GET_MEMBER_NAME_CHECKED (ACesium3DTileset, ITwinAccessToken ) ||
2378+ PropName == GET_MEMBER_NAME_CHECKED (ACesium3DTileset, ITwinConnection ) ||
23502379 PropName ==
23512380 GET_MEMBER_NAME_CHECKED (ACesium3DTileset, CreatePhysicsMeshes) ||
23522381 PropName ==
0 commit comments