Skip to main content
Scripts:
  • Assets/_MolcaDT/Code/Scripts/Network/NetworkManager.cs
  • Assets/_MolcaDT/Code/Scripts/Network/TokenRenewalManager.cs
  • Assets/_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 (matches NetworkManager.PostDataCoroutine contract: success → (url, responseBody, true), failure → (url, errorMessage, false)):
Mapping-only (after you already have a Dictionary<string, object> aligned to FieldMapping.displayName keys):
SSENetworkManager.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; configure TokenRenewalManager.tokenExpiredKeyword so IsTokenExpired matches your API’s error body. Use bypassRefreshToken only 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.displayName in the JsonMappingAsset; empty slots mean TryGetValue missed that key.
  • Panel callbacks silent — In OnDataReceived, wire onFullDataReceived, categoryEvents, or uniqueCategoryEvents; APIMapperInvokerBase caches category hooks from FieldCategory during SyncConfiguration.
  • POST body ignored — Set httpMethod to POST on the invoker and fill postBodyData (see APIMapperInvokerBase).