From cf8872250bdbc40df1202535cbb7d6778926d089 Mon Sep 17 00:00:00 2001 From: Alex Moroz Date: Tue, 9 Jul 2019 14:35:00 +0100 Subject: [PATCH 1/4] Queue RPCs by Worker_EntityId --- .../Source/SpatialGDK/Private/Interop/SpatialReceiver.cpp | 8 ++++---- .../Source/SpatialGDK/Private/Interop/SpatialSender.cpp | 2 +- .../Source/SpatialGDK/Private/Utils/RPCContainer.cpp | 6 +++--- SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialReceiver.cpp b/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialReceiver.cpp index 9329fee66c..84faea6a07 100644 --- a/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialReceiver.cpp +++ b/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialReceiver.cpp @@ -1213,8 +1213,8 @@ void USpatialReceiver::HandleRPC(const Worker_ComponentUpdateOp& Op) UFunction* Function = ClassInfo.RPCs[Payload.Index]; const FRPCInfo& RPCInfo = ClassInfoManager->GetRPCInfo(TargetObject, Function); - if (!IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef, RPCInfo.Type) - && !IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef, ESchemaComponentType::SCHEMA_Invalid)) + if (!IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef.Entity, RPCInfo.Type) + && !IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef.Entity, ESchemaComponentType::SCHEMA_Invalid)) { // Apply if possible, queue otherwise if (ApplyRPC(*Params)) @@ -1642,8 +1642,8 @@ void USpatialReceiver::ProcessQueuedActorRPCsOnEntityCreation(AActor* Actor, RPC const FUnrealObjectRef ObjectRef = PackageMap->GetUnrealObjectRefFromObject(Actor); check(ObjectRef != FUnrealObjectRef::UNRESOLVED_OBJECT_REF); - if (!IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef, RPCInfo.Type) - && !IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef, ESchemaComponentType::SCHEMA_Invalid)) + if (!IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef.Entity, RPCInfo.Type) + && !IncomingRPCs.ObjectHasRPCsQueuedOfType(ObjectRef.Entity, ESchemaComponentType::SCHEMA_Invalid)) { if (ApplyRPC(Actor, Function, RPC, FString())) { diff --git a/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialSender.cpp b/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialSender.cpp index c8a3a8d6cc..298e4da2a2 100644 --- a/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialSender.cpp +++ b/SpatialGDK/Source/SpatialGDK/Private/Interop/SpatialSender.cpp @@ -1362,7 +1362,7 @@ void USpatialSender::ProcessRPC(FPendingRPCParamsPtr Params) const FRPCInfo& RPCInfo = ClassInfoManager->GetRPCInfo(TargetObject.Get(), Function); bool bRPCProcessed = false; - if (!OutgoingRPCs.ObjectHasRPCsQueuedOfType(Params->ObjectRef, RPCInfo.Type)) + if (!OutgoingRPCs.ObjectHasRPCsQueuedOfType(Params->ObjectRef.Entity, RPCInfo.Type)) { if (SendRPC(*Params)) { diff --git a/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp b/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp index 81eb806062..9bb8d44883 100644 --- a/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp +++ b/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp @@ -15,7 +15,7 @@ FPendingRPCParams::FPendingRPCParams(const FUnrealObjectRef& InTargetObjectRef, void FRPCContainer::QueueRPC(FPendingRPCParamsPtr Params, ESchemaComponentType Type) { - FArrayOfParams& ArrayOfParams = QueuedRPCs.FindOrAdd(Type).FindOrAdd(Params->ObjectRef); + FArrayOfParams& ArrayOfParams = QueuedRPCs.FindOrAdd(Type).FindOrAdd(Params->ObjectRef.Entity); ArrayOfParams.Push(MoveTemp(Params)); } @@ -54,12 +54,12 @@ void FRPCContainer::ProcessRPCs(const FProcessRPCDelegate& FunctionToApply) } } -bool FRPCContainer::ObjectHasRPCsQueuedOfType(const FUnrealObjectRef& TargetObjectRef, ESchemaComponentType Type) const +bool FRPCContainer::ObjectHasRPCsQueuedOfType(const Worker_EntityId& EntityId, ESchemaComponentType Type) const { const FRPCMap* MapOfQueues = QueuedRPCs.Find(Type); if(MapOfQueues) { - const FArrayOfParams* RPCList = MapOfQueues->Find(TargetObjectRef); + const FArrayOfParams* RPCList = MapOfQueues->Find(EntityId); if(RPCList) { return (RPCList->Num() > 0); diff --git a/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h b/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h index 801136d58d..82056186f6 100644 --- a/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h +++ b/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h @@ -27,11 +27,11 @@ class FRPCContainer public: void QueueRPC(FPendingRPCParamsPtr Params, ESchemaComponentType Type); void ProcessRPCs(const FProcessRPCDelegate& FunctionToApply); - bool ObjectHasRPCsQueuedOfType(const FUnrealObjectRef& TargetObjectRef, ESchemaComponentType Type) const; + bool ObjectHasRPCsQueuedOfType(const Worker_EntityId& EntityId, ESchemaComponentType Type) const; private: using FArrayOfParams = TArray; - using FRPCMap = TMap; + using FRPCMap = TMap; using RPCContainerType = TMap; void ProcessRPCs(const FProcessRPCDelegate& FunctionToApply, FArrayOfParams& RPCList); From 8dea19dae4847de3746e3164461b08c8cb2bc944 Mon Sep 17 00:00:00 2001 From: aleximprobable <48994762+aleximprobable@users.noreply.github.com> Date: Tue, 9 Jul 2019 15:02:37 +0100 Subject: [PATCH 2/4] Apply suggestions from code review Co-Authored-By: improbable-valentyn <32096431+improbable-valentyn@users.noreply.github.com> --- SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp | 4 ++-- SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp b/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp index 9bb8d44883..498938c25a 100644 --- a/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp +++ b/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp @@ -57,10 +57,10 @@ void FRPCContainer::ProcessRPCs(const FProcessRPCDelegate& FunctionToApply) bool FRPCContainer::ObjectHasRPCsQueuedOfType(const Worker_EntityId& EntityId, ESchemaComponentType Type) const { const FRPCMap* MapOfQueues = QueuedRPCs.Find(Type); - if(MapOfQueues) + if (MapOfQueues) { const FArrayOfParams* RPCList = MapOfQueues->Find(EntityId); - if(RPCList) + if (RPCList) { return (RPCList->Num() > 0); } diff --git a/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h b/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h index 82056186f6..d219456148 100644 --- a/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h +++ b/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h @@ -27,7 +27,7 @@ class FRPCContainer public: void QueueRPC(FPendingRPCParamsPtr Params, ESchemaComponentType Type); void ProcessRPCs(const FProcessRPCDelegate& FunctionToApply); - bool ObjectHasRPCsQueuedOfType(const Worker_EntityId& EntityId, ESchemaComponentType Type) const; + bool ObjectHasRPCsQueuedOfType(Worker_EntityId EntityId, ESchemaComponentType Type) const; private: using FArrayOfParams = TArray; From 1e7ae826fca60caada8e32e9e7f96c962d7cdc44 Mon Sep 17 00:00:00 2001 From: Alex Moroz Date: Tue, 9 Jul 2019 15:19:58 +0100 Subject: [PATCH 3/4] Changed Worker_EntityId to Worker_EntityId_Key for Linux compilation. Fixed function signature --- SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h b/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h index d219456148..5444e31f77 100644 --- a/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h +++ b/SpatialGDK/Source/SpatialGDK/Public/Utils/RPCContainer.h @@ -27,11 +27,11 @@ class FRPCContainer public: void QueueRPC(FPendingRPCParamsPtr Params, ESchemaComponentType Type); void ProcessRPCs(const FProcessRPCDelegate& FunctionToApply); - bool ObjectHasRPCsQueuedOfType(Worker_EntityId EntityId, ESchemaComponentType Type) const; + bool ObjectHasRPCsQueuedOfType(const Worker_EntityId& EntityId, ESchemaComponentType Type) const; private: using FArrayOfParams = TArray; - using FRPCMap = TMap; + using FRPCMap = TMap; using RPCContainerType = TMap; void ProcessRPCs(const FProcessRPCDelegate& FunctionToApply, FArrayOfParams& RPCList); From e58551e5a724c3fdcf1ffcf420198bcdc10ed075 Mon Sep 17 00:00:00 2001 From: Alex Moroz Date: Tue, 9 Jul 2019 15:21:45 +0100 Subject: [PATCH 4/4] Moved initialisation inside if statements --- SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp b/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp index 498938c25a..d969286a62 100644 --- a/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp +++ b/SpatialGDK/Source/SpatialGDK/Private/Utils/RPCContainer.cpp @@ -56,11 +56,9 @@ void FRPCContainer::ProcessRPCs(const FProcessRPCDelegate& FunctionToApply) bool FRPCContainer::ObjectHasRPCsQueuedOfType(const Worker_EntityId& EntityId, ESchemaComponentType Type) const { - const FRPCMap* MapOfQueues = QueuedRPCs.Find(Type); - if (MapOfQueues) + if(const FRPCMap* MapOfQueues = QueuedRPCs.Find(Type)) { - const FArrayOfParams* RPCList = MapOfQueues->Find(EntityId); - if (RPCList) + if(const FArrayOfParams* RPCList = MapOfQueues->Find(EntityId)) { return (RPCList->Num() > 0); }