From 5f8e5d44dc7b87b83e1ba18a0be33d3d4be2fdeb Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 11 Jun 2023 21:35:50 +0200 Subject: [PATCH] Fix RPC invoking on object with different ID but matching parent and type --- Source/Engine/Networking/NetworkManager.cpp | 2 +- Source/Engine/Networking/NetworkReplicator.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Networking/NetworkManager.cpp b/Source/Engine/Networking/NetworkManager.cpp index 88c59ad9a..b18136e23 100644 --- a/Source/Engine/Networking/NetworkManager.cpp +++ b/Source/Engine/Networking/NetworkManager.cpp @@ -15,7 +15,7 @@ #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Scripting/Scripting.h" -#define NETWORK_PROTOCOL_VERSION 1 +#define NETWORK_PROTOCOL_VERSION 2 float NetworkManager::NetworkFPS = 60.0f; NetworkPeer* NetworkManager::Peer = nullptr; diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp index 6f6211b74..3c08a01aa 100644 --- a/Source/Engine/Networking/NetworkReplicator.cpp +++ b/Source/Engine/Networking/NetworkReplicator.cpp @@ -95,6 +95,8 @@ PACK_STRUCT(struct NetworkMessageObjectRpc { NetworkMessageIDs ID = NetworkMessageIDs::ObjectRpc; Guid ObjectId; + Guid ParentId; + char ObjectTypeName[128]; // TODO: introduce networked-name to synchronize unique names as ushort (less data over network) char RpcTypeName[128]; // TODO: introduce networked-name to synchronize unique names as ushort (less data over network) char RpcName[128]; // TODO: introduce networked-name to synchronize unique names as ushort (less data over network) uint16 ArgsSize; @@ -1546,11 +1548,14 @@ void NetworkInternal::NetworkReplicatorUpdate() //NETWORK_REPLICATOR_LOG(Info, "[NetworkReplicator] Rpc {}::{} object ID={}", e.Name.First.ToString(), String(e.Name.Second), item.ToString()); NetworkMessageObjectRpc msgData; msgData.ObjectId = item.ObjectId; + msgData.ParentId = item.ParentId; if (isClient) { // Remap local client object ids into server ids IdsRemappingTable.KeyOf(msgData.ObjectId, &msgData.ObjectId); + IdsRemappingTable.KeyOf(msgData.ParentId, &msgData.ParentId); } + GetNetworkName(msgData.ObjectTypeName, obj->GetType().Fullname); GetNetworkName(msgData.RpcTypeName, e.Name.First.GetType().Fullname); GetNetworkName(msgData.RpcName, e.Name.Second); msgData.ArgsSize = (uint16)e.ArgsData.Length(); @@ -1949,7 +1954,7 @@ void NetworkInternal::OnNetworkMessageObjectRpc(NetworkEvent& event, NetworkClie NetworkMessageObjectRpc msgData; event.Message.ReadStructure(msgData); ScopeLock lock(ObjectsLock); - NetworkReplicatedObject* e = ResolveObject(msgData.ObjectId); + NetworkReplicatedObject* e = ResolveObject(msgData.ObjectId, msgData.ParentId, msgData.ObjectTypeName); if (e) { auto& item = *e;