Skip to main content
File: Assets/_Molca/_Core/Networking/Data/DataManager.cs

When to use

Use DataManager instead of one-off HttpClient calls when you need:
  • Persistent data providers that continuously feed data (HTTP polling, SSE, WebSocket patterns).
  • Centralized caching with configurable duration and max size per provider.
  • Model subscriptions — get notified when new data arrives for a specific DataModel, with automatic batching to reduce callback frequency.
  • Multiple data sources coordinated through a single gateway with provider registration/deregistration.
For simple one-shot API calls, prefer HttpClient directly.

API

Provider management

MethodSignatureDescription
RegisterDataProvidervoid RegisterDataProvider(DataProvider provider)Register a provider and initialize its cache
UnregisterDataProvidervoid UnregisterDataProvider(DataProvider provider)Remove a provider and its cache
GetProviderDataProvider GetProvider(string providerId)Get a registered provider by ID
IsProviderActivebool IsProviderActive(string providerId)Check if a provider is registered
GetProviderIdsList<string> GetProviderIds()List all registered provider IDs

Data subscription and access

MethodSignatureDescription
SubscribeToDataModelvoid SubscribeToDataModel(DataModel model, Action<ImmutableData[]> callback)Get batched notifications when data arrives
UnsubscribeFromDataModelvoid UnsubscribeFromDataModel(DataModel model, Action<ImmutableData[]> callback)Stop receiving notifications
GetAllDataIReadOnlyList<ImmutableData> GetAllData(string providerId)Get cached data for a provider
FetchDatabool FetchData(string providerId)Manually trigger a data fetch
RefreshAllDatavoid RefreshAllData()Refresh all active providers
IsDataStalebool IsDataStale(string providerId)Check if cached data exceeds duration
Events: OnDataUpdated, OnDataProviderRegistered, OnDataProviderUnregistered (static event Action).

Code

Subscribe to model updates (recommended for live data):
using Molca;
using Molca.Networking.Data;
using UnityEngine;

public class LiveModelBinder : MonoBehaviour
{
    [SerializeField] private DataModel targetModel;

    private async void Start()
    {
        await RuntimeManager.WaitForInitialization();
        DataManager.Instance?.SubscribeToDataModel(targetModel, OnDataReceived);
    }

    private void OnDestroy()
    {
        DataManager.Instance?.UnsubscribeFromDataModel(targetModel, OnDataReceived);
    }

    private void OnDataReceived(ImmutableData[] batch)
    {
        Debug.Log($"Received {batch.Length} items for model {targetModel.ModelName}");
        foreach (var data in batch)
        {
            // Process each data item
        }
    }
}
Event-based (for generic data change notifications):
private void OnEnable() => DataManager.OnDataUpdated += OnDataUpdated;
private void OnDisable() => DataManager.OnDataUpdated -= OnDataUpdated;

private void OnDataUpdated(string providerId, ImmutableData data)
{
    Debug.Log($"{providerId} updated");
}
Resolve the subsystem: DataManager.Instance (RuntimeManager.GetSubsystem<DataManager>()).

Troubleshooting

  • Subscribed but no callbacks firing: verify the DataModel.ModelId matches between the provider’s mapping and your subscription. Enable DataConfig.LogDataOperations to see subscription/flush logs.
  • Data arrives but view is stale: DataManager batches data into pools flushed every ~100ms. Call FlushAllDataPools() if you need immediate processing. Also confirm you’re subscribing to the correct DataModel instance.
  • Provider not found: RegisterDataProvider must be called before FetchData. Check that the provider’s ProviderId matches and the mapping / DataModel is assigned.
  • Cache grows unbounded: configure DefaultMaxCacheSize and DefaultCacheDuration on the DataConfig module in Global Settings.

Unity Editor

Data Manager Inspector