From 023b17818e335ef4aef4c374e694c0cf4f74ba76 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Tue, 23 Dec 2025 07:53:29 +0300 Subject: [PATCH] Fixed some issues with ordered list netcode --- .../Helpers/NetworkingObjects/NetObjOrderedList.hpp | 11 ++++++----- src/World.cpp | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp b/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp index 6d26c25..dc7e661 100644 --- a/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp +++ b/include/Helpers/NetworkingObjects/NetObjOrderedList.hpp @@ -221,6 +221,7 @@ namespace NetworkingObjects { idToDataMap.emplace(newObjInfoPtr->obj.get_net_id(), newObjInfoPtr); toRet.emplace_back(data[posToInsertAt]); } + set_positions_for_object_info_vector(data, newObjs[0].first); l.send_server_update_to_all_clients_except(clientInserting, RELIABLE_COMMAND_CHANNEL, [&toRet](const NetObjTemporaryPtr>&, cereal::PortableBinaryOutputArchive& a) { a(ObjPtrOrderedListCommand_StoC::INSERT_MANY_CONSTRUCT, static_cast(toRet.size())); for(const NetObjOrderedListObjectInfoPtr& objInfo : toRet) { @@ -233,7 +234,6 @@ namespace NetworkingObjects { for(const NetObjOrderedListObjectInfoPtr& objInfo : toRet) a(objInfo->pos, objInfo->obj.get_net_id()); }); - set_positions_for_object_info_vector(data, newObjs[0].first); this->call_insert_callback_list(toRet); return toRet; } @@ -301,7 +301,7 @@ namespace NetworkingObjects { data.clear(); idToDataMap.clear(); for(uint32_t i = 0; i < constructedSize; i++) { - data.emplace_back(std::make_shared>(l.get_obj_man()->template read_create_message(a, c), static_cast(data.size()))); + data.emplace_back(std::make_shared>(l.get_obj_man()->template read_create_message(a, c), i)); idToDataMap.emplace(data.back()->obj.get_net_id(), data.back()); } // Dont send the object data to all clients in the constructor, as the function that called read_create_message is also the one that will decide where to send the data of the constructed object @@ -409,6 +409,7 @@ namespace NetworkingObjects { clientJustInsertedSyncIgnore.emplace(newObjInfoPtr->obj.get_net_id(), newObjInfoPtr); toRet.emplace_back(clientData[posToInsertAt]); } + set_positions_for_object_info_vector(clientData, newObjs[0].first); l.send_client_update(RELIABLE_COMMAND_CHANNEL, [&toRet](const NetObjTemporaryPtr>&, cereal::PortableBinaryOutputArchive& a) { a(ObjPtrOrderedListCommand_CtoS::INSERT_MANY, static_cast(toRet.size())); for(const NetObjOrderedListObjectInfoPtr& objInfo : toRet) { @@ -416,7 +417,6 @@ namespace NetworkingObjects { objInfo->obj.write_create_message(a); } }); - set_positions_for_object_info_vector(clientData, newObjs[0].first); this->call_insert_callback_list(toRet); return toRet; } @@ -484,7 +484,7 @@ namespace NetworkingObjects { clientJustInsertedSyncIgnore.clear(); // Server will get the data and won't send back references to these objects, so dont ignore sync for these objects for(size_t i = 0; i < clientData.size(); i++) { clientData[i]->obj.write_create_message(a); - serverData.emplace_back(clientData.back()->obj.get_net_id()); // We are the ones who made this list, so fill up + serverData.emplace_back(clientData[i]->obj.get_net_id()); // We are the ones who made this list, so fill up } } virtual void read_constructor(const NetObjTemporaryPtr>& l, cereal::PortableBinaryInputArchive& a, const std::shared_ptr&) override { @@ -493,8 +493,9 @@ namespace NetworkingObjects { clientData.clear(); serverData.clear(); clientIdToDataMap.clear(); + clientJustInsertedSyncIgnore.clear(); for(uint32_t i = 0; i < constructedSize; i++) { - clientData.emplace_back(std::make_shared>(l.get_obj_man()->template read_create_message(a, nullptr), static_cast(serverData.size()))); + clientData.emplace_back(std::make_shared>(l.get_obj_man()->template read_create_message(a, nullptr), i)); clientIdToDataMap.emplace(clientData.back()->obj.get_net_id(), clientData.back()); serverData.emplace_back(clientData.back()->obj.get_net_id()); } diff --git a/src/World.cpp b/src/World.cpp index af6ca1e..91671ab 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -139,7 +139,7 @@ void World::init_server_callbacks() { { cereal::PortableBinaryOutputArchive a(*ss); a(CLIENT_INITIAL_DATA, name, clientDataObjPtr.get_net_id()); - //bMan.bookmarks.write_create_message(a); + bMan.bookmarkListRoot.write_create_message(a); gridMan.grids.write_create_message(a); drawProg.write_components_server(a); canvasTheme.write_create_message(a); @@ -170,7 +170,7 @@ void World::init_client_callbacks() { NetworkingObjects::NetObjID clientDataObjID; message(fileDisplayName, clientDataObjID); set_name(fileDisplayName); - //bMan.bookmarks = netObjMan.read_create_message>(message, nullptr); + bMan.bookmarkListRoot = netObjMan.read_create_message(message, nullptr); gridMan.grids = netObjMan.read_create_message>(message, nullptr); drawProg.read_components_client(message); canvasTheme.read_create_message(message);