Assets/_MolcaDT/Code/Scripts/Network/NetworkManager.csAssets/_MolcaDT/Code/Scripts/Network/TokenRenewalManager.csAssets/_MolcaDT/Code/Scripts/JsonMapping/JsonMappingEvaluator.cs
When to use
Use this page when integrating machine data endpoints/streams and binding JSON payloads to DT panel data models.Request pipeline (high-level)
NetworkManager exposes coroutine-based HTTP helpers (PostDataCoroutine, PutDataCoroutine, etc.) and attaches auth headers from DT dynamic module setup. It also retries through token-renewal flow when expiration is detected.
Mapping flow
JsonMappingEvaluator.BuildWrapper(JsonMappingAsset mapping, Dictionary<string, object> flat) walks mapping.fields. For each FieldMapping, it looks up flat[f.displayName] (not the JSON path alone unless your flatten step uses the same string as displayName). It fills allData, then categoryData / uniqueCategoryData for panel consumers.
APIMapperInvokerBase (and machine-specific invokers) resolve URLs from DigitalTwinDynamicModule.UrlDatum, call NetworkManager coroutines, parse JSON into a flat dictionary, then run JsonMappingEvaluator and raise onDataReceived (full, raw, per-FieldCategory, per unique key).
Code
Manual POST (matchesNetworkManager.PostDataCoroutine contract: success → (url, responseBody, true), failure → (url, errorMessage, false)):
Dictionary<string, object> aligned to FieldMapping.displayName keys):
NetworkManager.ConnectToSSE(url, onChunk, filterEvent) streams lines; token refresh can abort and retry the stream when TokenRenewalManager detects expiry patterns.
Troubleshooting
- 401 / auth errors — Ensure login populated
NetworkManager.instance.CurrentAuth;DigitalTwinDynamicModule.SetupAuth()returns a bearer header; configureTokenRenewalManager.tokenExpiredKeywordsoIsTokenExpiredmatches your API’s error body. UsebypassRefreshTokenonly for isolated tests. - SSL / certificate errors in dev — Requests use
BypassCertificate(always validates true); prefer proper certs for production builds. - Mapping rows missing or null — Flatten JSON so keys equal
FieldMapping.displayNamein theJsonMappingAsset; empty slots meanTryGetValuemissed that key. - Panel callbacks silent — In
OnDataReceived, wireonFullDataReceived,categoryEvents, oruniqueCategoryEvents;APIMapperInvokerBasecaches category hooks fromFieldCategoryduringSyncConfiguration. - POST body ignored — Set
httpMethodto POST on the invoker and fillpostBodyData(seeAPIMapperInvokerBase).
Related
- DT startup flow
- DT POI and panels
- HttpClient (only if your DT fork shares Core networking for some paths)