Skip to content
Snippets Groups Projects

Fix/cluster event wrapper

Merged Jonathan Ehret requested to merge fix/cluster-event-wrapper into dev/5.3
@@ -24,9 +24,10 @@ public:
@@ -24,9 +24,10 @@ public:
void Attach(ObjectType* NewObject)
void Attach(ObjectType* NewObject)
{
{
 
checkf(Object == nullptr, TEXT("The event is already attached."));
checkf(Object == nullptr, TEXT("The event is already attached."));
Object = NewObject;
Object = NewObject;
ObjectId = Object->GetUniqueID();
ObjectName = Object->GetFullName();
EDisplayClusterOperationMode OperationMode = IDisplayCluster::Get().GetOperationMode();
EDisplayClusterOperationMode OperationMode = IDisplayCluster::Get().GetOperationMode();
if (OperationMode == EDisplayClusterOperationMode::Cluster)
if (OperationMode == EDisplayClusterOperationMode::Cluster)
@@ -45,10 +46,10 @@ public:
@@ -45,10 +46,10 @@ public:
FMemoryReader MemoryReader(Event.EventData);
FMemoryReader MemoryReader(Event.EventData);
uint32 EventObjectId;
FString EventObjectName;
// This reads the value!
// This reads the value!
MemoryReader << EventObjectId;
MemoryReader << EventObjectName;
if (EventObjectId != ObjectId)
if (EventObjectName != ObjectName)
{
{
// Event does not belong to this object.
// Event does not belong to this object.
return;
return;
@@ -70,7 +71,7 @@ public:
@@ -70,7 +71,7 @@ public:
// This call will deserialze the values and fill all values in the tuple appropriately.
// This call will deserialze the values and fill all values in the tuple appropriately.
FillArgumentTuple<0>(&MemoryReader, &ArgumentTuple);
FillArgumentTuple<0>(&MemoryReader, &ArgumentTuple);
ArgumentTuple.ApplyBefore([this](const ArgTypes&... Arguments)
ArgumentTuple.ApplyBefore([this](const ArgTypes&... Arguments)
{ (Object->*MemberFunction)(Forward<const ArgTypes&>(Arguments)...); });
{ (Object->*MemberFunction)(Forward<const ArgTypes&>(Arguments)...); });
});
});
@@ -100,6 +101,7 @@ public:
@@ -100,6 +101,7 @@ public:
EDisplayClusterOperationMode OperationMode = IDisplayCluster::Get().GetOperationMode();
EDisplayClusterOperationMode OperationMode = IDisplayCluster::Get().GetOperationMode();
if (OperationMode != EDisplayClusterOperationMode::Cluster)
if (OperationMode != EDisplayClusterOperationMode::Cluster)
{
{
 
// Cluster event can be bypassed and function directly called
(Object->*MemberFunction)(Forward<ArgTypes>(Arguments)...);
(Object->*MemberFunction)(Forward<ArgTypes>(Arguments)...);
}
}
else
else
@@ -112,7 +114,7 @@ public:
@@ -112,7 +114,7 @@ public:
ClusterEvent.bShouldDiscardOnRepeat = false;
ClusterEvent.bShouldDiscardOnRepeat = false;
FMemoryWriter MemoryWriter(ClusterEvent.EventData);
FMemoryWriter MemoryWriter(ClusterEvent.EventData);
MemoryWriter << ObjectId;
MemoryWriter << const_cast<FString&>(ObjectName);
MemoryWriter << const_cast<FString&>(MethodName);
MemoryWriter << const_cast<FString&>(MethodName);
SerializeParameters(&MemoryWriter, Forward<ArgTypes>(Arguments)...);
SerializeParameters(&MemoryWriter, Forward<ArgTypes>(Arguments)...);
@@ -122,7 +124,7 @@ public:
@@ -122,7 +124,7 @@ public:
private:
private:
const FString MethodName;
const FString MethodName;
uint32 ObjectId;
FString ObjectName;
ObjectType* Object = nullptr;
ObjectType* Object = nullptr;
FOnClusterEventBinaryListener ClusterEventListenerDelegate;
FOnClusterEventBinaryListener ClusterEventListenerDelegate;
};
};
Loading