Skip to content
Snippets Groups Projects
Select Git revision
  • 94a605169acc844d4ad308b40d9ddf4f5c9f0969
  • 5.3 default protected
  • 5.6
  • 5.5 protected
  • 5.4 protected
  • 4.26 protected
  • 4.27 protected
  • 5.1 protected
  • 5.2 protected
  • before-invasion
  • 4.22 protected
  • 4.21 protected
  • 4.22.1 protected
  • 4.22.0 protected
14 results

ClusterSyncedMethodCaller.cpp

Blame
  • ClusterSyncedMethodCaller.cpp 2.10 KiB
    #include "ClusterSyncedMethodCaller.h"
    
    #include "IDisplayCluster.h"
    
    void UClusterSyncedMethodCaller::RegisterListener()
    {
    	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
    	if (ClusterManager && !ClusterEventListenerDelegate.IsBound())
    	{
    		ClusterEventListenerDelegate = FOnClusterEventListener::CreateUObject(this, &UClusterSyncedMethodCaller::HandleClusterEvent);
    		ClusterManager->AddClusterEventListener(ClusterEventListenerDelegate);
    	}
    
    }
    
    void UClusterSyncedMethodCaller::DeregisterListener() {
    	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
    	if (ClusterManager && ClusterEventListenerDelegate.IsBound())
    	{
    		ClusterManager->RemoveClusterEventListener(ClusterEventListenerDelegate);
    	}
    }
    
    void UClusterSyncedMethodCaller::CallMethodSynced(FString UniqueIdentifier, TMap<FString, FString> Parameters)
    {
    
    	check(SyncedFunctions.Contains(UniqueIdentifier))
    
    	IDisplayClusterClusterManager* const Manager = IDisplayCluster::Get().GetClusterMgr();
    	if (Manager)
    	{
    		if (Manager->IsStandalone()) {
    			//in standalone (e.g., desktop editor play) cluster events are not executed....
    			if (SyncedFunctions.Contains(UniqueIdentifier)) {
    				SyncedFunctions.FindChecked(UniqueIdentifier).Execute(Parameters);
    			}
    		}
    		else {
    			// else create a cluster event to react to
    			FDisplayClusterClusterEvent cluster_event;
    			cluster_event.Category = "ClusterSyncedMethodCaller";
    			cluster_event.Type = "ClusterSyncedMethodCaller";
    			cluster_event.Name = UniqueIdentifier;
    			cluster_event.Parameters = Parameters;
    
    			Manager->EmitClusterEvent(cluster_event, true);
    		}
    	}
    }
    
    void UClusterSyncedMethodCaller::RegisterSyncedMethod(FString UniqueIdentifier, FSyncMethod MethodToCall)
    {
    	SyncedFunctions.Add(UniqueIdentifier, MethodToCall);
    }
    
    void UClusterSyncedMethodCaller::HandleClusterEvent(const FDisplayClusterClusterEvent & Event)
    {
    	if (Event.Category.Equals("ClusterSyncedMethodCaller") && Event.Type.Equals("ClusterSyncedMethodCaller")) {
    		if (SyncedFunctions.Contains(Event.Name)) {
    			SyncedFunctions.FindChecked(Event.Name).Execute(Event.Parameters);
    		}
    	}
    }