From be929c8d359c0e0dfc97841e68a86854c8da1b3c Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:46:31 +0200 Subject: [PATCH 01/48] Networking: add native ReplicaManager3 entity replication Replace the flecs+BitStream entity-sync layer with native MafiaNet replication under networking/replication/: - NetworkEntity : Replica3 owns its state directly (no ECS) and serializes per-tick updates through VariableDeltaSerializer (the documented ReplicaManager3 delta path) instead of a whole-object memcmp. Construction sends a full snapshot; Serialize() returns RM3SR_SERIALIZED_UNIQUELY and only changed variables go on the wire. - ReplicationManager (a ReplicaManager3) owns the entity set, the per-connection viewer map and a configurable GridSectorizer interest index. DestroyEntity only clears a viewer mapping for actual viewer entities (owned non-viewer entities share the owner GUID). The grid inserts a small box per entity (GridSectorizer asserts on zero area) and is sized for a 20km map by default, configurable via ConfigureGrid. - ReplicationConnection drives QUERY_CONNECTION_FOR_REPLICA_LIST relevance. - EntityFactory maps a CRC32 type id to a constructor for both peers. Authority (C1) is enforced by a custom QuerySerialization keyed on ownerGUID plus a stale-owner deserialize gate. Deletes the game_sync/* streamer messages. @ --- .../messages/game_sync/entity_despawn.h | 32 ---- .../messages/game_sync/entity_messages.h | 15 -- .../messages/game_sync/entity_owner_update.h | 42 ----- .../messages/game_sync/entity_self_update.h | 32 ---- .../messages/game_sync/entity_spawn.h | 43 ----- .../messages/game_sync/entity_update.h | 50 ------ .../networking/messages/game_sync/message.h | 46 ----- .../networking/replication/entity_factory.cpp | 40 +++++ .../networking/replication/entity_factory.h | 44 +++++ .../networking/replication/network_entity.cpp | 168 ++++++++++++++++++ .../networking/replication/network_entity.h | 114 ++++++++++++ .../replication/replication_connection.cpp | 61 +++++++ .../replication/replication_connection.h | 36 ++++ .../replication/replication_manager.cpp | 148 +++++++++++++++ .../replication/replication_manager.h | 84 +++++++++ 15 files changed, 695 insertions(+), 260 deletions(-) delete mode 100644 code/framework/src/networking/messages/game_sync/entity_despawn.h delete mode 100644 code/framework/src/networking/messages/game_sync/entity_messages.h delete mode 100644 code/framework/src/networking/messages/game_sync/entity_owner_update.h delete mode 100644 code/framework/src/networking/messages/game_sync/entity_self_update.h delete mode 100644 code/framework/src/networking/messages/game_sync/entity_spawn.h delete mode 100644 code/framework/src/networking/messages/game_sync/entity_update.h delete mode 100644 code/framework/src/networking/messages/game_sync/message.h create mode 100644 code/framework/src/networking/replication/entity_factory.cpp create mode 100644 code/framework/src/networking/replication/entity_factory.h create mode 100644 code/framework/src/networking/replication/network_entity.cpp create mode 100644 code/framework/src/networking/replication/network_entity.h create mode 100644 code/framework/src/networking/replication/replication_connection.cpp create mode 100644 code/framework/src/networking/replication/replication_connection.h create mode 100644 code/framework/src/networking/replication/replication_manager.cpp create mode 100644 code/framework/src/networking/replication/replication_manager.h diff --git a/code/framework/src/networking/messages/game_sync/entity_despawn.h b/code/framework/src/networking/messages/game_sync/entity_despawn.h deleted file mode 100644 index 43ea6494e..000000000 --- a/code/framework/src/networking/messages/game_sync/entity_despawn.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "../messages.h" -#include "message.h" -#include "world/modules/base.hpp" - -#include - -namespace Framework::Networking::Messages { - class GameSyncEntityDespawn final: public GameSyncMessage { - public: - uint8_t GetMessageID() const override { - return GAME_SYNC_ENTITY_DESPAWN; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - // noop - } - - bool Valid() const override { - return true; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/game_sync/entity_messages.h b/code/framework/src/networking/messages/game_sync/entity_messages.h deleted file mode 100644 index bc3a46d6e..000000000 --- a/code/framework/src/networking/messages/game_sync/entity_messages.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "entity_despawn.h" -#include "entity_owner_update.h" -#include "entity_self_update.h" -#include "entity_spawn.h" -#include "entity_update.h" diff --git a/code/framework/src/networking/messages/game_sync/entity_owner_update.h b/code/framework/src/networking/messages/game_sync/entity_owner_update.h deleted file mode 100644 index 7374dd776..000000000 --- a/code/framework/src/networking/messages/game_sync/entity_owner_update.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "../messages.h" -#include "message.h" - -#include - -namespace Framework::Networking::Messages { - class GameSyncEntityOwnerUpdate final: public GameSyncMessage { - private: - uint64_t _owner = MafiaNet::UNASSIGNED_RAKNET_GUID.g; - - public: - uint8_t GetMessageID() const override { - return GAME_SYNC_ENTITY_OWNER_UPDATE; - } - - void FromParameters(uint64_t owner) { - _owner = owner; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _owner); - } - - bool Valid() const override { - return _owner != MafiaNet::UNASSIGNED_RAKNET_GUID.g; - } - - uint64_t GetOwner() const { - return _owner; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/game_sync/entity_self_update.h b/code/framework/src/networking/messages/game_sync/entity_self_update.h deleted file mode 100644 index 17ab3121c..000000000 --- a/code/framework/src/networking/messages/game_sync/entity_self_update.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "../messages.h" -#include "message.h" -#include "world/modules/base.hpp" - -#include - -namespace Framework::Networking::Messages { - class GameSyncEntitySelfUpdate final: public GameSyncMessage { - public: - uint8_t GetMessageID() const override { - return GAME_SYNC_ENTITY_SELF_UPDATE; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - // noop - } - - bool Valid() const override { - return true; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/game_sync/entity_spawn.h b/code/framework/src/networking/messages/game_sync/entity_spawn.h deleted file mode 100644 index 9510f444d..000000000 --- a/code/framework/src/networking/messages/game_sync/entity_spawn.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "../messages.h" -#include "message.h" -#include "world/modules/base.hpp" - -#include - -namespace Framework::Networking::Messages { - class GameSyncEntitySpawn final: public GameSyncMessage { - private: - World::Modules::Base::Transform _transform {}; - - public: - uint8_t GetMessageID() const override { - return GAME_SYNC_ENTITY_SPAWN; - } - - void FromParameters(World::Modules::Base::Transform tr) { - _transform = tr; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _transform); - } - - bool Valid() const override { - return true; - } - - World::Modules::Base::Transform GetTransform() const { - return _transform; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/game_sync/entity_update.h b/code/framework/src/networking/messages/game_sync/entity_update.h deleted file mode 100644 index 83f2dbba9..000000000 --- a/code/framework/src/networking/messages/game_sync/entity_update.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "../messages.h" -#include "message.h" -#include "world/modules/base.hpp" - -#include - -namespace Framework::Networking::Messages { - class GameSyncEntityUpdate final: public GameSyncMessage { - private: - World::Modules::Base::Transform _transform {}; - uint64_t _owner = MafiaNet::UNASSIGNED_RAKNET_GUID.g; - - public: - uint8_t GetMessageID() const override { - return GAME_SYNC_ENTITY_UPDATE; - } - - void FromParameters(World::Modules::Base::Transform tr, uint64_t owner) { - _transform = tr; - _owner = owner; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _transform); - bs->Serialize(write, _owner); - } - - bool Valid() const override { - return _owner != MafiaNet::UNASSIGNED_RAKNET_GUID.g; - } - - World::Modules::Base::Transform GetTransform() const { - return _transform; - } - - uint64_t GetOwner() const { - return _owner; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/game_sync/message.h b/code/framework/src/networking/messages/game_sync/message.h deleted file mode 100644 index 68a23a2df..000000000 --- a/code/framework/src/networking/messages/game_sync/message.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "../messages.h" -#include "world/modules/base.hpp" - -#include - -namespace Framework::Networking::Messages { - class GameSyncMessage: public IMessage { - protected: - flecs::entity_t _serverID = 0; - - public: - void SetServerID(flecs::entity_t serverID) { - _serverID = serverID; - } - - flecs::entity_t GetServerID() const { - return _serverID; - } - - void Serialize2(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _serverID); - }; - - inline bool ValidServerID() const { - return _serverID > 0; - } - - /** - * Validates if the server id was set. - * @return - */ - bool Valid2() const override { - return ValidServerID(); - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/replication/entity_factory.cpp b/code/framework/src/networking/replication/entity_factory.cpp new file mode 100644 index 000000000..308ec452c --- /dev/null +++ b/code/framework/src/networking/replication/entity_factory.cpp @@ -0,0 +1,40 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#include "entity_factory.h" + +#include + +namespace Framework::Networking::Replication { + EntityFactory &EntityFactory::Get() { + static EntityFactory instance; + return instance; + } + + uint32_t EntityFactory::TypeId(const std::string &name) const { + return Utils::Hashing::CalculateCRC32(name.c_str()); + } + + uint32_t EntityFactory::Register(const std::string &name, Constructor constructor) { + const uint32_t id = TypeId(name); + _types[id] = Entry {id, std::move(constructor)}; + return id; + } + + NetworkEntity *EntityFactory::Create(uint32_t typeId) const { + const auto it = _types.find(typeId); + if (it == _types.end() || !it->second.constructor) { + return nullptr; + } + NetworkEntity *entity = it->second.constructor(); + if (entity) { + entity->typeId = typeId; + } + return entity; + } +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/entity_factory.h b/code/framework/src/networking/replication/entity_factory.h new file mode 100644 index 000000000..6a693368b --- /dev/null +++ b/code/framework/src/networking/replication/entity_factory.h @@ -0,0 +1,44 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "network_entity.h" + +#include + +#include +#include +#include + +namespace Framework::Networking::Replication { + // Process-wide registry mapping a stable type id (CRC32 of a name) to a constructor for the + // concrete NetworkEntity subclass. The server creates entities by type id and the client's + // AllocReplica reconstructs them from the same id, so both sides must register identical types. + class EntityFactory final { + public: + using Constructor = fu2::function; + + static EntityFactory &Get(); + + // Registers a type. Returns its id. Safe to call once per type at startup. + uint32_t Register(const std::string &name, Constructor constructor); + + // Constructs an instance and stamps its typeId. Returns nullptr for an unknown id. + NetworkEntity *Create(uint32_t typeId) const; + + uint32_t TypeId(const std::string &name) const; + + private: + struct Entry { + uint32_t id = 0; + Constructor constructor; + }; + std::unordered_map _types; + }; +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp new file mode 100644 index 000000000..72f6146b5 --- /dev/null +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -0,0 +1,168 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#include "network_entity.h" + +#include "replication_manager.h" + +#include +#include + +namespace Framework::Networking::Replication { + bool NetworkEntity::IsServerPeer() const { + const auto *manager = static_cast(replicaManager); + return manager && manager->IsServer(); + } + + uint64_t NetworkEntity::MyGUID() const { + const auto *manager = static_cast(replicaManager); + return manager ? manager->GetMyGUID() : 0xFFFFFFFFFFFFFFFF; + } + + void NetworkEntity::WriteAllocationID(MafiaNet::Connection_RM3 *, MafiaNet::BitStream *allocationIdBitstream) const { + allocationIdBitstream->Write(typeId); + } + + // --- One-shot construction snapshot (full state, no delta) --- + + void NetworkEntity::WriteConstruction(MafiaNet::BitStream *bs) const { + bs->Write(ownerGUID); + bs->Write(position); + bs->Write(velocity); + bs->Write(rotation); + bs->Write(virtualWorld); + bs->Write(alwaysVisible); + bs->Write(isVisible); + bs->Write(isViewer); + bs->Write(streamRange); + bs->Write(modelHash); + bs->Write(scale); + bs->Write(MafiaNet::RakString(modelName.c_str())); + } + + void NetworkEntity::ReadConstruction(MafiaNet::BitStream *bs) { + // The server keeps its own authoritative owner assignment and must not let an owning client + // dictate it back; clients adopt whatever the server sends. + uint64_t incomingOwner = ownerGUID; + bs->Read(incomingOwner); + if (!IsServerPeer()) { + ownerGUID = incomingOwner; + } + bs->Read(position); + bs->Read(velocity); + bs->Read(rotation); + bs->Read(virtualWorld); + bs->Read(alwaysVisible); + bs->Read(isVisible); + bs->Read(isViewer); + bs->Read(streamRange); + bs->Read(modelHash); + bs->Read(scale); + MafiaNet::RakString name; + bs->Read(name); + modelName = name.C_String(); + } + + void NetworkEntity::SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *) { + WriteConstruction(constructionBitstream); + OnSerializeConstruction(constructionBitstream); + } + + bool NetworkEntity::DeserializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *) { + ReadConstruction(constructionBitstream); + OnDeserializeConstruction(constructionBitstream); + OnConstructed(); + return true; + } + + void NetworkEntity::SerializeDestruction(MafiaNet::BitStream *, MafiaNet::Connection_RM3 *) {} + + bool NetworkEntity::DeserializeDestruction(MafiaNet::BitStream *, MafiaNet::Connection_RM3 *) { + return true; + } + + void NetworkEntity::DeallocReplica(MafiaNet::Connection_RM3 *) { + delete this; + } + + // --- Per-tick delta serialization (VariableDeltaSerializer) --- + + void NetworkEntity::OnUserReplicaPreSerializeTick() { + // Reset the per-tick "already compared" flag so identical-broadcast caching works (see + // VariableDeltaSerializer::OnPreSerializeTick). Called once per replica per serialize tick. + _vds.OnPreSerializeTick(); + } + + MafiaNet::RM3SerializationResult NetworkEntity::Serialize(MafiaNet::SerializeParameters *serializeParameters) { + serializeParameters->messageTimestamp = MafiaNet::GetTime(); + + MafiaNet::VariableDeltaSerializer::SerializationContext ctx; + // whenLastSerialized == 0 means this is the first send to a fresh system: write every + // variable in full; otherwise only changed variables are written. + _vds.BeginIdenticalSerialize(&ctx, serializeParameters->whenLastSerialized == 0, &serializeParameters->outputBitstream[0]); + _vds.SerializeVariable(&ctx, ownerGUID); + _vds.SerializeVariable(&ctx, position); + _vds.SerializeVariable(&ctx, velocity); + _vds.SerializeVariable(&ctx, rotation); + SerializeFields(&_vds, &ctx); + _vds.EndSerialize(&ctx); + + // Per-connection delta path: ReplicaManager3 compares against the last bytes sent to each + // system and suppresses the send when nothing changed. + return MafiaNet::RM3SR_SERIALIZED_UNIQUELY; + } + + void NetworkEntity::Deserialize(MafiaNet::DeserializeParameters *deserializeParameters) { + // Server authority gate: only accept state from the entity's current owner, rejecting a + // stale owner whose in-flight packets land after an ownership handover. + if (IsServerPeer() && deserializeParameters->sourceConnection && deserializeParameters->sourceConnection->GetRakNetGUID().g != ownerGUID) { + return; + } + + MafiaNet::VariableDeltaSerializer::DeserializationContext ctx; + _vds.BeginDeserialize(&ctx, &deserializeParameters->serializationBitstream[0]); + // Read into a temporary so the server can ignore a client-supplied owner (it is + // authoritative); clients adopt the owner the server sends. + uint64_t incomingOwner = ownerGUID; + _vds.DeserializeVariable(&ctx, incomingOwner); + if (!IsServerPeer()) { + ownerGUID = incomingOwner; + } + _vds.DeserializeVariable(&ctx, position); + _vds.DeserializeVariable(&ctx, velocity); + _vds.DeserializeVariable(&ctx, rotation); + DeserializeFields(&_vds, &ctx); + _vds.EndDeserialize(&ctx); + } + + MafiaNet::RM3ConstructionState NetworkEntity::QueryConstruction(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *) { + // Unused under QUERY_CONNECTION_FOR_REPLICA_LIST; required by the interface. + return QueryConstruction_ServerConstruction(destinationConnection, IsServerPeer()); + } + + bool NetworkEntity::QueryRemoteConstruction(MafiaNet::Connection_RM3 *sourceConnection) { + return QueryRemoteConstruction_ServerConstruction(sourceConnection, IsServerPeer()); + } + + MafiaNet::RM3QuerySerializationResult NetworkEntity::QuerySerialization(MafiaNet::Connection_RM3 *destinationConnection) { + if (IsServerPeer()) { + // Relay to everyone except the authoritative owner (no echo back to it). + if (destinationConnection->GetRakNetGUID().g == ownerGUID) { + return MafiaNet::RM3QSR_DO_NOT_CALL_SERIALIZE; + } + return MafiaNet::RM3QSR_CALL_SERIALIZE; + } + + // Client: only push upstream for entities we currently own. + return ownerGUID == MyGUID() ? MafiaNet::RM3QSR_CALL_SERIALIZE : MafiaNet::RM3QSR_DO_NOT_CALL_SERIALIZE; + } + + MafiaNet::RM3ActionOnPopConnection NetworkEntity::QueryActionOnPopConnection(MafiaNet::Connection_RM3 *droppedConnection) const { + return IsServerPeer() ? QueryActionOnPopConnection_Server(droppedConnection) : QueryActionOnPopConnection_Client(droppedConnection); + } +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h new file mode 100644 index 000000000..1a4fa2da3 --- /dev/null +++ b/code/framework/src/networking/replication/network_entity.h @@ -0,0 +1,114 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include +#include + +#include +#include + +#include +#include + +namespace Framework::Networking::Replication { + // A NetworkEntity IS the replicated object — it owns its state directly as plain members. There + // is no ECS / flecs behind it; ReplicaManager3 + NetworkIDManager track it and GridSectorizer + // scopes it. Game-specific entities (player, vehicle, ...) derive from this, add their own + // fields, and override SerializeFields/DeserializeFields (per-tick delta state) and/or + // OnSerializeConstruction/OnDeserializeConstruction (one-shot spawn state). + // + // Per-tick updates use MafiaNet::VariableDeltaSerializer (the documented ReplicaManager3 delta + // path): each variable is compared against the last value sent to a system and only transmitted + // when it changes. Construction sends a full snapshot once. Serialize() therefore returns + // RM3SR_SERIALIZED_UNIQUELY — ReplicaManager3 calls it per connection, while the delta serializer + // internally reuses the identical-broadcast bitstream within a tick for efficiency. + // + // Authority (validated design point C1): we override QuerySerialization ourselves keyed on + // ownerGUID, not the stock creatingSystemGUID helpers. The server serializes to everyone except + // the owner; the owning client serializes upstream. Deserialize is gated on the current owner so + // a stale owner cannot write during a handover. + class NetworkEntity : public MafiaNet::Replica3 { + public: + NetworkEntity() = default; + ~NetworkEntity() override = default; + + // --- Common replicated state (owned, no ECS) --- + glm::vec3 position = glm::vec3(0.0f); + glm::vec3 velocity = glm::vec3(0.0f); + glm::quat rotation = glm::identity(); + glm::vec3 scale = glm::vec3(1.0f); + uint64_t modelHash = 0; + std::string modelName; + + // --- Authority / streaming metadata (server-authoritative) --- + uint64_t ownerGUID = 0xFFFFFFFFFFFFFFFF; // UNASSIGNED_RAKNET_GUID.g + int virtualWorld = 0; + bool alwaysVisible = false; + bool isVisible = true; + + // A viewer is an entity a connection "looks through" (a player's avatar). Its position and + // streamRange drive that connection's interest set. + bool isViewer = false; + float streamRange = 100.0f; + + // Set by the EntityFactory on construction; identifies the concrete type over the wire. + uint32_t typeId = 0; + + // --- Game extension points --- + // One-shot spawn state, written/read alongside the common construction snapshot. + virtual void OnSerializeConstruction(MafiaNet::BitStream *bs) { + (void)bs; + } + virtual void OnDeserializeConstruction(MafiaNet::BitStream *bs) { + (void)bs; + } + // Per-tick delta state. Append your fields with vds->SerializeVariable(ctx, field) / + // vds->DeserializeVariable(ctx, field), in the same order on both sides. + virtual void SerializeFields(MafiaNet::VariableDeltaSerializer *vds, MafiaNet::VariableDeltaSerializer::SerializationContext *ctx) { + (void)vds; + (void)ctx; + } + virtual void DeserializeFields(MafiaNet::VariableDeltaSerializer *vds, MafiaNet::VariableDeltaSerializer::DeserializationContext *ctx) { + (void)vds; + (void)ctx; + } + // Called once on the client after construction, e.g. to request the backing game object. + virtual void OnConstructed() {} + + // --- Replica3 implementation --- + void WriteAllocationID(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::BitStream *allocationIdBitstream) const override; + void SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *destinationConnection) override; + bool DeserializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *sourceConnection) override; + void SerializeDestruction(MafiaNet::BitStream *destructionBitstream, MafiaNet::Connection_RM3 *destinationConnection) override; + bool DeserializeDestruction(MafiaNet::BitStream *destructionBitstream, MafiaNet::Connection_RM3 *sourceConnection) override; + void DeallocReplica(MafiaNet::Connection_RM3 *sourceConnection) override; + + void OnUserReplicaPreSerializeTick() override; + MafiaNet::RM3SerializationResult Serialize(MafiaNet::SerializeParameters *serializeParameters) override; + void Deserialize(MafiaNet::DeserializeParameters *deserializeParameters) override; + + MafiaNet::RM3ConstructionState QueryConstruction(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *replicaManager3) override; + bool QueryRemoteConstruction(MafiaNet::Connection_RM3 *sourceConnection) override; + MafiaNet::RM3QuerySerializationResult QuerySerialization(MafiaNet::Connection_RM3 *destinationConnection) override; + MafiaNet::RM3ActionOnPopConnection QueryActionOnPopConnection(MafiaNet::Connection_RM3 *droppedConnection) const override; + + private: + // True if we are the server peer (read from the owning ReplicationManager). + bool IsServerPeer() const; + uint64_t MyGUID() const; + // Full one-shot construction snapshot of the common state. + void WriteConstruction(MafiaNet::BitStream *bs) const; + void ReadConstruction(MafiaNet::BitStream *bs); + + // Tracks the last value of each serialized variable per connection so updates carry only + // what changed (the documented ReplicaManager3 delta path). + MafiaNet::VariableDeltaSerializer _vds; + }; +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/replication_connection.cpp b/code/framework/src/networking/replication/replication_connection.cpp new file mode 100644 index 000000000..c60d76c5a --- /dev/null +++ b/code/framework/src/networking/replication/replication_connection.cpp @@ -0,0 +1,61 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#include "replication_connection.h" + +#include "entity_factory.h" +#include "network_entity.h" +#include "replication_manager.h" + +#include +#include + +namespace Framework::Networking::Replication { + ReplicationConnection::ReplicationConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID guid, ReplicationManager *manager, bool isServer) + : Connection_RM3(systemAddress, guid), _manager(manager), _isServer(isServer) {} + + MafiaNet::Replica3 *ReplicationConnection::AllocReplica(MafiaNet::BitStream *allocationIdBitstream, MafiaNet::ReplicaManager3 *) { + uint32_t typeId = 0; + allocationIdBitstream->Read(typeId); + // The instance's state is populated by DeserializeConstruction (called immediately after); + // any backing game object is requested from NetworkEntity::OnConstructed. + return EntityFactory::Get().Create(typeId); + } + + void ReplicationConnection::QueryReplicaList(DataStructures::List &newReplicasToCreate, DataStructures::List &existingReplicasToDestroy) { + // Only the server decides what exists on a remote system. + if (!_isServer || !_manager) { + return; + } + + NetworkEntity *viewer = _manager->GetViewer(GetRakNetGUID().g); + if (!viewer) { + // Connection not yet associated with a controlled entity (still handshaking). + return; + } + + // Spatial interest set around the viewer. + std::vector inRange; + _manager->QueryRadius(viewer->position, viewer->streamRange, inRange); + + _manager->ForEachEntity([&](NetworkEntity *entity) { + // The owner DOES receive its own entity (so it has the replica to serialize upstream and + // to recognize it as the local player). The server simply withholds serialize *updates* + // to the owner via NetworkEntity::QuerySerialization — construction still flows. + const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || (entity->virtualWorld == viewer->virtualWorld && std::find(inRange.begin(), inRange.end(), entity) != inRange.end())); + + const bool constructed = HasReplicaConstructed(entity); + if (visible && !constructed) { + newReplicasToCreate.Push(entity, _FILE_AND_LINE_); + } + else if (!visible && constructed) { + existingReplicasToDestroy.Push(entity, _FILE_AND_LINE_); + } + }); + } +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/replication_connection.h b/code/framework/src/networking/replication/replication_connection.h new file mode 100644 index 000000000..1aa91eabf --- /dev/null +++ b/code/framework/src/networking/replication/replication_connection.h @@ -0,0 +1,36 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include + +namespace Framework::Networking::Replication { + class ReplicationManager; + + // Per-remote-system state. On the client it constructs incoming replicas (AllocReplica); on the + // server it answers which replicas should exist on this connection (QueryReplicaList), which is + // where the streaming relevance rules live now that QUERY_CONNECTION_FOR_REPLICA_LIST is used + // (so Replica3::QueryConstruction/QueryDestruction are intentionally bypassed). + class ReplicationConnection final : public MafiaNet::Connection_RM3 { + public: + ReplicationConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID guid, ReplicationManager *manager, bool isServer); + + MafiaNet::Replica3 *AllocReplica(MafiaNet::BitStream *allocationIdBitstream, MafiaNet::ReplicaManager3 *replicaManager3) override; + + ConstructionMode QueryConstructionMode() const override { + return QUERY_CONNECTION_FOR_REPLICA_LIST; + } + + void QueryReplicaList(DataStructures::List &newReplicasToCreate, DataStructures::List &existingReplicasToDestroy) override; + + private: + ReplicationManager *_manager = nullptr; + bool _isServer = false; + }; +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp new file mode 100644 index 000000000..d710ad0c6 --- /dev/null +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -0,0 +1,148 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#include "replication_manager.h" + +#include "entity_factory.h" +#include "replication_connection.h" + +#include + +#include +#include + +namespace Framework::Networking::Replication { + namespace { + // Half-extent of a point entity's bounding box in the spatial index. GridSectorizer requires + // min < max (it asserts otherwise), so a point is inserted as a tiny box around its position. + constexpr float kPointEpsilon = 0.01f; + } // namespace + + ReplicationManager::ReplicationManager() = default; + + void ReplicationManager::ConfigureGrid(float cellSize, float worldMin, float worldMax) { + _gridCellSize = cellSize; + _gridMin = worldMin; + _gridMax = worldMax; + _gridReady = false; // re-initialised on next Tick() + } + + void ReplicationManager::Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, bool isServer) { + _isServer = isServer; + _myGUID = peer->GetMyGUID().g; + SetNetworkIDManager(networkIDManager); + peer->AttachPlugin(this); + } + + NetworkEntity *ReplicationManager::CreateEntity(uint32_t typeId) { + NetworkEntity *entity = EntityFactory::Get().Create(typeId); + if (!entity) { + return nullptr; + } + Reference(entity); + return entity; + } + + void ReplicationManager::DestroyEntity(NetworkEntity *entity) { + if (!entity) { + return; + } + // Only a viewer entity owns a viewer mapping. Owned non-viewer entities (e.g. a vehicle owned + // by a player) share the player's GUID, so we must NOT clear the mapping for those. + if (entity->isViewer && entity->ownerGUID != 0xFFFFFFFFFFFFFFFF) { + ClearViewer(entity->ownerGUID); + } + // BroadcastDestruction must precede deletion; ~Replica3 dereferences automatically. + entity->BroadcastDestruction(); + delete entity; + } + + NetworkEntity *ReplicationManager::GetEntityByNetworkID(MafiaNet::NetworkID networkId) const { + auto *idm = GetNetworkIDManager(); + if (!idm) { + return nullptr; + } + return idm->GET_OBJECT_FROM_ID(networkId); + } + + void ReplicationManager::ForEachEntity(const fu2::function &fn) const { + const unsigned count = const_cast(this)->GetReplicaCount(); + for (unsigned i = 0; i < count; ++i) { + auto *entity = static_cast(const_cast(this)->GetReplicaAtIndex(i)); + if (entity) { + fn(entity); + } + } + } + + void ReplicationManager::SetViewer(uint64_t guid, NetworkEntity *entity) { + if (entity) { + entity->isViewer = true; + } + _viewers[guid] = entity; + } + + NetworkEntity *ReplicationManager::GetViewer(uint64_t guid) const { + const auto it = _viewers.find(guid); + return it != _viewers.end() ? it->second : nullptr; + } + + void ReplicationManager::ClearViewer(uint64_t guid) { + _viewers.erase(guid); + } + + void ReplicationManager::Tick() { + if (!_isServer) { + return; + } + if (!_gridReady) { + _grid.Init(_gridCellSize, _gridCellSize, _gridMin, _gridMin, _gridMax, _gridMax); + _gridReady = true; + } + + // GridSectorizer has no incremental removal in the default build, so we rebuild every tick. + // Entities are inserted as a tiny box around their XZ position (GridSectorizer asserts on a + // zero-area entry). + _grid.Clear(); + ForEachEntity([this](NetworkEntity *entity) { + _grid.AddEntry(entity, entity->position.x - kPointEpsilon, entity->position.z - kPointEpsilon, entity->position.x + kPointEpsilon, entity->position.z + kPointEpsilon); + }); + } + + void ReplicationManager::QueryRadius(const glm::vec3 ¢er, float radius, std::vector &out) { + if (!_gridReady) { + return; + } + DataStructures::List hits; + _grid.GetEntries(hits, center.x - radius, center.z - radius, center.x + radius, center.z + radius); + + const float radiusSq = radius * radius; + for (unsigned i = 0; i < hits.Size(); ++i) { + auto *entity = static_cast(hits[i]); + if (!entity) { + continue; + } + const glm::vec3 delta = entity->position - center; + // 2D (XZ) distance check; entries spanning multiple cells can repeat, so skip dupes. + if (delta.x * delta.x + delta.z * delta.z > radiusSq) { + continue; + } + if (std::find(out.begin(), out.end(), entity) == out.end()) { + out.push_back(entity); + } + } + } + + MafiaNet::Connection_RM3 *ReplicationManager::AllocConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID) const { + return new ReplicationConnection(systemAddress, rakNetGUID, const_cast(this), _isServer); + } + + void ReplicationManager::DeallocConnection(MafiaNet::Connection_RM3 *connection) const { + delete connection; + } +} // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h new file mode 100644 index 000000000..af77749c7 --- /dev/null +++ b/code/framework/src/networking/replication/replication_manager.h @@ -0,0 +1,84 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "network_entity.h" + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +namespace Framework::Networking::Replication { + // The native replicated world: a ReplicaManager3 specialization that owns the set of + // NetworkEntity objects (there is no flecs world behind it). It creates/destroys entities, + // resolves them by NetworkID, tracks per-connection "viewer" entities, and maintains a + // GridSectorizer used by ReplicationConnection::QueryReplicaList for interest management. + class ReplicationManager final : public MafiaNet::ReplicaManager3 { + public: + ReplicationManager(); + + void Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, bool isServer); + + bool IsServer() const { + return _isServer; + } + uint64_t GetMyGUID() const { + return _myGUID; + } + + // --- Entity lifecycle --- + // Server: construct an entity of the given registered type and start replicating it. The + // caller fills in its state afterwards. Returns nullptr for an unknown type. + NetworkEntity *CreateEntity(uint32_t typeId); + // Broadcast destruction and delete the entity. + void DestroyEntity(NetworkEntity *entity); + NetworkEntity *GetEntityByNetworkID(MafiaNet::NetworkID networkId) const; + void ForEachEntity(const fu2::function &fn) const; + + // --- Viewers (a connection's controlled entity, e.g. a player's avatar) --- + void SetViewer(uint64_t guid, NetworkEntity *entity); + NetworkEntity *GetViewer(uint64_t guid) const; + void ClearViewer(uint64_t guid); + + // --- Interest management --- + // Configure the spatial index extent. Defaults cover a 20km² map at 100m cells (~40k cells). + // Pick bounds that enclose the playable area; entities outside clamp to edge cells (still + // found by radius queries, just less precisely). Call before the first Tick(). + void ConfigureGrid(float cellSize, float worldMin, float worldMax); + // Rebuilds the spatial index from current entity positions. Server only; call once per tick + // before ReplicaManager3 serializes (driven from NetworkPeer::Update). + void Tick(); + // Appends entities within `radius` of `center` to `out`, de-duplicated. Interest is computed + // on the XZ ground plane only (vertical separation does not cull) — adjust if your game's + // ground plane differs. + void QueryRadius(const glm::vec3 ¢er, float radius, std::vector &out); + + // --- ReplicaManager3 factory hooks --- + MafiaNet::Connection_RM3 *AllocConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID) const override; + void DeallocConnection(MafiaNet::Connection_RM3 *connection) const override; + + private: + bool _isServer = false; + uint64_t _myGUID = 0xFFFFFFFFFFFFFFFF; + bool _gridReady = false; + float _gridCellSize = 100.0f; + float _gridMin = -10000.0f; + float _gridMax = 10000.0f; + GridSectorizer _grid; + std::unordered_map _viewers; + }; +} // namespace Framework::Networking::Replication From b5b8bc5ff0d307cd2046b24924df5d3d762ceab8 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:46:46 +0200 Subject: [PATCH 02/48] Networking: dispatch RPCs natively through RPC4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the IRPC/IGameRPC class hierarchy and the per-type RPC4 slot trampoline (Rpc4Slot) that bridged capturing handlers onto RPC4. RPCs are now plain payload structs (a stable kIdentifier + a symmetric Serialize) dispatched by RPC4 to ordinary C function handlers — the only shape RPC4 accepts. Helpers live in networking/rpc/rpc.h (Register/Read/Broadcast/SendTo). There is no separate "game RPC": an entity-scoped call simply carries a NetworkID field the handler resolves through the ReplicationManager. Identifiers are explicit namespaced literals, not typeid (stable across compilers/binaries). NetworkPeer keeps the RPC4/NetworkIDManager/StatisticsHistory/Replication subsystems and exposes GetRPC(); the typed RegisterRPC/SendRPC/SendGameRPC surface is gone. NetworkServer gains BroadcastRPCExcept for the broadcast-to-all-but-one case (RPC4::Signal has no exclusion param). Drops the dead INTERNAL_RPC dispatcher id and the GAME_SYNC_* message ids (entity sync is native now); client_connection_finalized no longer carries the server entity id. @ --- .../messages/client_connection_finalized.h | 17 +-- .../src/networking/messages/messages.h | 19 +--- .../src/networking/network_client.cpp | 6 + .../framework/src/networking/network_client.h | 14 --- .../framework/src/networking/network_peer.cpp | 24 ++-- code/framework/src/networking/network_peer.h | 103 +++++++----------- .../src/networking/network_server.cpp | 31 +++--- .../framework/src/networking/network_server.h | 20 ++-- code/framework/src/networking/rpc/game_rpc.h | 81 -------------- code/framework/src/networking/rpc/rpc.h | 97 ++++++++++------- 10 files changed, 149 insertions(+), 263 deletions(-) delete mode 100644 code/framework/src/networking/rpc/game_rpc.h diff --git a/code/framework/src/networking/messages/client_connection_finalized.h b/code/framework/src/networking/messages/client_connection_finalized.h index 9783388c2..c386f8cd1 100644 --- a/code/framework/src/networking/messages/client_connection_finalized.h +++ b/code/framework/src/networking/messages/client_connection_finalized.h @@ -12,39 +12,32 @@ #include -#include - namespace Framework::Networking::Messages { class ClientConnectionFinalized final: public IMessage { private: - float _serverTickRate = 0.0f; - flecs::entity_t _entityID = 0; + float _serverTickRate = 0.0f; public: uint8_t GetMessageID() const override { return GAME_CONNECTION_FINALIZED; } - void FromParameters(float tickRate, flecs::entity_t entityID) { + // The local player's avatar arrives via native replication (with its own NetworkID), so the + // finalize message only carries the server tick rate now. + void FromParameters(float tickRate) { _serverTickRate = tickRate; - _entityID = entityID; } void Serialize(MafiaNet::BitStream *bs, bool write) override { bs->Serialize(write, _serverTickRate); - bs->Serialize(write, _entityID); } bool Valid() const override { - return _serverTickRate > 0.0f && _entityID > 0; + return _serverTickRate > 0.0f; } float GetServerTickRate() const { return _serverTickRate; } - - flecs::entity_t GetEntityID() const { - return _entityID; - } }; } // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/messages.h b/code/framework/src/networking/messages/messages.h index 461845e12..b0f7b06d3 100644 --- a/code/framework/src/networking/messages/messages.h +++ b/code/framework/src/networking/messages/messages.h @@ -31,16 +31,12 @@ namespace Framework::Networking::Messages { using PacketCallback = fu2::function; using DisconnectPacketCallback = fu2::function; - // Internal Framework messages - enum InternalMessages : uint8_t { - INTERNAL_RPC = ID_USER_PACKET_ENUM + 1, - INTERNAL_NEXT_MESSAGE_ID - }; - - // Internal game flow messages + // Internal game flow messages. RPCs no longer use a message ID (RPC4 dispatches by string + // identifier), and entity sync no longer uses message IDs either (ReplicaManager3 reserves its + // own plugin message IDs). Only the connection-handshake flow remains on the message-ID path. enum GameMessages : uint8_t { // Game messages handling common client connection flow - GAME_CONNECTION_HANDSHAKE = INTERNAL_NEXT_MESSAGE_ID, + GAME_CONNECTION_HANDSHAKE = ID_USER_PACKET_ENUM + 1, GAME_CONNECTION_ACKNOWLEDGE_CLIENT, GAME_CONNECTION_READY_ASSETS, GAME_CONNECTION_REQUEST_STREAMER, @@ -48,13 +44,6 @@ namespace Framework::Networking::Messages { GAME_CONNECTION_KICKED, GAME_INIT_PLAYER, - // Game sync entity streamer messages - GAME_SYNC_ENTITY_SPAWN, - GAME_SYNC_ENTITY_UPDATE, - GAME_SYNC_ENTITY_SELF_UPDATE, // server sends data to streamer - GAME_SYNC_ENTITY_OWNER_UPDATE, // server sends data about owned entity - GAME_SYNC_ENTITY_DESPAWN, - // Messages used by the mod GAME_NEXT_MESSAGE_ID }; diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 5369211f7..dc31594b5 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -8,6 +8,8 @@ #include "network_client.h" +#include "replication/replication_manager.h" + #include namespace Framework::Networking { @@ -29,6 +31,10 @@ namespace Framework::Networking { _peer->AttachPlugin(&_fileListTransfer); _peer->AttachPlugin(&_assetStreamer); + // Drive native entity replication from the client side (receives constructions, serializes + // owned entities upstream). + _replicationManager->Init(_peer, &_networkIDManager, false); + _initialized = true; return NetworkPeerError::NETWORK_PEER_NONE; } diff --git a/code/framework/src/networking/network_client.h b/code/framework/src/networking/network_client.h index 766917506..0fc6041b6 100644 --- a/code/framework/src/networking/network_client.h +++ b/code/framework/src/networking/network_client.h @@ -76,19 +76,5 @@ namespace Framework::Networking { void SetOnAssetsDownloadFailedCallback(OnAssetsDownloadFailedCallback callback) { _onAssetsDownloadFailedCallback = std::move(callback); } - - template - bool SendGameRPC(T &rpc, MafiaNet::RakNetGUID guid = MafiaNet::UNASSIGNED_RAKNET_GUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { - MafiaNet::BitStream bs; - bs.Write(Messages::INTERNAL_RPC); - bs.Write(rpc.GetHashName()); - rpc.Serialize(&bs, true); - rpc.Serialize2(&bs, true); - - if (_peer->Send(&bs, priority, reliability, 0, guid, guid == MafiaNet::UNASSIGNED_RAKNET_GUID) <= 0) { - return false; - } - return true; - } }; } // namespace Framework::Networking diff --git a/code/framework/src/networking/network_peer.cpp b/code/framework/src/networking/network_peer.cpp index ebd5d5661..f8f581f16 100644 --- a/code/framework/src/networking/network_peer.cpp +++ b/code/framework/src/networking/network_peer.cpp @@ -9,6 +9,7 @@ #include "network_peer.h" #include "errors.h" +#include "replication/replication_manager.h" #include @@ -16,17 +17,14 @@ namespace Framework::Networking { NetworkPeer::NetworkPeer() { _peer = MafiaNet::RakPeerInterface::GetInstance(); - RegisterMessage(Messages::INTERNAL_RPC, [this](MafiaNet::Packet *p) { - MafiaNet::BitStream bs(p->data + _packetDataOffset + 1, p->length - _packetDataOffset - 1, false); - uint32_t hashName; - bs.Read(hashName); + // Attach the native subsystems common to both peer roles. RPC4 and StatisticsHistory + // do not use the reliability layer, so attaching before Startup() is safe. ReplicaManager3 + // is attached later by the concrete peer once its connection factory exists (Phase 2). + _peer->AttachPlugin(&_rpc); + _peer->AttachPlugin(&_statisticsHistory); + _statisticsHistory.SetTrackConnections(true, 0, true); - if (_registeredRPCs.contains(hashName)) { - for (const auto &cb : _registeredRPCs[hashName]) { - cb(p); - } - } - }); + _replicationManager = std::make_unique(); } NetworkPeer::~NetworkPeer() = default; @@ -65,6 +63,12 @@ namespace Framework::Networking { return; } + // Rebuild the replication spatial index before ReplicaManager3 (driven from Receive below) + // computes per-connection relevance for this tick. + if (_replicationManager) { + _replicationManager->Tick(); + } + for (_packet = _peer->Receive(); _packet; _peer->DeallocatePacket(_packet), _packet = _peer->Receive()) { _packetDataOffset = 0; if (_packet->length == 0) { diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index de198fe57..afe734d7b 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -14,24 +14,44 @@ #include #include #include +#include +#include +#include #include #include +#include #include #include #include #include +namespace Framework::Networking::Replication { + class ReplicationManager; +} // namespace Framework::Networking::Replication + namespace Framework::Networking { class NetworkPeer : public Lifecycle { protected: MafiaNet::RakPeerInterface *_peer = nullptr; MafiaNet::Packet *_packet = nullptr; int _packetDataOffset = 0; // Offset to skip timestamp prefix if present - std::unordered_map> _registeredRPCs; std::unordered_map _registeredMessageCallbacks; Messages::PacketCallback _onUnknownPacketCallback; mutable MafiaNet::DirectoryDeltaTransfer _assetStreamer; + // Native MafiaNet subsystems, shared by client and server peers. + // RPC4 dispatches remote-procedure calls by string identifier to plain C handlers (see + // networking/rpc/rpc.h), NetworkIDManager hands out the cross-network object handles used + // by ReplicaManager3 replicas, and StatisticsHistoryPlugin tracks per-connection + // bandwidth/RTT/loss for diagnostics. + MafiaNet::RPC4 _rpc; + MafiaNet::NetworkIDManager _networkIDManager; + MafiaNet::StatisticsHistoryPlugin _statisticsHistory; + + // Native entity replication (ReplicaManager3). Created here, attached to the peer and given + // its server/client role by the concrete peer's Init(). + std::unique_ptr _replicationManager; + public: NetworkPeer(); ~NetworkPeer(); @@ -68,69 +88,8 @@ namespace Framework::Networking { }; } - template - void RegisterRPC(fu2::function callback) { - T _rpc = {}; - - if (callback == nullptr) { - return; - } - - _registeredRPCs[_rpc.GetHashName()].push_back([this, callback, _rpc](MafiaNet::Packet *p) { - MafiaNet::BitStream bs(p->data + _packetDataOffset + 5, p->length - _packetDataOffset - 5, false); - T rpc = {}; - rpc.SetPacket(p); - rpc.Serialize(&bs, false); - if (rpc.Valid()) { - callback(p->guid, &rpc); - } - else { - Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("RPC {} ({}) has failed to pass Valid() check, skipping!", _rpc.GetName(), _rpc.GetHashName()); - } - }); - } - - template - void RegisterGameRPC(fu2::function callback) { - T _rpc = {}; - - if (callback == nullptr) { - return; - } - - _registeredRPCs[_rpc.GetHashName()].push_back([this, callback, _rpc](MafiaNet::Packet *p) { - MafiaNet::BitStream bs(p->data + _packetDataOffset + 5, p->length - _packetDataOffset - 5, false); - T rpc = {}; - rpc.SetPacket(p); - rpc.Serialize(&bs, false); - rpc.Serialize2(&bs, false); - if (rpc.Valid2()) { - if (rpc.Valid()) { - callback(p->guid, &rpc); - } - else { - Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("RPC {} has failed to pass Valid() check, skipping!", _rpc.GetHashName()); - } - } - else { - Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("RPC {} has failed to pass Valid2() check, skipping!", _rpc.GetHashName()); - } - }); - } - - template - bool SendRPC(T &rpc, MafiaNet::RakNetGUID guid = MafiaNet::UNASSIGNED_RAKNET_GUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { - MafiaNet::BitStream bs; - bs.Write(Messages::INTERNAL_RPC); - bs.Write(rpc.GetHashName()); - rpc.Serialize(&bs, true); - assert(!rpc.IsGameRPC() && "Game RPCs cannot be sent via SendRPC()"); - - if (_peer->Send(&bs, priority, reliability, 0, guid, guid == MafiaNet::UNASSIGNED_RAKNET_GUID) <= 0) { - return false; - } - return true; - } + // RPCs are registered and sent natively through RPC4 (GetRPC()) using the helpers in + // networking/rpc/rpc.h. There is no typed RegisterRPC/SendRPC layer anymore. void Update() override; virtual bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) = 0; @@ -157,5 +116,21 @@ namespace Framework::Networking { MafiaNet::DirectoryDeltaTransfer* GetAssetStreamer() const noexcept { return &_assetStreamer; } + + MafiaNet::RPC4 *GetRPC() noexcept { + return &_rpc; + } + + MafiaNet::NetworkIDManager *GetNetworkIDManager() noexcept { + return &_networkIDManager; + } + + MafiaNet::StatisticsHistoryPlugin *GetStatisticsHistory() noexcept { + return &_statisticsHistory; + } + + Replication::ReplicationManager *GetReplicationManager() const noexcept { + return _replicationManager.get(); + } }; } // namespace Framework::Networking diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index e970f4204..1b89a3f4d 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -8,6 +8,8 @@ #include "network_server.h" +#include "replication/replication_manager.h" + #include #include #include @@ -32,6 +34,9 @@ namespace Framework::Networking { _peer->AttachPlugin(&_fileListTransfer); _peer->AttachPlugin(&_assetStreamer); + // Drive native entity replication from the server side. + _replicationManager->Init(_peer, &_networkIDManager, true); + _initialized = true; return NetworkPeerError::NETWORK_PEER_NONE; } @@ -79,26 +84,18 @@ namespace Framework::Networking { int NetworkServer::GetPing(MafiaNet::RakNetGUID guid) const { return _peer->GetAveragePing(guid); } - bool NetworkServer::SendGameRPCInternal(MafiaNet::BitStream &bs, Framework::World::ServerEngine *world, flecs::entity_t ent_id, MafiaNet::RakNetGUID guid, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority, PacketReliability reliability) const { - const auto ent = world->WrapEntity(ent_id); - - if (!ent.is_alive()) { - return false; + void NetworkServer::SignalExcept(const char *identifier, MafiaNet::BitStream &bs, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority, PacketReliability reliability) { + auto *replication = GetReplicationManager(); + if (!replication) { + return; } - - const auto streamers = world->FindVisibleStreamers(ent); - - for (const auto &streamer_ent : streamers) { - const auto streamer = streamer_ent.try_get(); - if (streamer->guid != guid.g && guid.g != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { - continue; - } - if (streamer->guid == excludeGUID.g) { + const unsigned count = replication->GetConnectionCount(); + for (unsigned i = 0; i < count; ++i) { + auto *connection = replication->GetConnectionAtIndex(i); + if (!connection || connection->GetRakNetGUID().g == excludeGUID.g) { continue; } - _peer->Send(&bs, priority, reliability, 0, MafiaNet::RakNetGUID(streamer->guid), false); + _rpc.Signal(identifier, &bs, priority, reliability, 0, connection->GetRakNetGUID(), false, false); } - - return true; } } // namespace Framework::Networking diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index c69e46d43..13e386e5d 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -13,6 +13,7 @@ #include "errors.h" #include "messages/messages.h" #include "network_peer.h" +#include "rpc/rpc.h" #include "world/server.h" #include @@ -28,8 +29,10 @@ namespace Framework::Networking { Messages::DisconnectPacketCallback _onPlayerDisconnectCallback; MafiaNet::FileListTransfer _fileListTransfer; - bool SendGameRPCInternal(MafiaNet::BitStream &bs, Framework::World::ServerEngine *world, flecs::entity_t ent, MafiaNet::RakNetGUID guid = MafiaNet::UNASSIGNED_RAKNET_GUID, MafiaNet::RakNetGUID excludeGUID = MafiaNet::UNASSIGNED_RAKNET_GUID, PacketPriority priority = HIGH_PRIORITY, - PacketReliability reliability = RELIABLE_ORDERED) const; + // Signal an already-serialized RPC payload to every connected system except one. RPC4::Signal + // has no exclusion parameter, so we walk the ReplicaManager3 connection list and target each + // peer individually. + void SignalExcept(const char *identifier, MafiaNet::BitStream &bs, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED); public: NetworkServer(): NetworkPeer() {} @@ -39,17 +42,12 @@ namespace Framework::Networking { bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) override; + // Broadcast a native RPC payload to everyone except one system (typically the originator). template - bool SendGameRPC(Framework::World::ServerEngine *world, T &rpc, MafiaNet::RakNetGUID guid = MafiaNet::UNASSIGNED_RAKNET_GUID, MafiaNet::RakNetGUID excludeGUID = MafiaNet::UNASSIGNED_RAKNET_GUID, PacketPriority priority = HIGH_PRIORITY, - PacketReliability reliability = RELIABLE_ORDERED) { + void BroadcastRPCExcept(T &payload, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { MafiaNet::BitStream bs; - bs.Write(Messages::INTERNAL_RPC); - bs.Write(rpc.GetHashName()); - rpc.Serialize(&bs, true); - rpc.Serialize2(&bs, true); - assert(rpc.IsGameRPC() && "Regular RPCs cannot be sent via SendGameRPC()"); - - return SendGameRPCInternal(bs, world, rpc.GetServerID(), guid, excludeGUID, priority, reliability); + payload.Serialize(&bs, true); + SignalExcept(T::kIdentifier, bs, excludeGUID, priority, reliability); } int GetPing(MafiaNet::RakNetGUID guid) const; diff --git a/code/framework/src/networking/rpc/game_rpc.h b/code/framework/src/networking/rpc/game_rpc.h deleted file mode 100644 index 419f4bf3f..000000000 --- a/code/framework/src/networking/rpc/game_rpc.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include -#include -#include -#include -#include - -#include - -#include "world/modules/base.hpp" - -namespace Framework::Networking::RPC { - template - class IGameRPC { - private: - MafiaNet::Packet *packet {}; - uint32_t _hashName = 0; - std::string _rpcName; - - protected: - flecs::entity_t _serverID = 0; - - public: - IGameRPC(): _rpcName(typeid(T).name()), _hashName(Utils::Hashing::CalculateCRC32(typeid(T).name())) {}; - void SetServerID(flecs::entity_t serverID) { - _serverID = serverID; - } - - flecs::entity_t GetServerID() const { - return _serverID; - } - - const std::string& GetName() const { - return _rpcName; - } - - virtual void Serialize(MafiaNet::BitStream *bs, bool write) = 0; - virtual bool Valid() const = 0; - - void Serialize2(MafiaNet::BitStream *bs, bool write) { - bs->Serialize(write, _serverID); - }; - - inline bool ValidServerID() const { - return _serverID > 0; - } - - /** - * Validates if the server id was set. - * @return - */ - bool Valid2() const { - return ValidServerID(); - } - - uint32_t GetHashName() const { - return _hashName; - } - - void SetPacket(MafiaNet::Packet *p) { - packet = p; - } - - MafiaNet::Packet *GetPacket() const { - return packet; - } - - bool IsGameRPC() const { - return true; - } - }; -} // namespace Framework::Networking::RPC diff --git a/code/framework/src/networking/rpc/rpc.h b/code/framework/src/networking/rpc/rpc.h index 15c9c2df3..ef2abe338 100644 --- a/code/framework/src/networking/rpc/rpc.h +++ b/code/framework/src/networking/rpc/rpc.h @@ -9,46 +9,65 @@ #pragma once #include -#include +#include +#include #include -#include -#include - -#include namespace Framework::Networking::RPC { - template - class IRPC { - private: - MafiaNet::Packet *packet {}; - uint32_t _hashName = 0; - std::string _rpcName; - - public: - virtual ~IRPC() = default; - IRPC(): _rpcName(typeid(T).name()), _hashName(Utils::Hashing::CalculateCRC32(typeid(T).name())) {}; - - virtual void Serialize(MafiaNet::BitStream *bs, bool write) = 0; - virtual bool Valid() const = 0; - - uint32_t GetHashName() const { - return _hashName; - } - - const std::string &GetName() const { - return _rpcName; - } - - void SetPacket(MafiaNet::Packet *p) { - packet = p; - } - - MafiaNet::Packet *GetPacket() const { - return packet; - } - - bool IsGameRPC() const { - return false; - } - }; + // Native RPC4 remote procedure calls. + // + // There is no IRPC/IGameRPC base class and no per-type dispatch trampoline. An RPC is just a + // plain, copyable payload struct that knows how to (de)serialize itself and exposes a stable + // string identifier. Handlers are ordinary C function pointers — the only shape RPC4 accepts + // (see MafiaNet::RPC4::RegisterFunction) — registered directly on the plugin and dispatched by + // RPC4 itself. There is no longer a distinct "game RPC": an entity-scoped call simply carries a + // MafiaNet::NetworkID field that the handler resolves through the ReplicationManager. + // + // A payload type T must provide: + // static constexpr const char *kIdentifier; // stable, explicit, compiler-independent + // void Serialize(MafiaNet::BitStream *bs, bool write); // symmetric read/write + // + // Register a handler (a free function of the required shape) and send a payload: + // void OnFoo(MafiaNet::BitStream *bs, MafiaNet::Packet *p) { const auto foo = RPC::Read(bs); ... } + // RPC::Register(peer->GetRPC(), &OnFoo); + // RPC::Broadcast(peer->GetRPC(), foo); // to everyone + // RPC::SendTo(peer->GetRPC(), foo, guid); // to one system + // + // Identifiers must be unique across the whole protocol and identical on both peers. Use a + // fully-qualified, namespaced literal (e.g. "Framework::EmitLuaEvent") rather than typeid, so it + // stays stable across compilers and binaries. + + using Handler = void (*)(MafiaNet::BitStream *userData, MafiaNet::Packet *packet); + + // Register a handler for payload type T under its identifier. + template + inline void Register(MafiaNet::RPC4 *rpc4, Handler handler) { + rpc4->RegisterFunction(T::kIdentifier, handler); + } + + // Decode a payload from the bitstream RPC4 handed to the handler. + template + inline T Read(MafiaNet::BitStream *userData) { + T payload {}; + payload.Serialize(userData, false); + return payload; + } + + // Send a payload to a single system, or broadcast to all connected systems. + template + inline void Signal(MafiaNet::RPC4 *rpc4, T &payload, const MafiaNet::AddressOrGUID &target, bool broadcast, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { + MafiaNet::BitStream bs; + payload.Serialize(&bs, true); + rpc4->Signal(T::kIdentifier, &bs, priority, reliability, 0, target, broadcast, false); + } + + template + inline void Broadcast(MafiaNet::RPC4 *rpc4, T &payload, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { + Signal(rpc4, payload, MafiaNet::UNASSIGNED_RAKNET_GUID, true, priority, reliability); + } + + template + inline void SendTo(MafiaNet::RPC4 *rpc4, T &payload, MafiaNet::RakNetGUID guid, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { + Signal(rpc4, payload, guid, false, priority, reliability); + } } // namespace Framework::Networking::RPC From 52be65be909c0fecb770124f45c7515fde76441a Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:47:03 +0200 Subject: [PATCH 03/48] World: turn the engine into a native replication facade The world engine no longer runs a flecs streaming world. Engine/Server/ ClientEngine are thin facades over ReplicationManager: entities are NetworkEntity*, with CreateEntity(typeId)/RemoveEntity/SetOwner/GetOwner/ GetEntityByNetworkID. The flecs world is retained only for the scripting resource tree. Removes the streaming systems (StreamEntities/AssignEntityOwnership/ TickRateRegulator/...), the Streamable/Streamer/Transform/ServerID components and modules_impl.cpp, the SetTransform/SetFrame game RPCs, and the dead client entity-destroy callback (override NetworkEntity instead). Send macros are now native and global: FW_BROADCAST_RPC / FW_SEND_RPC_TO (engine.h) and FW_SERVER_BROADCAST_RPC_EXCEPT (server.h); the entity-scoped *_GAME_RPC macros are gone. Player/StreamingFactory just stamp ownership (and viewer, server-side); nickname/hwid belong on the game entity now. @ --- code/framework/src/world/client.cpp | 126 +------ code/framework/src/world/client.h | 49 +-- code/framework/src/world/engine.cpp | 58 +--- code/framework/src/world/engine.h | 48 ++- code/framework/src/world/game_rpc/set_frame.h | 48 --- .../src/world/game_rpc/set_transform.h | 36 -- code/framework/src/world/modules/base.hpp | 184 +--------- .../src/world/modules/modules_impl.cpp | 198 ----------- code/framework/src/world/server.cpp | 324 +----------------- code/framework/src/world/server.h | 72 +--- code/framework/src/world/types/player.hpp | 43 +-- code/framework/src/world/types/streaming.hpp | 41 +-- 12 files changed, 121 insertions(+), 1106 deletions(-) delete mode 100644 code/framework/src/world/game_rpc/set_frame.h delete mode 100644 code/framework/src/world/game_rpc/set_transform.h delete mode 100644 code/framework/src/world/modules/modules_impl.cpp diff --git a/code/framework/src/world/client.cpp b/code/framework/src/world/client.cpp index 667bfa5bc..f9234a8ae 100644 --- a/code/framework/src/world/client.cpp +++ b/code/framework/src/world/client.cpp @@ -8,18 +8,9 @@ #include "client.h" -#include "game_rpc/set_frame.h" -#include "game_rpc/set_transform.h" - namespace Framework::World { WorldError ClientEngine::Init() { - if (Engine::Init(nullptr) != WorldError::WORLD_NONE) { // assigned by OnConnect - return WorldError::WORLD_FLECS_INIT_FAILED; - } - - _queryGetEntityByServerID = _world->query_builder().build(); - - return WorldError::WORLD_NONE; + return Engine::Init(nullptr); // peer assigned by OnConnect } void ClientEngine::Shutdown() { @@ -30,121 +21,16 @@ namespace Framework::World { Engine::Update(); } - flecs::entity ClientEngine::GetEntityByServerID(flecs::entity_t id) const { - flecs::entity ent = {}; - _queryGetEntityByServerID.each([&ent, id](flecs::entity e, Modules::Base::ServerID& rhs) { - if (id == rhs.id) { - ent = e; - return; - } - }); - return ent; - } - - flecs::entity_t ClientEngine::GetServerID(flecs::entity entity) { - if (!entity.is_alive()) { - return 0; - } - - if(const auto serverID = entity.try_get()) - return serverID->id; - return 0; - } - - flecs::entity ClientEngine::CreateEntity(flecs::entity_t serverID) const { - const auto e = _world->entity(); - - auto &sid = e.ensure(); - sid.id = serverID; - return e; - } - void ClientEngine::OnConnect(Networking::NetworkPeer *peer, float tickInterval) { + (void)tickInterval; _networkPeer = peer; - - _streamEntities = _world->system("StreamEntities").kind(flecs::PostUpdate).interval(tickInterval).run([this](flecs::iter &it) { - const auto myGUID = _networkPeer->GetPeer()->GetMyGUID(); - - while (it.next()) { - const auto tr = it.field(0); - const auto rs = it.field(1); - - for (auto i : it) { - const auto &es = &rs[i]; - - if (es->GetBaseEvents().updateProc && es->performTickUpdates && Framework::World::Engine::IsEntityOwner(it.entity(i), myGUID.g)) { - es->GetBaseEvents().updateProc(_networkPeer, (MafiaNet::UNASSIGNED_RAKNET_GUID).g, it.entity(i)); - } - } - } - }); - - // Register built-in RPCs - InitRPCs(peer); + // Nothing else to wire: ReplicaManager3 constructs/serializes/destroys entities natively. + // Owned entities serialize upstream automatically via NetworkEntity::QuerySerialization. } void ClientEngine::OnDisconnect() { - if (_streamEntities.is_alive()) { - _streamEntities.destruct(); - } - - _world->defer_begin(); - _allStreamableEntities.each([this](flecs::entity e, Modules::Base::Transform&, Modules::Base::Streamable& str) { - if (_onEntityDestroyCallback) { - if (!_onEntityDestroyCallback(e)) { - return; - } - } - - if (str.modEvents.disconnectProc) { - str.modEvents.disconnectProc(e); - } - - e.destruct(); - }); - _world->defer_end(); - + // Entity teardown is handled natively by ReplicaManager3 when the connection drops + // (QueryActionOnPopConnection_Client deletes server-created replicas). _networkPeer = nullptr; } - void ClientEngine::InitRPCs(Networking::NetworkPeer *net) const { - net->RegisterGameRPC([this](MafiaNet::RakNetGUID guid, RPC::SetTransform *msg) { - if (!msg->Valid()) { - return; - } - const auto e = GetEntityByServerID(msg->GetServerID()); - if (!e.is_alive()) { - return; - } - const auto tr = e.try_get_mut(); - *tr = msg->GetTransform(); - e.modified(); - }); - net->RegisterGameRPC([this](MafiaNet::RakNetGUID guid, RPC::SetFrame *msg) { - if (!msg->Valid()) { - return; - } - const auto e = GetEntityByServerID(msg->GetServerID()); - if (!e.is_alive()) { - return; - } - const auto fr = e.try_get_mut(); - *fr = msg->GetFrame(); - e.modified(); - }); - } - - void ClientEngine::UpdateEntityTransform(flecs::entity entity, const Modules::Base::Transform &rhs) { - if (!entity.is_valid() || !entity.is_alive()) { - return; - } - - auto tr = entity.try_get_mut(); - *tr = rhs; - - const auto str = entity.try_get_mut(); - if (str->modEvents.updateTransformProc) { - str->modEvents.updateTransformProc(entity); - } - entity.modified(); - } } // namespace Framework::World diff --git a/code/framework/src/world/client.h b/code/framework/src/world/client.h index d1b1e30c1..cdf73e38a 100644 --- a/code/framework/src/world/client.h +++ b/code/framework/src/world/client.h @@ -10,45 +10,13 @@ #include "engine.h" -#include - -#include - -#define FW_SEND_CLIENT_COMPONENT_GAME_RPC(rpc, ent, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - s.SetServerID(ent.id()); \ - auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ - if (__net) { \ - __net->SendGameRPC(s); \ - } \ - } while (0) - -#define FW_SEND_CLIENT_COMPONENT_GAME_RPC_TO(rpc, ent, guid, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - s.SetServerID(ent.id()); \ - auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ - if (__net) { \ - __net->SendGameRPC(s, guid); \ - } \ - } while (0) +// A client sends RPCs to the server with FW_BROADCAST_RPC (the client's only connection is the +// server). Entity identity, if any, travels as a NetworkID field inside the payload. To observe +// entity destruction, override Replication::NetworkEntity::DeallocReplica in your entity subclass — +// ReplicaManager3 calls it when the server removes the replica or the connection drops. namespace Framework::World { class ClientEngine final : public Engine { - public: - using OnEntityDestroyCallback = fu2::function; - - protected: - flecs::entity _streamEntities; - flecs::query _queryGetEntityByServerID; - OnEntityDestroyCallback _onEntityDestroyCallback; - - private: - void InitRPCs(Networking::NetworkPeer *peer) const; - public: [[nodiscard]] WorldError Init(); @@ -58,14 +26,5 @@ namespace Framework::World { void OnDisconnect(); void Update() override; - - flecs::entity CreateEntity(flecs::entity_t serverID) const; - flecs::entity GetEntityByServerID(flecs::entity_t id) const; - static flecs::entity_t GetServerID(flecs::entity entity); - static void UpdateEntityTransform(flecs::entity entity, const Modules::Base::Transform &rhs); - - void SetOnEntityDestroyCallback(OnEntityDestroyCallback cb) { - _onEntityDestroyCallback = cb; - } }; } // namespace Framework::World diff --git a/code/framework/src/world/engine.cpp b/code/framework/src/world/engine.cpp index ded2bd83f..543b92e8d 100644 --- a/code/framework/src/world/engine.cpp +++ b/code/framework/src/world/engine.cpp @@ -8,18 +8,12 @@ #include "engine.h" -#include "modules/base.hpp" - namespace Framework::World { WorldError Engine::Init(Networking::NetworkPeer *networkPeer) { _networkPeer = networkPeer; - _world = std::make_unique(); - - // Register a base module - _world->import (); - - _allStreamableEntities = _world->query_builder().build(); - _findAllStreamerEntities = _world->query_builder().build(); + // The flecs world is retained solely for the scripting resource tree; networked entities + // live in the native ReplicationManager. + _world = std::make_unique(); _initialized = true; return WorldError::WORLD_NONE; @@ -30,47 +24,15 @@ namespace Framework::World { } void Engine::Update() { - _world->progress(); - } - - bool Engine::IsEntityOwner(flecs::entity e, uint64_t guid) { - const auto es = e.try_get(); - if (!es) { - return false; - } - return (es->owner == guid); - } - - void Engine::WakeEntity(flecs::entity e) { - if (!e.has()) { - return; + // Resource-tree bookkeeping only; entity replication is driven by ReplicaManager3 from the + // network peer's update loop. + if (_world) { + _world->progress(); } - const auto tr = e.try_get_mut(); - tr->lastGenID--; - const auto es = e.try_get_mut(); - es->updateInterval = es->defaultUpdateInterval; - } - - flecs::entity Engine::GetEntityByGUID(uint64_t guid) const { - flecs::entity ourEntity = {}; - _findAllStreamerEntities.each([&ourEntity, guid](flecs::entity e, Modules::Base::Streamer &s) { - if (ourEntity == flecs::entity::null() && s.guid == guid) { - ourEntity = e; - } - }); - return ourEntity; - } - - flecs::entity Engine::WrapEntity(flecs::entity_t serverID) const { - return flecs::entity(_world->get_world(), serverID); } - void Engine::PurgeAllResourceEntities() const { - _world->defer_begin(); - _findAllResourceEntities.each([this](flecs::entity e, Modules::Base::RemovedOnResourceReload &rhs) { - if (e.is_alive()) - e.add(); - }); - _world->defer_end(); + Replication::NetworkEntity *Engine::GetEntityByNetworkID(MafiaNet::NetworkID networkId) const { + auto *replication = GetReplication(); + return replication ? replication->GetEntityByNetworkID(networkId) : nullptr; } } // namespace Framework::World diff --git a/code/framework/src/world/engine.h b/code/framework/src/world/engine.h index 9c5e5c21c..d66266c28 100644 --- a/code/framework/src/world/engine.h +++ b/code/framework/src/world/engine.h @@ -9,34 +9,39 @@ #pragma once #include "errors.h" -#include "modules/base.hpp" #include #include "networking/network_peer.h" +#include "networking/replication/network_entity.h" +#include "networking/replication/replication_manager.h" +#include "networking/rpc/rpc.h" #include #include #include "core_modules.h" -#define FW_SEND_COMPONENT_RPC(rpc, ...) \ +// Construct an RPC payload from parameters and broadcast it to every connected system. An entity is +// targeted simply by serializing its NetworkID into the payload; there is no separate game-RPC path. +#define FW_BROADCAST_RPC(rpc, ...) \ do { \ auto s = rpc {}; \ s.FromParameters(__VA_ARGS__); \ - auto __net = Framework::CoreModules::GetNetworkPeer(); \ + auto __net = Framework::CoreModules::GetNetworkPeer(); \ if (__net) { \ - __net->SendRPC(s); \ + Framework::Networking::RPC::Broadcast(__net->GetRPC(), s); \ } \ } while (0) -#define FW_SEND_COMPONENT_RPC_TO(rpc, guid, ...) \ +// Construct an RPC payload from parameters and send it to a single system. +#define FW_SEND_RPC_TO(rpc, guid, ...) \ do { \ auto s = rpc {}; \ s.FromParameters(__VA_ARGS__); \ - auto __net = Framework::CoreModules::GetNetworkPeer(); \ + auto __net = Framework::CoreModules::GetNetworkPeer(); \ if (__net) { \ - __net->SendRPC(s, guid); \ + Framework::Networking::RPC::SendTo(__net->GetRPC(), s, guid); \ } \ } while (0) @@ -45,18 +50,19 @@ namespace Framework::Scripting { } namespace Framework::World { + namespace Replication = Framework::Networking::Replication; + + // The world engine is now a thin native facade over MafiaNet's ReplicaManager3 + // (Replication::ReplicationManager), which owns all networked entities (Replication::NetworkEntity). + // The flecs world it keeps is used ONLY by the scripting resource layer for its resource tree, + // not for any networked/entity-streaming purpose (that machinery was removed in the native + // migration). class Engine : public Lifecycle { private: friend class Framework::Scripting::ResourceManager; - void PurgeAllResourceEntities() const; protected: - // NOTE: _world must be declared BEFORE queries so it's destroyed LAST. - // Queries reference the world and must be destroyed before the world. - std::unique_ptr _world; - flecs::query _findAllStreamerEntities; - flecs::query _allStreamableEntities; - flecs::query _findAllResourceEntities; + std::unique_ptr _world; // resource tree only Networking::NetworkPeer *_networkPeer = nullptr; public: @@ -66,11 +72,17 @@ namespace Framework::World { void Update() override; - flecs::entity GetEntityByGUID(uint64_t guid) const; - flecs::entity WrapEntity(flecs::entity_t serverID) const; - static bool IsEntityOwner(flecs::entity e, uint64_t guid); - void WakeEntity(flecs::entity e); + // Native world access. + Replication::ReplicationManager *GetReplication() const { + return _networkPeer ? _networkPeer->GetReplicationManager() : nullptr; + } + Replication::NetworkEntity *GetEntityByNetworkID(MafiaNet::NetworkID networkId) const; + + static bool IsEntityOwner(Replication::NetworkEntity *entity, uint64_t guid) { + return entity && entity->ownerGUID == guid; + } + // Resource-layer flecs world (scripting only). flecs::world *GetWorld() const { return _world.get(); } diff --git a/code/framework/src/world/game_rpc/set_frame.h b/code/framework/src/world/game_rpc/set_frame.h deleted file mode 100644 index 8aab5d2d1..000000000 --- a/code/framework/src/world/game_rpc/set_frame.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "networking/rpc/game_rpc.h" -#include "world/modules/base.hpp" - -#include - -namespace Framework::World::RPC { - class SetFrame final: public Networking::RPC::IGameRPC { - private: - World::Modules::Base::Frame _frame; - - public: - void FromParameters(const World::Modules::Base::Frame &fr) { - _frame = fr; - } - - World::Modules::Base::Frame GetFrame() { - return _frame; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - // Frame holds a std::string (modelName) and so is not trivially-copyable; - // MafiaNet's BitStream refuses to raw-copy such types. Serialize the members - // explicitly and route the string through RakString, matching how the - // networking message classes put strings on the wire. - bs->Serialize(write, _frame.modelHash); - bs->Serialize(write, _frame.scale); - MafiaNet::RakString modelName(_frame.modelName.c_str()); - bs->Serialize(write, modelName); - if (!write) { - _frame.modelName = modelName.C_String(); - } - } - - bool Valid() const override { - return true; - } - }; -} // namespace Framework::World::RPC diff --git a/code/framework/src/world/game_rpc/set_transform.h b/code/framework/src/world/game_rpc/set_transform.h deleted file mode 100644 index 2c589f1cd..000000000 --- a/code/framework/src/world/game_rpc/set_transform.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "networking/rpc/game_rpc.h" -#include "world/modules/base.hpp" - -namespace Framework::World::RPC { - class SetTransform final: public Networking::RPC::IGameRPC { - private: - World::Modules::Base::Transform _transform; - - public: - void FromParameters(const World::Modules::Base::Transform &tr) { - _transform = tr; - } - - World::Modules::Base::Transform GetTransform() const { - return _transform; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _transform); - } - - bool Valid() const override { - return true; - } - }; -} // namespace Framework::World::RPC diff --git a/code/framework/src/world/modules/base.hpp b/code/framework/src/world/modules/base.hpp index e04f3bfe0..117889fcc 100644 --- a/code/framework/src/world/modules/base.hpp +++ b/code/framework/src/world/modules/base.hpp @@ -9,189 +9,17 @@ #pragma once #include -#include -#include -#include -#include -#include - -namespace Framework::Networking { - class NetworkPeer; -} // namespace Framework::Networking - -namespace Framework::World { - class Engine; - class ClientEngine; - - namespace Archetypes { - class StreamingFactory; - } -} // namespace Framework::World +// NOTE: The flecs-based streaming model (Transform/Frame/Streamable/Streamer components, the +// per-tick StreamEntities/AssignEntityOwnership/TickRateRegulator systems and the GameSync* +// messages) has been removed in favour of native MafiaNet replication. Networked entities are now +// Replication::NetworkEntity objects owned by Replication::ReplicationManager; see +// networking/replication/. This Base module is retained only so the scripting resource world has a +// module to import, and currently registers no networked components. namespace Framework::World::Modules { struct Base { - struct Transform { - private: - uint16_t genID = 0; - - public: - glm::vec3 pos {}; - glm::vec3 vel {}; - glm::quat rot = glm::identity(); - - uint16_t GetGeneration() const { - return genID; - } - - void IncrementGeneration() { - ++genID; - } - - bool ValidateGeneration(const Transform &tr) const { - return genID == tr.genID; - } - }; - - struct TickRateRegulator: public Transform { - uint16_t lastGenID = 0; - }; - - struct Frame { - uint64_t modelHash {}; - glm::vec3 scale = glm::vec3(1.0f, 1.0f, 1.0f); - std::string modelName; - }; - - struct PendingRemoval { - [[maybe_unused]] uint8_t _unused; - }; - - struct RemovedOnResourceReload { - [[maybe_unused]] uint8_t _unused; - }; - - struct ServerID { - flecs::entity_t id; - }; - - struct Streamable { - using IsVisibleProc = fu2::function; - using AssignOwnerProc = fu2::function; - using OnDisconnectProc = fu2::function; - using OnUpdateTransformProc = fu2::function; - - enum class HeuristicMode { - ADD, - REPLACE, - REPLACE_POSITION - }; - - int virtualWorld = 0; - bool isVisible = true; - bool alwaysVisible = false; - double defaultUpdateInterval = (1000.0 / 60.0); // 16.1667~ ms interval - double updateInterval = defaultUpdateInterval; - uint64_t owner = 0; - - // If set to true, the owner will not be assigned automatically by the framework - bool assignOwnerManually = false; - - // Allows custom owner assignment logic, if method returns true we bypass framework's proximity based owner assignment - AssignOwnerProc assignOwnerProc; - - struct Events { - using Proc = fu2::function; - Proc spawnProc; - Proc despawnProc; - Proc selfUpdateProc; - Proc updateProc; - Proc ownerUpdateProc; - - // Events used locally for special needs - // These are NOT emitted through the network! - OnDisconnectProc disconnectProc; // called when the client disconnects from server - OnUpdateTransformProc updateTransformProc; // called whenever the server enforces a new transform upon the entity - }; - - // Extra set of events so mod can supply custom data. - Events modEvents; - - // Custom visibility proc that either complements the existing heuristic or replaces it - HeuristicMode isVisibleHeuristic = HeuristicMode::ADD; - IsVisibleProc isVisibleProc; - - // Used to specify list of entities this streamable entity relies on. - // If any of these entities are visible and ours is not, we force ours to be visible too. - std::vector dependentEntities; - - // Controls whether this entity gets to be updated continuously or not - // When set to false, we only stream spawn and despawn events, useful for immovable objects - bool performTickUpdates = true; - - // Framework-level events. - friend Base; - - private: - Events events; - - public: - Events& GetBaseEvents() { - return events; - } - - [[maybe_unused]] Events& GetModEvents() { - return modEvents; - } - }; - - struct Streamer { - using CollectRangeExemptEntities = fu2::function; - struct StreamData { - double lastUpdate = 0.0; - }; - float range = 100.0f; - uint64_t guid = 0xFFFFFFFFFFFFFFFF; - uint16_t playerIndex = 0xFFFF; - std::string nickname; - std::string hardwareId; - std::unordered_map entities; - std::unordered_set rangeExemptEntities; - CollectRangeExemptEntities collectRangeExemptEntitiesProc; - }; - explicit Base(flecs::world &world) { world.module(); - - // TODO expose STL types once https://github.com/SanderMertens/flecs/issues/712 is resolved. - - auto _transform = world.component(); - auto _frame = world.component(); - auto _streamable = world.component(); - auto _streamer = world.component(); - - world.component(); - world.component(); - world.component(); - world.component(); - -// Windows bind metadata -#ifdef _WIN32 - { - auto _vec3 = world.component(); - auto _quat = world.component(); - _vec3.member("x").member("y").member("z"); - _quat.member("w").member("x").member("y").member("z"); - _transform.member("generation").member("pos").member("vel").member("rot"); - _frame.member("modelHash").member("scale"); - _streamable.member("virtualWorld").member("isVisible").member("alwaysVisible").member("updateInterval").member("owner"); - _streamer.member("range").member("guid"); - } -#endif } - - static void SetupServerEmitters(Streamable& streamable); - static void SetupClientEmitters(Streamable& streamable); - static void SetupServerReceivers(Framework::Networking::NetworkPeer *net, Framework::World::Engine *worldEngine); - static void SetupClientReceivers(Framework::Networking::NetworkPeer *net, Framework::World::ClientEngine *worldEngine, Framework::World::Archetypes::StreamingFactory *streamingFactory); }; } // namespace Framework::World::Modules diff --git a/code/framework/src/world/modules/modules_impl.cpp b/code/framework/src/world/modules/modules_impl.cpp deleted file mode 100644 index 6532b93ef..000000000 --- a/code/framework/src/world/modules/modules_impl.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "base.hpp" -#include "networking/messages/game_sync/entity_messages.h" -#include "networking/network_peer.h" -#include "world/client.h" -#include "world/engine.h" - -#include "world/types/streaming.hpp" - -#define CALL_CUSTOM_PROC(kind) \ - const auto streamable = e.try_get(); \ - if (streamable != nullptr) { \ - if (streamable->modEvents.kind != nullptr) { \ - streamable->modEvents.kind(peer, guid, e); \ - } \ - } - -namespace Framework::World::Modules { - void Base::SetupServerEmitters(Streamable& streamable) { - streamable.events.spawnProc = [&](Framework::Networking::NetworkPeer *peer, uint64_t guid, flecs::entity e) { - Framework::Networking::Messages::GameSyncEntitySpawn entitySpawn; - const auto tr = e.try_get(); - if (tr) - entitySpawn.FromParameters(*tr); - entitySpawn.SetServerID(e.id()); - peer->Send(entitySpawn, guid); - CALL_CUSTOM_PROC(spawnProc); - return true; - }; - - streamable.events.despawnProc = [&](Framework::Networking::NetworkPeer *peer, uint64_t guid, flecs::entity e) { - CALL_CUSTOM_PROC(despawnProc); - Framework::Networking::Messages::GameSyncEntityDespawn entityDespawn; - entityDespawn.SetServerID(e.id()); - peer->Send(entityDespawn, guid); - return true; - }; - - streamable.events.selfUpdateProc = [&](Framework::Networking::NetworkPeer *peer, uint64_t guid, flecs::entity e) { - Framework::Networking::Messages::GameSyncEntitySelfUpdate entitySelfUpdate; - entitySelfUpdate.SetServerID(e.id()); - peer->Send(entitySelfUpdate, guid); - CALL_CUSTOM_PROC(selfUpdateProc); - return true; - }; - - streamable.events.updateProc = [&](Framework::Networking::NetworkPeer *peer, uint64_t guid, flecs::entity e) { - const auto tr = e.try_get(); - const auto es = e.try_get(); - // Only send framework update if entity has a valid owner - if (tr && es && es->owner != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { - Framework::Networking::Messages::GameSyncEntityUpdate entityUpdate; - entityUpdate.FromParameters(*tr, es->owner); - entityUpdate.SetServerID(e.id()); - peer->Send(entityUpdate, guid); - } - CALL_CUSTOM_PROC(updateProc); - return true; - }; - - streamable.events.ownerUpdateProc = [&](Framework::Networking::NetworkPeer *peer, uint64_t guid, flecs::entity e) { - const auto tr = e.try_get(); - const auto es = e.try_get(); - // Only send framework owner update if entity has a valid owner - if (tr && es && es->owner != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { - Framework::Networking::Messages::GameSyncEntityOwnerUpdate entityUpdate; - entityUpdate.FromParameters(es->owner); - entityUpdate.SetServerID(e.id()); - peer->Send(entityUpdate, guid); - } - CALL_CUSTOM_PROC(ownerUpdateProc); - return true; - }; - } - void Base::SetupClientEmitters(Streamable& streamable) { - streamable.events.updateProc = [&](Framework::Networking::NetworkPeer *peer, uint64_t guid, flecs::entity e) { - Framework::Networking::Messages::GameSyncEntityUpdate entityUpdate; - const auto tr = e.try_get(); - const auto sid = e.try_get(); - if (tr && sid) { - entityUpdate.FromParameters(*tr, 0); - entityUpdate.SetServerID(sid->id); - } - peer->Send(entityUpdate, guid); - CALL_CUSTOM_PROC(updateProc); - return true; - }; - } - - void Base::SetupServerReceivers(Framework::Networking::NetworkPeer *net, Framework::World::Engine *worldEngine) { - using namespace Framework::Networking::Messages; - net->RegisterMessage(GameMessages::GAME_SYNC_ENTITY_UPDATE, [worldEngine](MafiaNet::RakNetGUID guid, GameSyncEntityUpdate *msg) { - if (!msg->Valid()) { - return; - } - - const auto e = worldEngine->WrapEntity(msg->GetServerID()); - - if (!e.is_alive()) { - return; - } - - if (!worldEngine->IsEntityOwner(e, guid.g)) { - return; - } - - const auto tr = e.try_get_mut(); - const auto incomingTr = msg->GetTransform(); - - if (tr->ValidateGeneration(incomingTr)) { - *tr = incomingTr; - } - }); - } - - void Base::SetupClientReceivers(Framework::Networking::NetworkPeer *net, Framework::World::ClientEngine *worldEngine, Framework::World::Archetypes::StreamingFactory *streamingFactory) { - using namespace Framework::Networking::Messages; - net->RegisterMessage(GameMessages::GAME_SYNC_ENTITY_SPAWN, [worldEngine, streamingFactory](MafiaNet::RakNetGUID guid, GameSyncEntitySpawn *msg) { - if (!msg->Valid()) { - return; - } - if (worldEngine->GetEntityByServerID(msg->GetServerID()).is_alive()) { - return; - } - const auto e = worldEngine->CreateEntity(msg->GetServerID()); - streamingFactory->SetupClient(e, MafiaNet::UNASSIGNED_RAKNET_GUID.g); - - e.add(); - const auto tr = e.try_get_mut(); - *tr = msg->GetTransform(); - }); - net->RegisterMessage(GameMessages::GAME_SYNC_ENTITY_DESPAWN, [worldEngine](MafiaNet::RakNetGUID guid, GameSyncEntityDespawn *msg) { - if (!msg->Valid()) { - return; - } - - const auto e = worldEngine->GetEntityByServerID(msg->GetServerID()); - - if (!e.is_alive()) { - return; - } - - e.destruct(); - }); - net->RegisterMessage(GameMessages::GAME_SYNC_ENTITY_UPDATE, [worldEngine](MafiaNet::RakNetGUID guid, GameSyncEntityUpdate *msg) { - if (!msg->Valid()) { - return; - } - - const auto e = worldEngine->GetEntityByServerID(msg->GetServerID()); - - if (!e.is_alive()) { - return; - } - - const auto tr = e.try_get_mut(); - *tr = msg->GetTransform(); - - const auto es = e.try_get_mut(); - es->owner = msg->GetOwner(); - }); - net->RegisterMessage(GameMessages::GAME_SYNC_ENTITY_OWNER_UPDATE, [worldEngine](MafiaNet::RakNetGUID guid, GameSyncEntityUpdate *msg) { - if (!msg->Valid()) { - return; - } - - const auto e = worldEngine->GetEntityByServerID(msg->GetServerID()); - - if (!e.is_alive()) { - return; - } - const auto es = e.try_get_mut(); - es->owner = msg->GetOwner(); - }); - net->RegisterMessage(GameMessages::GAME_SYNC_ENTITY_SELF_UPDATE, [worldEngine](MafiaNet::RakNetGUID guid, GameSyncEntitySelfUpdate *msg) { - if (!msg->Valid()) { - return; - } - - const auto e = worldEngine->GetEntityByServerID(msg->GetServerID()); - - if (!e.is_alive()) { - return; - } - - // Nothing to do for now. - }); - } -} // namespace Framework::World::Modules diff --git a/code/framework/src/world/server.cpp b/code/framework/src/world/server.cpp index 3a52a4494..2255a344c 100644 --- a/code/framework/src/world/server.cpp +++ b/code/framework/src/world/server.cpp @@ -8,189 +8,12 @@ #include "server.h" -#include "utils/time.h" - namespace Framework::World { WorldError ServerEngine::Init(Framework::Networking::NetworkPeer *networkPeer, ServerConfig cfg) { - if (Engine::Init(networkPeer) != WorldError::WORLD_NONE) { - return WorldError::WORLD_FLECS_INIT_FAILED; - } - - _findAllResourceEntities = _world->query_builder().build(); - - // Set up a system to remove entities we no longer need. - _world->system("RemoveEntities").kind(flecs::PostUpdate).interval(cfg.removeEntitiesTickInterval).each([this](flecs::entity e, Modules::Base::PendingRemoval &pd, Modules::Base::Streamable &streamable) { - // Remove the entity from all streamers. - _findAllStreamerEntities.each([this, &e, &streamable](flecs::entity rhsE, Modules::Base::Streamer &rhsS) { - if (rhsS.entities.contains(e)) { - rhsS.entities.erase(e); - - // Ensure we despawn the entity from the client. - if (streamable.GetBaseEvents().despawnProc) - streamable.GetBaseEvents().despawnProc(_networkPeer, rhsS.guid, e); - } - }); - - e.destruct(); - }); - - // Set up a system to assign entity owners. - _world->system("AssignEntityOwnership").kind(flecs::PostUpdate).interval(cfg.assignOwnershipTickInterval).each([this](flecs::entity e, Modules::Base::Transform &tr, Modules::Base::Streamable &streamable) { - // Let user provide custom ownership assignment. - if (streamable.assignOwnerManually || (streamable.assignOwnerProc && streamable.assignOwnerProc(e, streamable))) { - /* no op */ - } - else { - // Assign the entity to the closest streamer. - uint64_t closestOwnerGUID = MafiaNet::UNASSIGNED_RAKNET_GUID.g; - float closestDist = std::numeric_limits::max(); - _findAllStreamerEntities.each([this, &e, &tr, &closestDist, &closestOwnerGUID, &streamable](flecs::entity rhsE, Modules::Base::Streamer &rhsS) { - const auto rhsTr = rhsE.try_get(); - const auto rhsRs = rhsE.try_get(); - const auto canBeOwner = this->IsEntityVisibleToStreamer(rhsE, e, *rhsTr, rhsS, *rhsRs, tr, streamable); - if (canBeOwner) { - const auto dist = glm::distance(tr.pos, rhsTr->pos); - if (dist < closestDist) { - closestDist = dist; - closestOwnerGUID = rhsS.guid; - } - } - }); - - streamable.owner = closestOwnerGUID; - } - }); - - // Set up a system to collect stream range exempt entities. - _world->system("CollectRangeExemptEntities").kind(flecs::PostUpdate).interval(cfg.collectRangeExemptEntitiesTickInterval).each([this](flecs::entity e, Modules::Base::Streamer &streamer) { - streamer.rangeExemptEntities.clear(); - if (streamer.collectRangeExemptEntitiesProc) - streamer.collectRangeExemptEntitiesProc(e, streamer); - }); - - _world->system("TickRateRegulator").interval(cfg.tickRegulatorInterval).run([](flecs::iter &it) { - while (it.next()) { - const auto tr = it.field(0); - const auto t = it.field(1); - const auto s = it.field(2); - - for (auto i : it) { - bool decreaseRate = true; - constexpr float EPSILON = 0.01f; - - // Check if position has changed - if (glm::abs(t[i].pos.x - tr[i].pos.x) > EPSILON || glm::abs(t[i].pos.y - tr[i].pos.y) > EPSILON || glm::abs(t[i].pos.z - tr[i].pos.z) > EPSILON) { - decreaseRate = false; - } - - // Check if rotation quaternion has changed - if (glm::abs(t[i].rot.x - tr[i].rot.x) > EPSILON || glm::abs(t[i].rot.y - tr[i].rot.y) > EPSILON || glm::abs(t[i].rot.z - tr[i].rot.z) > EPSILON || glm::abs(t[i].rot.w - tr[i].rot.w) > EPSILON) { - decreaseRate = false; - } - - // Check if velocity has changed - if (glm::abs(t[i].vel.x - tr[i].vel.x) > EPSILON || glm::abs(t[i].vel.y - tr[i].vel.y) > EPSILON || glm::abs(t[i].vel.z - tr[i].vel.z) > EPSILON) { - decreaseRate = false; - } - - // Check if generation ID has changed - if (t[i].GetGeneration() != tr[i].lastGenID) { - decreaseRate = true; - } - - // Update all values - tr[i].lastGenID = t[i].GetGeneration(); - tr[i].pos = t[i].pos; - tr[i].rot = t[i].rot; - tr[i].vel = t[i].vel; - - // Decrease tick rate if needed - if (decreaseRate) { - s[i].updateInterval += 5.0f; - } - else { - s[i].updateInterval = s[i].defaultUpdateInterval; - } - } - } - }); - - // Set up a system to stream entities to clients. - _world->system("StreamEntities") - .kind(flecs::PostUpdate) - .interval(cfg.tickInterval) - .run([this](flecs::iter &it) { - while (it.next()) { - const auto tr = it.field(0); - const auto s = it.field(1); - const auto rs = it.field(2); - - for (auto i : it) { - // Skip streamer entities we plan to remove. - if (it.entity(i).has()) - continue; - - // Grab all streamable entities. - _allStreamableEntities.each([&](flecs::entity e, Modules::Base::Transform &otherTr, Modules::Base::Streamable &otherS) { - // Skip dead entities. - if (!e.is_alive()) - return; - - // Let streamer send an update to self if an event is assigned. - if (e == it.entity(i) && rs[i].GetBaseEvents().selfUpdateProc && rs[i].performTickUpdates) { - rs[i].GetBaseEvents().selfUpdateProc(_networkPeer, s[i].guid, e); - return; - } - - // Figure out entity visibility. - const auto id = e.id(); - const auto canSend = this->IsEntityVisibleToStreamer(it.entity(i), e, tr[i], s[i], rs[i], otherTr, otherS); - const auto map_it = s[i].entities.find(id); - - // Entity is already known to this streamer. - if (map_it != s[i].entities.end()) { - // If we can't stream an entity anymore, despawn it - if (!canSend) { - s[i].entities.erase(map_it); - if (otherS.GetBaseEvents().despawnProc) - otherS.GetBaseEvents().despawnProc(_networkPeer, s[i].guid, e); - } - - // otherwise we do regular updates - else if (rs[i].owner != otherS.owner) { - auto &data = map_it->second; - if (static_cast(Utils::Time::GetTime()) - data.lastUpdate > otherS.updateInterval) { - if (otherS.GetBaseEvents().updateProc && rs[i].performTickUpdates) - otherS.GetBaseEvents().updateProc(_networkPeer, s[i].guid, e); - data.lastUpdate = static_cast(Utils::Time::GetTime()); - } - } - else { - auto &data = map_it->second; - - // If the entity is owned by this streamer, we send a full update. - if (static_cast(Utils::Time::GetTime()) - data.lastUpdate > otherS.updateInterval) { - if (otherS.GetBaseEvents().ownerUpdateProc) - otherS.GetBaseEvents().ownerUpdateProc(_networkPeer, s[i].guid, e); - data.lastUpdate = static_cast(Utils::Time::GetTime()); - } - } - } - - // this is a new entity, spawn it unless user says otherwise - else if (canSend && otherS.GetBaseEvents().spawnProc) { - if (otherS.GetBaseEvents().spawnProc(_networkPeer, s[i].guid, e)) { - Modules::Base::Streamer::StreamData data; - data.lastUpdate = static_cast(Utils::Time::GetTime()); - s[i].entities[id] = data; - } - } - }); - } - } - }); - - return WorldError::WORLD_NONE; + _cfg = cfg; + // No flecs streaming systems anymore — relevance, ownership and serialization are handled + // natively by ReplicaManager3 (GridSectorizer interest + per-entity QuerySerialization). + return Engine::Init(networkPeer); } void ServerEngine::Shutdown() { @@ -201,141 +24,24 @@ namespace Framework::World { Engine::Update(); } - flecs::entity ServerEngine::CreateEntity(const std::string &name) const { - if (name.empty()) { - return _world->entity(); - } - else { - return _world->entity(name.c_str()); - } - } - - void ServerEngine::SetOwner(flecs::entity e, uint64_t guid) { - const auto es = e.try_get_mut(); - if (!es) { - return; - } - es->owner = guid; - } - - flecs::entity ServerEngine::GetOwner(flecs::entity e) const { - const auto es = e.try_get(); - if (!es) { - return flecs::entity::null(); - } - return GetEntityByGUID(es->owner); + Replication::NetworkEntity *ServerEngine::CreateEntity(uint32_t typeId) const { + auto *replication = GetReplication(); + return replication ? replication->CreateEntity(typeId) : nullptr; } - std::vector ServerEngine::FindVisibleStreamers(flecs::entity e) const { - std::vector streamers; - const auto es = e.try_get(); - if (!es) { - return {}; + void ServerEngine::RemoveEntity(Replication::NetworkEntity *entity) const { + if (auto *replication = GetReplication()) { + replication->DestroyEntity(entity); } - _findAllStreamerEntities.each([this, e, &streamers, es](flecs::entity rhsE, Modules::Base::Streamer &rhsS) { - const auto rhsTr = rhsE.try_get(); - const auto rhsST = rhsE.try_get(); - const auto lhsTr = e.try_get(); - if (!rhsTr || !rhsST || !lhsTr) { - return; - } - - if (this->IsEntityVisibleToStreamer(rhsE, e, *rhsTr, rhsS, *rhsST, *lhsTr, *es)) { - streamers.push_back(rhsE); - } - }); - return streamers; } - bool ServerEngine::RemoveEntity(flecs::entity e) { - if (e.is_alive() && !e.has()) { - e.add(); - return true; + void ServerEngine::SetOwner(Replication::NetworkEntity *entity, uint64_t guid) const { + if (entity) { + entity->ownerGUID = guid; } - return false; - } - - bool ServerEngine::IsEntityVisibleToStreamer(const flecs::entity streamerEntity, const flecs::entity e, const Modules::Base::Transform &lhsTr, const Modules::Base::Streamer &streamer, const Modules::Base::Streamable &lhsS, const Modules::Base::Transform &rhsTr, - const Modules::Base::Streamable& rhsS) const - { - std::unordered_set visited; - return IsEntityVisibleToStreamerInternal(streamerEntity, e, lhsTr, streamer, lhsS, rhsTr, rhsS, visited); } - bool ServerEngine::IsEntityVisibleToStreamerInternal(const flecs::entity streamerEntity, const flecs::entity e, const Modules::Base::Transform &lhsTr, const Modules::Base::Streamer &streamer, const Modules::Base::Streamable &lhsS, const Modules::Base::Transform &rhsTr, - const Modules::Base::Streamable& rhsS, std::unordered_set &visited) const - { - if (!e.is_valid()) - return false; - if (!e.is_alive()) - return false; - - // Discard entities that we plan to remove. - if (e.has()) - return false; - - // Allow user to override visibility rules completely. - if (rhsS.isVisibleProc && rhsS.isVisibleHeuristic == Modules::Base::Streamable::HeuristicMode::REPLACE) { - return rhsS.isVisibleProc(streamerEntity, e); - } - - // Mark this entity as visited to prevent infinite recursion in cyclic dependencies. - if (!visited.insert(e.id()).second) { - // Already visited - we're in a cycle, skip dependent check for this entity. - // Continue with the remaining visibility checks. - } - else { - // Check our dependents, if any of them are visible, we are visible as well. - for (const auto &dependentEntity : rhsS.dependentEntities) { - if (!dependentEntity.is_valid() || !dependentEntity.is_alive()) - continue; - if (e == dependentEntity) - continue; - // Skip if already visited (part of a cycle) - if (visited.contains(dependentEntity.id())) - continue; - const auto &dependentS = dependentEntity.try_get(); - const auto &dependentTr = dependentEntity.try_get(); - if (!dependentS || !dependentTr) - continue; - if (IsEntityVisibleToStreamerInternal(streamerEntity, dependentEntity, lhsTr, streamer, lhsS, *dependentTr, *dependentS, visited)) { - return true; - } - } - } - - // Entity is always visible to clients. - if (rhsS.alwaysVisible) - return true; - - // Entity can be hidden from clients. - if (!rhsS.isVisible) - return false; - - // Validate if the entity resides in the same virtual world client does. - if (lhsS.virtualWorld != rhsS.virtualWorld) - return false; - - // Let user replace the distance check. - if (rhsS.isVisibleProc && rhsS.isVisibleHeuristic == Modules::Base::Streamable::HeuristicMode::REPLACE_POSITION) { - return rhsS.isVisibleProc(streamerEntity, e); - } - - // Perform distance check. - const auto dist = glm::distance(lhsTr.pos, rhsTr.pos); - auto isVisible = dist < streamer.range; - - // If we made it this far and the entity is streaming range check exempt - // we override isVisible state to True. - if (streamer.rangeExemptEntities.contains(e.id())) { - isVisible = true; - } - - // Allow user to provide additional rules for visibility. - if (rhsS.isVisibleProc && rhsS.isVisibleHeuristic == Modules::Base::Streamable::HeuristicMode::ADD) { - isVisible = isVisible && rhsS.isVisibleProc(streamerEntity, e); - } - - return isVisible; + uint64_t ServerEngine::GetOwner(Replication::NetworkEntity *entity) const { + return entity ? entity->ownerGUID : 0xFFFFFFFFFFFFFFFF; } } // namespace Framework::World diff --git a/code/framework/src/world/server.h b/code/framework/src/world/server.h index e4e1ba4d3..7d6a0b320 100644 --- a/code/framework/src/world/server.h +++ b/code/framework/src/world/server.h @@ -10,80 +10,44 @@ #include "engine.h" -#include - -#include -#include +#include #include -#include -#include -#define FW_SEND_SERVER_COMPONENT_GAME_RPC(rpc, ent, ...) \ +// Broadcast an RPC payload from the server to everyone except one system (typically the originating +// client). Entity identity, if any, is carried inside the payload (a NetworkID field) — there is no +// separate game-RPC concept. For plain broadcast or targeted sends use FW_BROADCAST_RPC / +// FW_SEND_RPC_TO from engine.h. +#define FW_SERVER_BROADCAST_RPC_EXCEPT(rpc, guid, ...) \ do { \ auto s = rpc {}; \ s.FromParameters(__VA_ARGS__); \ - s.SetServerID(ent.id()); \ - auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ + auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ if (__net) { \ - __net->SendGameRPC(static_cast(Framework::CoreModules::GetWorldEngine()), s); \ - } \ - } while (0) - -#define FW_SEND_SERVER_COMPONENT_GAME_RPC_EXCEPT(rpc, ent, guid, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - s.SetServerID(ent.id()); \ - auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ - if (__net) { \ - __net->SendGameRPC(static_cast(Framework::CoreModules::GetWorldEngine()), s, MafiaNet::UNASSIGNED_RAKNET_GUID, guid); \ - } \ - } while (0) - -#define FW_SEND_SERVER_COMPONENT_GAME_RPC_TO(rpc, ent, guid, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - s.SetServerID(ent.id()); \ - auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ - if (__net) { \ - __net->SendGameRPC(static_cast(Framework::CoreModules::GetWorldEngine()), s, guid); \ + __net->BroadcastRPCExcept(s, guid); \ } \ } while (0) namespace Framework::World { class ServerEngine final : public Engine { - protected: - using IsVisibleProc = fu2::function; - - private: - bool IsEntityVisibleToStreamerInternal(const flecs::entity streamerEntity, const flecs::entity e, const Modules::Base::Transform &lhsTr, const Modules::Base::Streamer &streamer, const Modules::Base::Streamable &lhsS, const Modules::Base::Transform &rhsTr, - const Modules::Base::Streamable &rhsS, std::unordered_set &visited) const; - public: struct ServerConfig { - float tickInterval = 0.016667f; - float streamerTickInterval = 0.033334f; - float assignOwnershipTickInterval = 3.0f; - float collectRangeExemptEntitiesTickInterval = 0.066668f; - float removeEntitiesTickInterval = 0.066668f; - float tickRegulatorInterval = 3.0f; + float tickInterval = 0.016667f; }; [[nodiscard]] WorldError Init(Framework::Networking::NetworkPeer *networkPeer, ServerConfig cfg); void Shutdown() override; - void Update() override; - flecs::entity CreateEntity(const std::string &name = "") const; - static bool RemoveEntity(flecs::entity e); + // Native entity lifecycle. CreateEntity constructs a registered entity type and starts + // replicating it; the caller fills in its state and (for players) registers it as a viewer. + Replication::NetworkEntity *CreateEntity(uint32_t typeId) const; + void RemoveEntity(Replication::NetworkEntity *entity) const; - static void SetOwner(flecs::entity e, uint64_t guid); - flecs::entity GetOwner(flecs::entity e) const; - [[maybe_unused]] std::vector FindVisibleStreamers(flecs::entity e) const; - bool IsEntityVisibleToStreamer(const flecs::entity streamerEntity, const flecs::entity e, const Modules::Base::Transform &lhsTr, const Modules::Base::Streamer &streamer, const Modules::Base::Streamable &lhsS, const Modules::Base::Transform &rhsTr, - const Modules::Base::Streamable &rhsS) const; + void SetOwner(Replication::NetworkEntity *entity, uint64_t guid) const; + uint64_t GetOwner(Replication::NetworkEntity *entity) const; + + private: + ServerConfig _cfg {}; }; } // namespace Framework::World diff --git a/code/framework/src/world/types/player.hpp b/code/framework/src/world/types/player.hpp index b428d6b66..a5aedc014 100644 --- a/code/framework/src/world/types/player.hpp +++ b/code/framework/src/world/types/player.hpp @@ -8,38 +8,31 @@ #pragma once -#include +#include "networking/replication/network_entity.h" -#include "world/modules/base.hpp" - -#include +#include namespace Framework::World::Archetypes { - class PlayerFactory { - private: - inline void SetupDefaults(flecs::entity e, uint64_t guid) { - auto &streamer = e.ensure(); - streamer.guid = guid; - } + namespace Replication = Framework::Networking::Replication; + // Configures a native entity as a player's avatar: it owns itself and (on the server) acts as the + // connection's viewer — its position/streamRange drive that client's interest set. The caller + // must still register it with the ReplicationManager as the viewer for the player's GUID + // (ReplicationManager::SetViewer). Player metadata such as nickname or hardware id is no longer + // tracked here; carry it on your game's player NetworkEntity subclass. + class PlayerFactory { public: - inline void SetupClient(flecs::entity e, uint64_t guid) { - SetupDefaults(e, guid); + void SetupClient(Replication::NetworkEntity *entity, uint64_t guid) { + if (entity) { + entity->ownerGUID = guid; + } } - inline void SetupServer(flecs::entity e, uint64_t guid, uint16_t playerIndex, const std::string &nickname, const std::string &hardwareId = "") { - SetupDefaults(e, guid); - - auto &streamable = e.ensure(); - streamable.assignOwnerProc = [](flecs::entity, World::Modules::Base::Streamable &) { - return true; /* always keep current owner */ - }; - - auto &streamer = e.ensure(); - streamer.nickname = nickname; - streamer.playerIndex = playerIndex; - streamer.guid = guid; - streamer.hardwareId = hardwareId; + void SetupServer(Replication::NetworkEntity *entity, uint64_t guid) { + if (entity) { + entity->ownerGUID = guid; + entity->isViewer = true; + } } }; } // namespace Framework::World::Archetypes diff --git a/code/framework/src/world/types/streaming.hpp b/code/framework/src/world/types/streaming.hpp index f87366cc5..399721f5b 100644 --- a/code/framework/src/world/types/streaming.hpp +++ b/code/framework/src/world/types/streaming.hpp @@ -8,39 +8,26 @@ #pragma once -#include +#include "networking/replication/network_entity.h" -#include "world/modules/base.hpp" +#include namespace Framework::World::Archetypes { - class StreamingFactory { - private: - inline void SetupDefaults(flecs::entity e, uint64_t guid) { - e.add(); - - auto &streamable = e.ensure(); - streamable.owner = guid; - streamable.defaultUpdateInterval = CoreModules::GetTickRate() * 1000.0f; // we need ms here - - e.add(); - } + namespace Replication = Framework::Networking::Replication; + // Configures a freshly created native entity for streaming. With native replication most of the + // old per-entity streaming state is gone; this just stamps ownership. + class StreamingFactory { public: - inline void SetupClient(flecs::entity e, uint64_t guid) { - SetupDefaults(e, guid); - - auto& streamable = e.ensure(); - Framework::World::Modules::Base::SetupClientEmitters(streamable); - - auto ass = e.get_mut(); - (void)ass; + void SetupServer(Replication::NetworkEntity *entity, uint64_t guid) { + if (entity) { + entity->ownerGUID = guid; + } } - - inline void SetupServer(flecs::entity e, uint64_t guid) { - SetupDefaults(e, guid); - - auto& streamable = e.ensure(); - Framework::World::Modules::Base::SetupServerEmitters(streamable); + void SetupClient(Replication::NetworkEntity *entity, uint64_t guid) { + if (entity) { + entity->ownerGUID = guid; + } } }; } // namespace Framework::World::Archetypes From 58929a92990fcae50f736036bfbececd07828997 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:47:15 +0200 Subject: [PATCH 04/48] Integrations: adapt server/client to native replication + RPC4 Server: the player avatar is created by the game in its onPlayerConnect handler (which now receives just the GUID) and registered as the viewer; disconnect clears the viewer mapping and lets ReplicaManager3 tear down the player entities. ClientConnectionFinalized no longer carries an entity id. Client: the local avatar arrives via replication (recognised by ownerGUID == myGUID); the connection-finalized callback only carries the tick rate. EmitLuaEvent is now a native RPC payload handled by a plain RPC4 function that reaches the scripting engine via CoreModules. CMake: build the networking/replication sources; drop modules_impl.cpp. @ --- code/framework/CMakeLists.txt | 7 +- .../src/integrations/client/instance.cpp | 145 +++++++++--------- .../src/integrations/client/instance.h | 4 +- .../src/integrations/server/instance.cpp | 39 ++--- .../src/integrations/server/instance.h | 3 +- .../integrations/shared/rpc/emit_lua_event.h | 37 +++-- 6 files changed, 118 insertions(+), 117 deletions(-) diff --git a/code/framework/CMakeLists.txt b/code/framework/CMakeLists.txt index d1cd75388..b854da288 100644 --- a/code/framework/CMakeLists.txt +++ b/code/framework/CMakeLists.txt @@ -22,11 +22,16 @@ set(FRAMEWORK_SRC src/world/engine.cpp src/world/server.cpp src/world/client.cpp - src/world/modules/modules_impl.cpp src/networking/network_peer.cpp src/networking/errors.cpp + # Native MafiaNet entity replication (ReplicaManager3-based; entities own their state, no ECS) + src/networking/replication/network_entity.cpp + src/networking/replication/entity_factory.cpp + src/networking/replication/replication_manager.cpp + src/networking/replication/replication_connection.cpp + # JavaScript scripting engine base and builtins (used by both client and server) # Note: node_engine.cpp and v8_engine.cpp are in OBJECT libraries due to special compile flags src/scripting/engine.cpp diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 1be09908f..ab89e058e 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -15,10 +15,11 @@ #include #include -#include #include "integrations/shared/rpc/emit_lua_event.h" +#include "networking/rpc/rpc.h" + #include "../shared/modules/mod.hpp" #include "scripting/resource/resource_manager.h" @@ -44,6 +45,70 @@ #include "graphics/backend/d3d9.h" namespace Framework::Integrations::Client { + namespace { + // Native RPC4 handler for server-emitted scripting events. RPC4 dispatches to plain C + // functions, so this reaches the scripting engine through the CoreModules singleton rather + // than capturing the Instance. + void OnEmitLuaEvent(MafiaNet::BitStream *userData, MafiaNet::Packet *packet) { + (void)packet; + const auto rpc = Framework::Networking::RPC::Read(userData); + const auto eventName = rpc.GetEventName(); + if (eventName.empty()) { + return; + } + const auto payloadStr = rpc.GetPayload(); + + auto *scriptingModule = static_cast(Framework::CoreModules::GetScriptingModule()); + if (!scriptingModule) { + return; + } + + // Emit to JavaScript resources via the Events system + auto resourceManager = scriptingModule->GetResourceManager(); + if (!resourceManager) { + return; + } + + auto *engine = scriptingModule->GetEngine(); + if (!engine || !engine->IsInitialized()) { + return; + } + + v8::Isolate *isolate = engine->GetIsolate(); + v8::Locker locker(isolate); + v8::Isolate::Scope isolateScope(isolate); + v8::HandleScope handleScope(isolate); + v8::Local context = engine->GetContext(); + v8::Context::Scope contextScope(context); + + // Parse JSON payload and emit event + std::vector> args; + if (!payloadStr.empty()) { + v8::Local jsonStr; + if (!v8::String::NewFromUtf8(isolate, payloadStr.c_str()).ToLocal(&jsonStr)) { + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("Failed to create V8 string from event payload: {}", payloadStr); + return; + } + + v8::TryCatch tryCatch(isolate); + v8::Local parsed; + if (!v8::JSON::Parse(context, jsonStr).ToLocal(&parsed)) { + if (tryCatch.HasCaught()) { + v8::String::Utf8Value errorMsg(isolate, tryCatch.Exception()); + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("Failed to parse event payload JSON: {}", *errorMsg ? *errorMsg : "unknown error"); + } + else { + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("Failed to parse event payload JSON: {}", payloadStr); + } + return; + } + args.push_back(parsed); + } + + resourceManager->GetEvents().EmitReserved(isolate, context, eventName, args); + } + } // namespace + bool AssetDownloadFileProgress::OnFile(MafiaNet::FileListTransferCBInterface::OnFileStruct *onFileStruct) { if (onFileStruct->numberOfFilesInThisSet > 0) { auto &downloadStatus = _instance->GetAssetDownloadStatus(); @@ -324,19 +389,15 @@ namespace Framework::Integrations::Client { net->RegisterMessage(GameMessages::GAME_CONNECTION_FINALIZED, [this, net](MafiaNet::RakNetGUID _guid, ClientConnectionFinalized *msg) { Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection request finalized"); _worldEngine->OnConnect(net, msg->GetServerTickRate()); - const auto guid = GetNetworkingEngine()->GetNetworkClient()->GetPeer()->GetMyGUID(); - - const auto newPlayer = GetWorldEngine()->CreateEntity(msg->GetEntityID()); - GetStreamingFactory()->SetupClient(newPlayer, guid.g); - GetPlayerFactory()->SetupClient(newPlayer, guid.g); - // Notify server we are ready to obtain player data + // The local player's avatar arrives via native replication (the server constructs it, + // owned by us); the game recognizes it in NetworkEntity::OnConstructed by ownerGUID. Framework::Networking::Messages::ClientInitPlayer initPlayer {}; net->Send(initPlayer, MafiaNet::UNASSIGNED_RAKNET_GUID); - // Notify mod-level that network integration whole process succeeded + // Notify mod-level that the network integration handshake succeeded. if (_onConnectionFinalized) { - _onConnectionFinalized(newPlayer, msg->GetServerTickRate()); + _onConnectionFinalized(msg->GetServerTickRate()); } }); net->RegisterMessage(GameMessages::GAME_CONNECTION_KICKED, [](MafiaNet::RakNetGUID guid, ClientKick *msg) { @@ -353,18 +414,6 @@ namespace Framework::Integrations::Client { } Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection dropped: {}", reason); }); - net->RegisterGameRPC([this](MafiaNet::RakNetGUID guid, Framework::World::RPC::SetTransform *msg) { - if (!msg->Valid()) { - return; - } - const auto e = GetWorldEngine()->GetEntityByServerID(msg->GetServerID()); - if (!e.is_alive()) { - return; - } - - const auto tr = e.try_get_mut(); - *tr = msg->GetTransform(); - }); net->SetOnPlayerDisconnectedCallback([this](MafiaNet::Packet *packet, Framework::Networking::Messages::DisconnectionReason reasonId) { // Reset initial asset download state _initialDownloadDone = false; @@ -391,59 +440,9 @@ namespace Framework::Integrations::Client { } }); - net->RegisterRPC([this](MafiaNet::RakNetGUID guid, Shared::RPC::EmitLuaEvent *rpc) { - if (!rpc->Valid()) - return; - const auto eventName = rpc->GetEventName(); - const auto payloadStr = rpc->GetPayload(); - - // Emit to JavaScript resources via the Events system - auto resourceManager = _scriptingModule->GetResourceManager(); - if (!resourceManager) { - return; - } - - auto *engine = _scriptingModule->GetEngine(); - if (!engine || !engine->IsInitialized()) { - return; - } - - v8::Isolate *isolate = engine->GetIsolate(); - v8::Locker locker(isolate); - v8::Isolate::Scope isolateScope(isolate); - v8::HandleScope handleScope(isolate); - v8::Local context = engine->GetContext(); - v8::Context::Scope contextScope(context); - - // Parse JSON payload and emit event - std::vector> args; - if (!payloadStr.empty()) { - v8::Local jsonStr; - if (!v8::String::NewFromUtf8(isolate, payloadStr.c_str()).ToLocal(&jsonStr)) { - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("Failed to create V8 string from event payload: {}", payloadStr); - return; - } - - v8::TryCatch tryCatch(isolate); - v8::Local parsed; - if (!v8::JSON::Parse(context, jsonStr).ToLocal(&parsed)) { - if (tryCatch.HasCaught()) { - v8::String::Utf8Value errorMsg(isolate, tryCatch.Exception()); - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("Failed to parse event payload JSON: {}", *errorMsg ? *errorMsg : "unknown error"); - } else { - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("Failed to parse event payload JSON: {}", payloadStr); - } - return; - } - args.push_back(parsed); - } - - resourceManager->GetEvents().EmitReserved(isolate, context, eventName, args); - }); - - Framework::World::Modules::Base::SetupClientReceivers(net, _worldEngine.get(), _streamingFactory.get()); + Framework::Networking::RPC::Register(net->GetRPC(), &OnEmitLuaEvent); - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Game sync networking messages registered"); + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Networking messages registered"); } void Instance::DownloadsAssetsFromConnectedServer() { diff --git a/code/framework/src/integrations/client/instance.h b/code/framework/src/integrations/client/instance.h index 191f112a3..38d8dce25 100644 --- a/code/framework/src/integrations/client/instance.h +++ b/code/framework/src/integrations/client/instance.h @@ -36,7 +36,9 @@ #include namespace Framework::Integrations::Client { - using NetworkConnectionFinalizedCallback = fu2::function; + // The local player's avatar arrives via replication; the handshake callback only carries the + // server tick rate now. + using NetworkConnectionFinalizedCallback = fu2::function; using NetworkConnectionClosedCallback = fu2::function; using AssetsDownloadFinishedCallback = fu2::function; diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index d60cfb5ec..1f0587b3e 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -313,53 +313,48 @@ namespace Framework::Integrations::Server { const auto guid = packet->guid; Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Disconnecting peer {}, reason: {}", guid.g, static_cast(reason)); - const auto e = _worldEngine->GetEntityByGUID(guid.g); - if (e.is_valid()) { - if (_onPlayerDisconnectCallback) - _onPlayerDisconnectCallback(e, guid.g); + // Native replication tears down the player's entities when the connection drops + // (QueryActionOnPopConnection); we just notify the game and clear its viewer mapping. + if (_onPlayerDisconnectCallback) + _onPlayerDisconnectCallback(guid.g); - _worldEngine->RemoveEntity(e); - } + if (auto *replication = net->GetReplicationManager()) + replication->ClearViewer(guid.g); net->GetPeer()->CloseConnection(guid, true); }); net->RegisterMessage(GameMessages::GAME_CONNECTION_REQUEST_STREAMER, [this, net](MafiaNet::RakNetGUID guid, ClientRequestStreamer *msg) { - // Create player entity and add on world - const auto newPlayer = _worldEngine->CreateEntity(); - _streamingFactory->SetupServer(newPlayer, guid.g); - auto nickname = msg->GetPlayerName(); if (nickname.size() > 64) { nickname = nickname.substr(0, 64); } - auto hardwareId = msg->GetPlayerHardwareID(); + Logging::GetLogger(FRAMEWORK_INNER_SERVER)->info("Player {} guid {} hwid {}", msg->GetPlayerName(), guid.g, msg->GetPlayerHardwareID()); - _playerFactory->SetupServer(newPlayer, guid.g, guid.systemIndex, nickname, hardwareId); + // The game creates the player's avatar entity (a native NetworkEntity subclass) and + // registers it as this connection's viewer inside its onPlayerConnect handler. + if (_onPlayerConnectCallback) + _onPlayerConnectCallback(guid.g); - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->info("Player {} guid {} entity id {} hwid {}", msg->GetPlayerName(), guid.g, newPlayer.id(), hardwareId); - - // Send the connection finalized packet + // Finalize the connection (carries the server tick rate). Framework::Networking::Messages::ClientConnectionFinalized answer; - answer.FromParameters(_opts.worldConfig.tickInterval, newPlayer.id()); + answer.FromParameters(_opts.worldConfig.tickInterval); net->Send(answer, guid); }); net->RegisterMessage(Framework::Networking::Messages::GameMessages::GAME_INIT_PLAYER, [this, net](MafiaNet::RakNetGUID guid, ClientInitPlayer *stub) { - const auto e = _worldEngine->GetEntityByGUID(guid.g); - if (_onPlayerConnectCallback && e.is_valid() && e.is_alive()) - _onPlayerConnectCallback(e, guid.g); + (void)guid; + (void)stub; + // Player setup now happens on connect; retained only for protocol compatibility. }); // Note: Client-to-server events are handled through the JS Events system // The client can emit events via Framework.events.emitToServer() which uses // the networking messages system to send events to the server - Framework::World::Modules::Base::SetupServerReceivers(net, _worldEngine.get()); - - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Game sync networking messages registered"); + Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Networking messages registered"); } void Instance::InitAssetStreamer() { diff --git a/code/framework/src/integrations/server/instance.h b/code/framework/src/integrations/server/instance.h index eb747bb14..58b62cbf3 100644 --- a/code/framework/src/integrations/server/instance.h +++ b/code/framework/src/integrations/server/instance.h @@ -81,7 +81,8 @@ namespace Framework::Integrations::Server { }; - using OnPlayerConnectionCallback = fu2::function; + // The game creates/owns the player's entity; the framework only hands it the connection GUID. + using OnPlayerConnectionCallback = fu2::function; class Instance : public Framework::Lifecycle { private: diff --git a/code/framework/src/integrations/shared/rpc/emit_lua_event.h b/code/framework/src/integrations/shared/rpc/emit_lua_event.h index 75f7b7dc6..02f3ad27c 100644 --- a/code/framework/src/integrations/shared/rpc/emit_lua_event.h +++ b/code/framework/src/integrations/shared/rpc/emit_lua_event.h @@ -8,37 +8,36 @@ #pragma once -#include +#include +#include #include namespace Framework::Integrations::Shared::RPC { - class EmitLuaEvent final: public Framework::Networking::RPC::IRPC { - private: - MafiaNet::RakString _eventName; - MafiaNet::RakString _payload; - - public: - void FromParameters(const std::string &name, const std::string &payload) { - _eventName = name.c_str(); - _payload = payload.c_str(); - } + // Native RPC payload: forwards a named scripting event (with a JSON payload) to the other peer's + // resource layer. See networking/rpc/rpc.h for the dispatch model. + struct EmitLuaEvent { + static constexpr const char *kIdentifier = "Framework::EmitLuaEvent"; + + MafiaNet::RakString eventName; + MafiaNet::RakString payload; - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _eventName); - bs->Serialize(write, _payload); + void FromParameters(const std::string &name, const std::string &payloadJson) { + eventName = name.c_str(); + payload = payloadJson.c_str(); } - bool Valid() const override { - return !_eventName.IsEmpty(); + void Serialize(MafiaNet::BitStream *bs, bool write) { + bs->Serialize(write, eventName); + bs->Serialize(write, payload); } std::string GetEventName() const { - return _eventName.C_String(); + return eventName.C_String(); } std::string GetPayload() const { - return _payload.C_String(); + return payload.C_String(); } }; -} +} // namespace Framework::Integrations::Shared::RPC From f8e0882c774b37115405e72b5e19d8e0ab8d0d33 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 18:13:02 +0200 Subject: [PATCH 05/48] Networking: send RPCs via typed peer methods, tidy comments Drop the FW_*_RPC send macros in favour of typed wrapper methods: NetworkPeer::RegisterRPC/BroadcastRPC/SendRPC and NetworkServer::BroadcastRPCExcept. rpc.h keeps only the Read decode helper for handlers. Reword comments that narrated the migration into plain descriptions of the current code. @ --- .../src/integrations/client/instance.cpp | 12 ++-- .../src/integrations/client/instance.h | 3 +- .../src/integrations/server/instance.cpp | 12 ++-- .../src/integrations/server/instance.h | 2 +- .../integrations/shared/rpc/emit_lua_event.h | 2 +- .../messages/client_connection_finalized.h | 2 - .../src/networking/messages/messages.h | 5 +- .../src/networking/network_client.cpp | 3 +- .../framework/src/networking/network_peer.cpp | 8 +-- code/framework/src/networking/network_peer.h | 35 +++++++--- .../src/networking/network_server.cpp | 2 +- .../framework/src/networking/network_server.h | 7 +- .../networking/replication/network_entity.h | 28 ++++---- .../replication/replication_connection.h | 6 +- .../replication/replication_manager.h | 8 +-- code/framework/src/networking/rpc/rpc.h | 62 +++--------------- .../services/lib/Release/MafiaHubServices.lib | Bin 0 -> 5729944 bytes code/framework/src/world/client.h | 5 -- code/framework/src/world/engine.cpp | 6 +- code/framework/src/world/engine.h | 34 +--------- code/framework/src/world/modules/base.hpp | 8 +-- code/framework/src/world/server.cpp | 4 +- code/framework/src/world/server.h | 19 +----- code/framework/src/world/types/player.hpp | 7 +- code/framework/src/world/types/streaming.hpp | 3 +- 25 files changed, 94 insertions(+), 189 deletions(-) create mode 100644 code/framework/src/services/lib/Release/MafiaHubServices.lib diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index ab89e058e..7b48594c9 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -46,9 +46,8 @@ namespace Framework::Integrations::Client { namespace { - // Native RPC4 handler for server-emitted scripting events. RPC4 dispatches to plain C - // functions, so this reaches the scripting engine through the CoreModules singleton rather - // than capturing the Instance. + // Handler for server-emitted scripting events; reaches the scripting engine through the + // CoreModules singleton. void OnEmitLuaEvent(MafiaNet::BitStream *userData, MafiaNet::Packet *packet) { (void)packet; const auto rpc = Framework::Networking::RPC::Read(userData); @@ -390,12 +389,11 @@ namespace Framework::Integrations::Client { Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection request finalized"); _worldEngine->OnConnect(net, msg->GetServerTickRate()); - // The local player's avatar arrives via native replication (the server constructs it, - // owned by us); the game recognizes it in NetworkEntity::OnConstructed by ownerGUID. + // The server constructs the local avatar (owned by us); the game recognizes it in + // NetworkEntity::OnConstructed by ownerGUID. Signal we are ready for it. Framework::Networking::Messages::ClientInitPlayer initPlayer {}; net->Send(initPlayer, MafiaNet::UNASSIGNED_RAKNET_GUID); - // Notify mod-level that the network integration handshake succeeded. if (_onConnectionFinalized) { _onConnectionFinalized(msg->GetServerTickRate()); } @@ -440,7 +438,7 @@ namespace Framework::Integrations::Client { } }); - Framework::Networking::RPC::Register(net->GetRPC(), &OnEmitLuaEvent); + net->RegisterRPC(&OnEmitLuaEvent); Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Networking messages registered"); } diff --git a/code/framework/src/integrations/client/instance.h b/code/framework/src/integrations/client/instance.h index 38d8dce25..7a6f3a0d6 100644 --- a/code/framework/src/integrations/client/instance.h +++ b/code/framework/src/integrations/client/instance.h @@ -36,8 +36,7 @@ #include namespace Framework::Integrations::Client { - // The local player's avatar arrives via replication; the handshake callback only carries the - // server tick rate now. + // Fired once the connection handshake completes, with the server tick rate. using NetworkConnectionFinalizedCallback = fu2::function; using NetworkConnectionClosedCallback = fu2::function; using AssetsDownloadFinishedCallback = fu2::function; diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 1f0587b3e..4c1807186 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -313,8 +313,8 @@ namespace Framework::Integrations::Server { const auto guid = packet->guid; Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Disconnecting peer {}, reason: {}", guid.g, static_cast(reason)); - // Native replication tears down the player's entities when the connection drops - // (QueryActionOnPopConnection); we just notify the game and clear its viewer mapping. + // ReplicaManager3 tears down the player's entities on drop (QueryActionOnPopConnection); + // here we notify the game and clear its viewer mapping. if (_onPlayerDisconnectCallback) _onPlayerDisconnectCallback(guid.g); @@ -333,21 +333,21 @@ namespace Framework::Integrations::Server { Logging::GetLogger(FRAMEWORK_INNER_SERVER)->info("Player {} guid {} hwid {}", msg->GetPlayerName(), guid.g, msg->GetPlayerHardwareID()); - // The game creates the player's avatar entity (a native NetworkEntity subclass) and - // registers it as this connection's viewer inside its onPlayerConnect handler. + // The game creates the player's avatar entity and registers it as this connection's + // viewer inside its onPlayerConnect handler. if (_onPlayerConnectCallback) _onPlayerConnectCallback(guid.g); - // Finalize the connection (carries the server tick rate). Framework::Networking::Messages::ClientConnectionFinalized answer; answer.FromParameters(_opts.worldConfig.tickInterval); net->Send(answer, guid); }); + // The client signals it is ready for player data; the player entity is already created in the + // connect handler above, so there is nothing to do here. net->RegisterMessage(Framework::Networking::Messages::GameMessages::GAME_INIT_PLAYER, [this, net](MafiaNet::RakNetGUID guid, ClientInitPlayer *stub) { (void)guid; (void)stub; - // Player setup now happens on connect; retained only for protocol compatibility. }); // Note: Client-to-server events are handled through the JS Events system diff --git a/code/framework/src/integrations/server/instance.h b/code/framework/src/integrations/server/instance.h index 58b62cbf3..3965580c1 100644 --- a/code/framework/src/integrations/server/instance.h +++ b/code/framework/src/integrations/server/instance.h @@ -81,7 +81,7 @@ namespace Framework::Integrations::Server { }; - // The game creates/owns the player's entity; the framework only hands it the connection GUID. + // Invoked with the connecting player's GUID; the game creates and owns the player's entity. using OnPlayerConnectionCallback = fu2::function; class Instance : public Framework::Lifecycle { diff --git a/code/framework/src/integrations/shared/rpc/emit_lua_event.h b/code/framework/src/integrations/shared/rpc/emit_lua_event.h index 02f3ad27c..a5efa098a 100644 --- a/code/framework/src/integrations/shared/rpc/emit_lua_event.h +++ b/code/framework/src/integrations/shared/rpc/emit_lua_event.h @@ -14,7 +14,7 @@ #include namespace Framework::Integrations::Shared::RPC { - // Native RPC payload: forwards a named scripting event (with a JSON payload) to the other peer's + // RPC payload forwarding a named scripting event (with a JSON payload) to the other peer's // resource layer. See networking/rpc/rpc.h for the dispatch model. struct EmitLuaEvent { static constexpr const char *kIdentifier = "Framework::EmitLuaEvent"; diff --git a/code/framework/src/networking/messages/client_connection_finalized.h b/code/framework/src/networking/messages/client_connection_finalized.h index c386f8cd1..46d2dadc7 100644 --- a/code/framework/src/networking/messages/client_connection_finalized.h +++ b/code/framework/src/networking/messages/client_connection_finalized.h @@ -22,8 +22,6 @@ namespace Framework::Networking::Messages { return GAME_CONNECTION_FINALIZED; } - // The local player's avatar arrives via native replication (with its own NetworkID), so the - // finalize message only carries the server tick rate now. void FromParameters(float tickRate) { _serverTickRate = tickRate; } diff --git a/code/framework/src/networking/messages/messages.h b/code/framework/src/networking/messages/messages.h index b0f7b06d3..58953a47d 100644 --- a/code/framework/src/networking/messages/messages.h +++ b/code/framework/src/networking/messages/messages.h @@ -31,9 +31,8 @@ namespace Framework::Networking::Messages { using PacketCallback = fu2::function; using DisconnectPacketCallback = fu2::function; - // Internal game flow messages. RPCs no longer use a message ID (RPC4 dispatches by string - // identifier), and entity sync no longer uses message IDs either (ReplicaManager3 reserves its - // own plugin message IDs). Only the connection-handshake flow remains on the message-ID path. + // Connection-handshake flow messages. (RPCs are dispatched by RPC4 and entity sync by + // ReplicaManager3, both of which use their own message IDs.) enum GameMessages : uint8_t { // Game messages handling common client connection flow GAME_CONNECTION_HANDSHAKE = ID_USER_PACKET_ENUM + 1, diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index dc31594b5..0761330ca 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -31,8 +31,7 @@ namespace Framework::Networking { _peer->AttachPlugin(&_fileListTransfer); _peer->AttachPlugin(&_assetStreamer); - // Drive native entity replication from the client side (receives constructions, serializes - // owned entities upstream). + // Run replication as a client: receive constructions and serialize owned entities upstream. _replicationManager->Init(_peer, &_networkIDManager, false); _initialized = true; diff --git a/code/framework/src/networking/network_peer.cpp b/code/framework/src/networking/network_peer.cpp index f8f581f16..f243cfa40 100644 --- a/code/framework/src/networking/network_peer.cpp +++ b/code/framework/src/networking/network_peer.cpp @@ -17,9 +17,8 @@ namespace Framework::Networking { NetworkPeer::NetworkPeer() { _peer = MafiaNet::RakPeerInterface::GetInstance(); - // Attach the native subsystems common to both peer roles. RPC4 and StatisticsHistory - // do not use the reliability layer, so attaching before Startup() is safe. ReplicaManager3 - // is attached later by the concrete peer once its connection factory exists (Phase 2). + // RPC4 and StatisticsHistory can be attached before Startup(); the ReplicationManager is + // attached by the concrete peer's Init() once its connection factory exists. _peer->AttachPlugin(&_rpc); _peer->AttachPlugin(&_statisticsHistory); _statisticsHistory.SetTrackConnections(true, 0, true); @@ -63,8 +62,7 @@ namespace Framework::Networking { return; } - // Rebuild the replication spatial index before ReplicaManager3 (driven from Receive below) - // computes per-connection relevance for this tick. + // Rebuild the spatial index before ReplicaManager3 computes per-connection relevance. if (_replicationManager) { _replicationManager->Tick(); } diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index afe734d7b..d8910f43e 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -39,17 +39,14 @@ namespace Framework::Networking { Messages::PacketCallback _onUnknownPacketCallback; mutable MafiaNet::DirectoryDeltaTransfer _assetStreamer; - // Native MafiaNet subsystems, shared by client and server peers. - // RPC4 dispatches remote-procedure calls by string identifier to plain C handlers (see - // networking/rpc/rpc.h), NetworkIDManager hands out the cross-network object handles used - // by ReplicaManager3 replicas, and StatisticsHistoryPlugin tracks per-connection - // bandwidth/RTT/loss for diagnostics. + // RPC4 dispatches remote-procedure calls by identifier to C handlers. NetworkIDManager hands + // out the cross-network object handles used by replicas. StatisticsHistoryPlugin tracks + // per-connection bandwidth/RTT/loss. MafiaNet::RPC4 _rpc; MafiaNet::NetworkIDManager _networkIDManager; MafiaNet::StatisticsHistoryPlugin _statisticsHistory; - // Native entity replication (ReplicaManager3). Created here, attached to the peer and given - // its server/client role by the concrete peer's Init(). + // Owns the replicated entity world. The concrete peer's Init() attaches it and sets its role. std::unique_ptr _replicationManager; public: @@ -88,8 +85,28 @@ namespace Framework::Networking { }; } - // RPCs are registered and sent natively through RPC4 (GetRPC()) using the helpers in - // networking/rpc/rpc.h. There is no typed RegisterRPC/SendRPC layer anymore. + // Register a handler for RPC payload type T (see networking/rpc/rpc.h). The handler is a + // plain function; decode the payload inside it with RPC::Read. + template + void RegisterRPC(void (*handler)(MafiaNet::BitStream *, MafiaNet::Packet *)) { + _rpc.RegisterFunction(T::kIdentifier, handler); + } + + // Send an RPC payload to every connected system. + template + void BroadcastRPC(T &payload, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { + MafiaNet::BitStream bs; + payload.Serialize(&bs, true); + _rpc.Signal(T::kIdentifier, &bs, priority, reliability, 0, MafiaNet::UNASSIGNED_RAKNET_GUID, true, false); + } + + // Send an RPC payload to a single system. + template + void SendRPC(T &payload, MafiaNet::RakNetGUID guid, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { + MafiaNet::BitStream bs; + payload.Serialize(&bs, true); + _rpc.Signal(T::kIdentifier, &bs, priority, reliability, 0, guid, false, false); + } void Update() override; virtual bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) = 0; diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index 1b89a3f4d..c5d539f68 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -34,7 +34,7 @@ namespace Framework::Networking { _peer->AttachPlugin(&_fileListTransfer); _peer->AttachPlugin(&_assetStreamer); - // Drive native entity replication from the server side. + // Run replication as the authoritative server. _replicationManager->Init(_peer, &_networkIDManager, true); _initialized = true; diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index 13e386e5d..161c8c547 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -29,9 +29,8 @@ namespace Framework::Networking { Messages::DisconnectPacketCallback _onPlayerDisconnectCallback; MafiaNet::FileListTransfer _fileListTransfer; - // Signal an already-serialized RPC payload to every connected system except one. RPC4::Signal - // has no exclusion parameter, so we walk the ReplicaManager3 connection list and target each - // peer individually. + // Signal a serialized RPC payload to every connected system except one, by targeting each + // connection individually (RPC4::Signal has no exclusion parameter). void SignalExcept(const char *identifier, MafiaNet::BitStream &bs, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED); public: @@ -42,7 +41,7 @@ namespace Framework::Networking { bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) override; - // Broadcast a native RPC payload to everyone except one system (typically the originator). + // Send an RPC payload to everyone except one system (typically the originator). template void BroadcastRPCExcept(T &payload, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { MafiaNet::BitStream bs; diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 1a4fa2da3..e43a57f6e 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -18,28 +18,26 @@ #include namespace Framework::Networking::Replication { - // A NetworkEntity IS the replicated object — it owns its state directly as plain members. There - // is no ECS / flecs behind it; ReplicaManager3 + NetworkIDManager track it and GridSectorizer - // scopes it. Game-specific entities (player, vehicle, ...) derive from this, add their own - // fields, and override SerializeFields/DeserializeFields (per-tick delta state) and/or - // OnSerializeConstruction/OnDeserializeConstruction (one-shot spawn state). + // A replicated game object: it owns its state as plain members, and ReplicaManager3 + + // NetworkIDManager track it while GridSectorizer scopes it. Game-specific entities (player, + // vehicle, ...) derive from this, add their own fields, and override SerializeFields / + // DeserializeFields (per-tick state) and/or OnSerializeConstruction / OnDeserializeConstruction + // (one-shot spawn state). // - // Per-tick updates use MafiaNet::VariableDeltaSerializer (the documented ReplicaManager3 delta - // path): each variable is compared against the last value sent to a system and only transmitted - // when it changes. Construction sends a full snapshot once. Serialize() therefore returns - // RM3SR_SERIALIZED_UNIQUELY — ReplicaManager3 calls it per connection, while the delta serializer - // internally reuses the identical-broadcast bitstream within a tick for efficiency. + // Per-tick updates go through MafiaNet::VariableDeltaSerializer: each variable is compared + // against the last value sent to a system and transmitted only when it changes. Construction + // sends a full snapshot. Serialize() returns RM3SR_SERIALIZED_UNIQUELY; ReplicaManager3 calls it + // per connection while the delta serializer reuses one bitstream within a tick. // - // Authority (validated design point C1): we override QuerySerialization ourselves keyed on - // ownerGUID, not the stock creatingSystemGUID helpers. The server serializes to everyone except - // the owner; the owning client serializes upstream. Deserialize is gated on the current owner so - // a stale owner cannot write during a handover. + // Authority: QuerySerialization is keyed on ownerGUID — the server serializes to everyone except + // the owner, the owning client serializes upstream, and Deserialize accepts state only from the + // current owner so a stale owner cannot write during a handover. class NetworkEntity : public MafiaNet::Replica3 { public: NetworkEntity() = default; ~NetworkEntity() override = default; - // --- Common replicated state (owned, no ECS) --- + // --- Common replicated state --- glm::vec3 position = glm::vec3(0.0f); glm::vec3 velocity = glm::vec3(0.0f); glm::quat rotation = glm::identity(); diff --git a/code/framework/src/networking/replication/replication_connection.h b/code/framework/src/networking/replication/replication_connection.h index 1aa91eabf..f5eb84313 100644 --- a/code/framework/src/networking/replication/replication_connection.h +++ b/code/framework/src/networking/replication/replication_connection.h @@ -14,9 +14,9 @@ namespace Framework::Networking::Replication { class ReplicationManager; // Per-remote-system state. On the client it constructs incoming replicas (AllocReplica); on the - // server it answers which replicas should exist on this connection (QueryReplicaList), which is - // where the streaming relevance rules live now that QUERY_CONNECTION_FOR_REPLICA_LIST is used - // (so Replica3::QueryConstruction/QueryDestruction are intentionally bypassed). + // server it decides which replicas should exist on this connection (QueryReplicaList). It runs in + // QUERY_CONNECTION_FOR_REPLICA_LIST mode, so the streaming relevance rules live in + // QueryReplicaList rather than in Replica3::QueryConstruction/QueryDestruction. class ReplicationConnection final : public MafiaNet::Connection_RM3 { public: ReplicationConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID guid, ReplicationManager *manager, bool isServer); diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index af77749c7..c75dbe032 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -23,10 +23,10 @@ #include namespace Framework::Networking::Replication { - // The native replicated world: a ReplicaManager3 specialization that owns the set of - // NetworkEntity objects (there is no flecs world behind it). It creates/destroys entities, - // resolves them by NetworkID, tracks per-connection "viewer" entities, and maintains a - // GridSectorizer used by ReplicationConnection::QueryReplicaList for interest management. + // The replicated world: a ReplicaManager3 that owns the set of NetworkEntity objects. It + // creates/destroys entities, resolves them by NetworkID, tracks each connection's "viewer" + // entity, and maintains a GridSectorizer used by ReplicationConnection::QueryReplicaList for + // interest management. class ReplicationManager final : public MafiaNet::ReplicaManager3 { public: ReplicationManager(); diff --git a/code/framework/src/networking/rpc/rpc.h b/code/framework/src/networking/rpc/rpc.h index ef2abe338..f6bba3abc 100644 --- a/code/framework/src/networking/rpc/rpc.h +++ b/code/framework/src/networking/rpc/rpc.h @@ -9,65 +9,21 @@ #pragma once #include -#include -#include -#include namespace Framework::Networking::RPC { - // Native RPC4 remote procedure calls. - // - // There is no IRPC/IGameRPC base class and no per-type dispatch trampoline. An RPC is just a - // plain, copyable payload struct that knows how to (de)serialize itself and exposes a stable - // string identifier. Handlers are ordinary C function pointers — the only shape RPC4 accepts - // (see MafiaNet::RPC4::RegisterFunction) — registered directly on the plugin and dispatched by - // RPC4 itself. There is no longer a distinct "game RPC": an entity-scoped call simply carries a - // MafiaNet::NetworkID field that the handler resolves through the ReplicationManager. - // - // A payload type T must provide: - // static constexpr const char *kIdentifier; // stable, explicit, compiler-independent + // An RPC is a payload struct that provides: + // static constexpr const char *kIdentifier; // unique, identical on both peers // void Serialize(MafiaNet::BitStream *bs, bool write); // symmetric read/write // - // Register a handler (a free function of the required shape) and send a payload: - // void OnFoo(MafiaNet::BitStream *bs, MafiaNet::Packet *p) { const auto foo = RPC::Read(bs); ... } - // RPC::Register(peer->GetRPC(), &OnFoo); - // RPC::Broadcast(peer->GetRPC(), foo); // to everyone - // RPC::SendTo(peer->GetRPC(), foo, guid); // to one system - // - // Identifiers must be unique across the whole protocol and identical on both peers. Use a - // fully-qualified, namespaced literal (e.g. "Framework::EmitLuaEvent") rather than typeid, so it - // stays stable across compilers and binaries. - - using Handler = void (*)(MafiaNet::BitStream *userData, MafiaNet::Packet *packet); - - // Register a handler for payload type T under its identifier. + // Register a handler with NetworkPeer::RegisterRPC and send with NetworkPeer::BroadcastRPC / + // SendRPC (and NetworkServer::BroadcastRPCExcept). A handler is a function of shape + // void(MafiaNet::BitStream *, MafiaNet::Packet *); decode its payload with Read. To target a + // specific entity, give the payload a MafiaNet::NetworkID field and resolve it through the + // ReplicationManager in the handler. template - inline void Register(MafiaNet::RPC4 *rpc4, Handler handler) { - rpc4->RegisterFunction(T::kIdentifier, handler); - } - - // Decode a payload from the bitstream RPC4 handed to the handler. - template - inline T Read(MafiaNet::BitStream *userData) { + inline T Read(MafiaNet::BitStream *bs) { T payload {}; - payload.Serialize(userData, false); + payload.Serialize(bs, false); return payload; } - - // Send a payload to a single system, or broadcast to all connected systems. - template - inline void Signal(MafiaNet::RPC4 *rpc4, T &payload, const MafiaNet::AddressOrGUID &target, bool broadcast, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { - MafiaNet::BitStream bs; - payload.Serialize(&bs, true); - rpc4->Signal(T::kIdentifier, &bs, priority, reliability, 0, target, broadcast, false); - } - - template - inline void Broadcast(MafiaNet::RPC4 *rpc4, T &payload, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { - Signal(rpc4, payload, MafiaNet::UNASSIGNED_RAKNET_GUID, true, priority, reliability); - } - - template - inline void SendTo(MafiaNet::RPC4 *rpc4, T &payload, MafiaNet::RakNetGUID guid, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { - Signal(rpc4, payload, guid, false, priority, reliability); - } } // namespace Framework::Networking::RPC diff --git a/code/framework/src/services/lib/Release/MafiaHubServices.lib b/code/framework/src/services/lib/Release/MafiaHubServices.lib new file mode 100644 index 0000000000000000000000000000000000000000..4c627c606158b4f8ae00e592a77bb26cfe8b30b4 GIT binary patch literal 5729944 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�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

RBs?Gq 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∨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

izL%k&{_1hV`>@_rPp>O)!g`^e%zrS+QL? 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 z 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

eXop;hKa$@Vj^1fm_^R!vy#MXz6 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[~vxR!dD~v^Em8JN#5w*J!vckYa5P0ZlN>i$ST}Ik}!pV zyKsI8KgUU5aseMgE-e$p4{gZ;i=*20f~x{ui~6TG)j!=(&vMNMKt{3^Td)G5My}ZyaTnDAXb}=1ttBB%w$<4lVL6{}Iy z>8jFb?g)?@@Q7O_y|0&uY_CXza%sB1yE0*T#<*L(~*`>&D z7WQ9N`rx>EJ;e}6+SHL&Qhp69LX|n;%wEB8UNS`&{_E2AJj`4M@~p$Kq~kk>S$uPT z0;IWErTEkF#Ggb^epmU#uRG_mx!V)2o7|rVbALW2Zx#vf1lv303q{?CO3Dk4W~Ez1 zeW)#QFlj~aA+pZ$cNs=DjDoj=z$VVeyGQLSIJn(GDzsvDo5Q*aZjHFv!MGW_E4VEG z>3_ihBJBb@w4D%*PDh8@>E0Qt?kut=jj*dwYCA2^Zn|KokHW9(0hycz0Zu-T}Mx?3dk5(Z~eSwvF z7#}{f?(O-48Htw#Sq@<2)Cuz+rHw?II-fARZ<5GL!wTGr^ph6!6LKf;aQA63DWZfH zC}AUSf|U5K)+C@BjCrF}TD`HMiKw6`QCck(??zJL&dx}QCna9!>QfxhdX=S99kyhp| zM0HMnyDD<69*JwU0=FWqjI^?i9uQD0`V;>lN@#%+vRawsP2^hbtZTV+bDA=)Re>&( zb@U2zC0x+JoJw`Z>@HDg43(gm%-oDka6vW!*#u-0kWBzS`o|)>=l~(+tlX`@tw zdrw*!X=S99kydsRT3H2dMOqnYWu%pnR<<{-?BAqGktRi&6lqc?p-ENXR-{RhCPkVQ zX;OREq?++>Nu_K&gkqVm!;8V-!{u}^oLErn!aMK>&NBvoJ6q|pJ-dOoBsQRv7|f~K z;!60vBlw-O(TJTJBk5xJ3Fs8T?>)h<0Db~GMew_vSOmcW2rBp#!tf)(@T~}j5~r8aEOM4B=J|78!WzE=%Zk7AKee%gzpf^aaxY>>{J#n;i399)Gb0Ojwx=(S zES%8Z?DdXPMY>X_V;}t0Pkzy%B~?0p!Klx%&r5ryFsLSmbyqutds;vdKeW*~OJ+be zc!Ax8o+R}%fqVwV-#}e{n-te|ka9jMm=?_V80HFMcC}nB?3vM~U?=f07<^W8gV=_3 zrBS-Du@A&DeD2W7jcvaiE3Ox@7Cw#(4%aK!Rj%fC9#+oEHPNl zz7j0(C`OF5$6&k60gD6&dv(321*=(T7Sid_v~mkxm;0HkT28-4(Q4s7@i7buhfDKL z9<;WGQib9tY}?q<{v~OZfGTkhR>}Un95)_JjgDAgdoK=Kd$U((_RX1tOQ&f!3kN4I zi%0GS-aIxB#F6zMfFK}9zOwi^_{qRM$t_oGK&MRk9gWuqxF=K<>#d{T?w;;Rnp7j2 zlwi1`-y|8R^+B34Q0s7l4V-2cI5@NctXA%3@L`Zcz?>lP10}S1`a}LisZZEebclsV z*LAkW1#HuACjWtcAjkqAA~7 zB5xh=U$5Uip~ET8_1^4-J7=yO7Q1Jp?f`_bB}Ja$)E^x3562V%MACth|e?oM*Q7kETKU%C8DgsTG==?;N~pDgULr zjE2n1M$F4}Q2)d ze{R2kpc$T}IbQd?du`<+b{Cn67ZWc&;n=mwf6bqp8{Ddv)Jn7J@$qUGsS~u<&0PmTlBeX|-Uf7bmd7)f|4ZEG$8J zybt|#Fmu?#pFzp#my3n-<}8@wt(O-65q_z;j<8DEo9lds_9k!dt>>CXYj;IGF^}r;OnA3pti?uTbxA81f4Puln{SR6#mLD~Fu(S-1F#UuT|D1`-HFWTh4VwG ztzAu7L@q5WE%!xS*};rLR|ghHs`x=van8(Cx3|5Z1L6Sj9n0b~ZxVdxEYBA>1vgq$~Q*hvhSeD9y3WoUZLyNc4Xw`WIG$ zh>?=S-CJHlCUjbbTamhd5OtrJ)X_01qJ$PGAS{Z3&m@6I65bCSY$ZBPRH#MV`U658rS{Z3&?!w|p zUio!Cq?H{>1hWFSBCU+HGU|CpJ@59_^A57?$HVcs8LjLW(#l9HBdv_IGTuF@Kr=mn z6Eka%R^V2om629PS{Z3&d(+AUZ)!#>`<1jZ(#l9HBdzQtw6Y4^inKD)%1A3Ct!!^v zncz)Lb?-VC%Qd6qy(1-$lsr=MNXa`1C9eXvA|;QMJW}#V$=jQfCwNmcTG@Nj%1A3C zt&Fs?lhDd4a4XWvNGl_)jI^@7X=Q>pHKUdNo3t|0%1A3Ct?VSUvI^Xav@+7lNGl_) zY;Rhb;7!eFWl||)SIgDHo;mE*^&%W90z)-dwj00%><>7Aw8p5k2OQxphNg`N>~rAo zp)Bk(%t~WXV7pNmk2%_D90q>ie&(vSuCGzFTDVWV2rVuMZsj~@)?hf4XX7WlfjJP+ z1s*=e56V1$?pSSn8b0!9jVzcuaep>y;l5G>v{ZuwcH_Zxs)z-)_u?>^lK$$$5hwl`Gxgfp99 zj^ep>jof18hb|wd6-=jzc3_1q|KTn0!zI>H=S@bho3A9CEVkE z=&u7%78d>tgwU6Zh4bbtnB%RN7XJ}`nffYwbDi(d%IWRB^}LL5tYQ;;Gl!ljuEviJ ztaNI%v-80Kgf3rycS>jZhqd zaGm@L^Fyz{TuAZy1`|kGR6@X-eBnfSpPVHIOzJF`OT~_pea;~$D3I(hdVdfzHe--? zm5zb>_K8i#JP|Qed@mor5Z@v;b7nnSg3ZWTzxkYon!8hTcL+Pc|FJvv2fMv{h&@B# zJhJBtW=!2KkPyIK>I`u|9CIo-6Ixx$*5Z%RxZr(^3(mGiC?6mvF-{>T3OP~8X>TDX z!J3BMHUDvfH#hykr=9CAhqIG#JR)DQys$U|fVXpk4q`AM$zf!nYM!#>g!6yl{1Cm| z$zQ>gYXK2PO@e|*7zUWxCl>Gs6iCpPb;$ox!@l1@_YU?g!s2j68$UP&>Q;;q$D!y1~qb`FgqPuvZVlyTY$0 zsAH$}iR&r5`*OkKzD$HygV;fh=#sr4ger5wnZ1J8|9D`S&VZR+CDd|0`^jT%n#hgm zeRF;Sq)7ugG7SV-V61}dM1MK-#m#%TZZh)^V&neT;BW7_X_$dg0-I3_q$;Z`In4ajw=Juc2~DaQt?Z1n zGSbRODc}OmaJALcvCZ4nX2=pk{&AQ0l^IaM(cf-E-^Y;+)FK$tSQt;%wBEC zY!@8|WrYN!tH*`lQ&cB2EtM`LnZ)8*m0>W~TeV#%%oD!tCpX6t3qhW)rrJ}p60^jo zS?gRz52;y6hV=JhNftCKQJjW68>T4>EP9^|*XZX{%zI;b&{Zycl#nOS#*uh7$_K}Z zQpmAEjtz2b?Ax*NJpjc4jI;>*)Y=R8zfi3FV6Rq=H;2kD)rpqfPE}>E`qfun**=M% z1!bAt-auh5Sdl{7Kl{Pbj##*IW>{{I+BE-&!vg2o%JdMCs$DPpr^IKc>g6M=UWSG@ zaq;qrmbg;?6w&2_`lsxTxUvZjTp6CMqgUwe>_W<*Q@W3euxB349vgyTQjd*%wXT^JWZ_l&8t=)VDn}z)Ht96}d0wH$8%_hp^KU5}vcbh=`BJit` zbgW+}IFw7W)6_^!8M<_Z% z(GiM{>?=AVSyL}V5%Jk66tOpN>2^07wQ|pv@0@xg<%A_it=!{=?agL$ZqPiN3PlKp zc?6B&#YP%*S(0}>Xx)oekU-g8@A|Kz#d0I4`l~1(Y-X(nz5c(NUjO<7b30tgKvRVq zZ$Tw{nrEg8E2Ja`F*%6IK}-(fBB$EED@rnIdIe@h4q|c;7vXXzOO|tkSVRdeP{JnG z)Jq4kWXltk=6|9&(OV2}OccQq1?^+3KetK%t|_pXzmqmJ znJZ+jkhwzUN|B0paC4;svmzy}1to2J43!E64pk^1DtJVQGm%z6l+XetWXu)Gn!0YT zU^5Pw&+YO$=78aVZq(m7!ePm=*5$irvZ(Ux0;@*MJI6WJFb{nVW6;$*VC5uAs|2<* zW~Xo+e&vU7F(ALC8O7(cceBI`^BNc7Ox_YFoQ-wQ*p z5ew+OxQu4jB5NwAMI17X$O*7QX&=q%sCUxBXeD`kkl(1O(5UA&M?Gg$miOhE73q*I z=#XShsdl#~#G{B3TA+jttmz06J_V1|%^29y2}AqEAveb%-5le%ThLCH%9o4C|K@ls z`nkfJTsS|RfPv-XblQAHgG~1MNZ6tR#W`Oiv_2GCcQ+AP#45)FfnbP$DyqE`?E;E+ zwb3ml>FzB_S0N=uy(#KVQE!TRA9d8b0<$9Pv<2&w{50gJLCY{TqGvC2Itn6o2Z*X< z{4|0!H5JDct2Gjc6HAd%OVzd5a6Pb!>1b>1LLAFxAAbD!{2KV*uT+E9e=+>sZvk{| zy|%si!U-9g%)VuQ!LF|HsnD6Np*{RhHp8db%=f>!4*VW^_s(7i<649@ z82)Pz&TNl)>*W(TxBv|P;Fn+CC4akgy>$q`ejk4oJYxO}v%Xwh1%V$}uTivGxKEa4 z!LMHcmf>m+KUvldw!pm){dF*Nu(!Q6f_E0qo3mgJeAD7T!Y@+>KYMeX@6fDXwYeV* z!1Mp@;Qo_)^YyAh&Cx&D3L&ZxW z#~F?wr%c~U{%Xc^dO`MkYIFCnImjD*yfK$6eo8Mke6r_^E5^n_jju|a8E<<|FUWpR zt+-)#MNjF)#8-pB{>eP&J6ky3OY~Z1qorQapOJgceW_^s+h35McniH17`D-~x^Cka z@{#lt@xRqJ8CP2%&IK2i`{l2b$Hy3<%08}_pE@(l0A+tW&!EVxVcrc7sqwK8i2sSj zOFgWX_WbW~X^uSyJqh%TZ`KSHFwYkk$-U;|LF6tSw(bBUQ=dbr^Wts)AP!85v9;n`>SOE?c!Elp<(Qfxf=z!{ z3rL>;0?2d^Xr#y6NZdmC7t|-lI;VW6fEgD(c^p{<(i&N{$<1cuWc{70C7ax45&@gI zCAnggo4ij1w1f2wb8w;e8yJ`@vR}YDlc*us1u(prrkXg?PT$u6xTt;eqQ+Pq(mY%n zYwL}FZEE8Rag`p`_`=O^*<{P(#`eosRht#l^ML2pC|5wfh}Z$887UyQw0cXMPqLwg z_bwNQk@c=O7!JnmEH99|wdKX`NA2#uwdEDs1WpK^%=$S0m_(SSm({>-dSQVi0OqC_ z7CSy~eqpiW78W*8!U?!?UXu?3P8gyQ0Nm)ZCV(4V*aUE+3yU3JaFl3tVX@;D78X1H zrL7&eu&~(iuWjwPg@qN_&HN<<7HhNO%Lxx0@X}D_*BQ66cJmugX-v)SS}m-$%s#u| z^_e?{*<6FyVdYuE4b{%-YV%|EduP1J1a7`*ub!CyhC-u#G=Mum@vRY2?7wo2h6>Nwna%Ra6n=SP8ac*|32 zF?3JhqwHmE2QX57iOWjoZH&Np72+?caLFz&t4~LM%4b-kB4vbAS2cmPu(H}TxNvX0 z$ax9u1&cp3m5$@Db!Ny86K81uL+VKJF{JOd);%PY;5L?4+ui^m_m>6a+crT8~d@04uxUT?228fH1!9(gVq_>35hw@u75>dEQ zq}rSMqnOZuNl<0@`G=&lWQSMPXB}@If05lK#3s8lH5U}pQieRmsvQc9FM++1sb-1y z)3U<=)V@Efj*BX;!*{>8Q*#OXgrWT~+6`_dlAr4S)dj59;VXC;AXQA``BtoZ1kDL> zF}B6)Euy#LuPX1vK;hMnudC0y9t3lu3Sg*5eD%>VeG8|10Cfc^F}f8I4}Aj$37q2A zXRFl@k*R))yLVS-VPr>6M*BJmv{5Jzott1dcazcu=F9kBSHC{sWFKnJ0qb$W%3FJFDx>|2=cnOaNWp52;sB zMvHr?m0)BBT*hsGCqB^sEFc;@x7q0bSP-BaxBO)+8JJjCSB9xP{`+uS&|tt`rtZv# z9FNtj3+>dwA1HDaQCs;GHPjplYbGA{bJ{Zt@JW_rVwHDO=NMYU;c!o97($8xoFR5B zLh2D+(+kUu-zJkb4s%V4oN{vmFck3_^A3&?DRc5P54;X!{h=<~)_f&YW|;XrMmyMiHu4Fn3^B@6X}<$3{?GxjRo=5A9u zazeIGvH3K22OLrr5IaDJ1Rf$Y-?0@1B$;(ha0DQOYcZX>UVto8c@uDqW8Q?48_EF6 zf|5ty?|B=%kM?RXCVrH-H;-YvOfsGHq9oOyNZx3xEeR(8;|%wl)! z7Bf#K4^!x_`N{RZ84Y)JpdejIvf~PB6DonY+Ai|3?{#V zo0r`VH-O|HLs>~7&F+iDTlw1wSCB&M#FxO;qQsX9o-yR`sNgY!B^EuVxAiyJoCeN3 zs+4JrLf}6P*K&zR^|ENq=P#SCf8O?>S~3r@^lr=GPxfK8bQVqc$;+Zc-otun_Iv(i zp(oZXrhX*IXa40mg8X@d=#Mcj02P}Py0+|1V3H*)AWMQ}QQS;~< zAJRK#zkgV`;Gs@#Jx7Nrd`vF~KDox@j$E0>C}S$!X&>J*E@vN~%Utt5K58J$K0c>$ z1qibpTuB&SZGJ=_1$%b2a+VxIZ2L?4P;fu83DtuQJ=mCgU^Nocz)=8D1eMdRltD#JCi|a4en+Rn-k zT}-i1ovW*@`k@Ik^j_~Fg3*c>rlzI;BB#+E$?jq?d88Xm%dR8cW-L&Sbc2dYIG2CN zx%^S?G|PIAezOX+<54xD&YFZfzOOe>ks%kDh1GVFT}W?<{a$UU4W?m@Mf6r0v;+Rl zZ9r`j#{b-(St!1#?Lde(wqyRqXXB=3{Lcd)HI`gWYOC?_j_b5(G1!MQ$1=4Kr&VmK zB{S?e5j!jGn>VzM`Q+--$3xeHZV~Q0?rdDvp2}ELwO7)c8tt%DR;j78h~COB@X2Z= zE73M}CunC^)0<0Gw9PZPRAUXjkx`{ZviP&x>-zK6;E=s# zbv1R@(HmmFS3Xe=p6tGc-pJ5jN6dd_0S*o*q0I^ZO$JA5t)e$Gs<=!RPj+2EZ=otY z3UH<3Ua~9cO|joAuC>8{s>9W?6B%;oAmfxULQn&$gj38K#u2hEeVk0Ibf>->*6LRjg5~zJyNVkv0h_(rKEWjS1@#H+Q!5)jTqW9N z$hYE;p>C2M-L=!p`qOczj%}Y#5k$!iCpuJIu75&$!}oXsTERCly&*NWZO7NuSsA|X z`QCq>z^}7~9hcDCNHz!A1_A@@spcSM-qat>GzTeods}mm?XRlO<`R!?0*J-B)&usk z=jF8z5~X0+*RJg%p+Vps`-9!yJ;Xg{VC0QGU%)Jdz=f1PxO}UiNEp6ch}dV=W6|p| zr2<>fr|8}}w==vBAHH9gTu92GZt>wXjSnYN44`|YBd`b9!(L~u^#Y!o+r!4vfG{?O zg;Fm|2{pplh5x#=J?kZL!?OT!d7!?4^382e4C;6R9 ztDlD7i5p4+ewxA=bY%>qxZWL1De(lSK;pl|e~JGR|8*QjF5m|8y~=69DgZZIICel$H*K|)wDZXE+lu2C3*sJ)%mu>E zoxBi)o$X?$VxBM&8nPDHOW=QJPe0j+_$cww0~lOq)?k=Ss?C(N6QY7Qw+>SvmRbjT zQYS4yRLxQ+$U>lq(u-WrSuop!di%it@soHf@z&$yt%R{n6)X{x-4m0&`Vj^8EK)p` z953~h1JmUqenvx<(nl$RJ_VKr&1wP$^yWq(bfppjQiOT9ugiN4iB}VG9fQb zVZUtB5gXPKp=qdg33e~yf(r1i4$tI3DZM> zlF$@ZK0r2A`6Gm8#>giMB?=`9ZLH?FzVtL4A4Ho(n?##OM4Q?f1Oq@RU|4{fWOFub zb0$)D2>VDb6cAtYRu#uS&HUK!#Qn$>9{L`$pIp{f8n_vz#=5E-D;~5tCKRNY;C^F* z8U-~QgtTobq5cjqbcJcdnE; zC$K}Z(=h3zt9IHL%U#%mGlOJx=09$z|Ees4u z%zQ752u7YI`#MMi5JJXrjF=ck*J6=rGoKhnYCeGpAYvH#$tfuqA;XA`Na7j9Gwg*0 z*{h6{3{o=u*QM>{D;a4g1aS`H9K<=K@kX4ZfOEu7EaDl&Gl*vp&nULy&_Yp8(AmPV z0}5kz*a>QevFWzEE+0}cY`XAXTzJ}cq-*cRwa1D-U3f1pTxo6Wa{ZG9_IFa;I;yxq z)2T@^%b2db+V#)@{QN6$@{~2fXzi1HWBG`_mH_0+3upKOa6bZE|DHio%+wt z6Vq|%f)}d%uv-@#dsfDD#~r=nv@?ZnIv#)5EozSaCv?YMy<@F(T|q~c&w=BxoYnyR z_o}xW|3_#xc!OpvE87jM!QjKC)>OhMaJ?663V)ov+5w9K+l@kND%8J(Z8L>VNcz`( zh@+-eV2DgS3`YqSiLL{Z^oulOz#!=YxJn??l?3jV>09O%m_MTdYFvjV512dARm{XA zTVF1KzSq#Q(UL~VDAB5K+}HE>1_1_x&qj`M=kHq{*DzSRj^XmehEms)6ZeLMK@Pf} z8@cwv1>wmSZWy8a3}XW$1b3#YT4eU^+y-y!+tD-pt#1G@cwFC(uK65V16|f* z(w0xx&uZ|qK3r{vhxOsm2H)z#aTTwcua_$*1?w)mx}5Mqd*XmQC0<=mF)-!?0Sxwp zrg`%PxRZ1$2xM;?sR0Ddt!Zp!pc(U90%#)uO>=YtYa?KdWd;GX5rAr`1hbO|Lklvk z#st|0AZuM*PyRJniIU(s0k=Zh^>%qBfU8hDRf_T13B2 z9}D|_ox2~5O;tA3Xgn#h24LQul(XGNlO_Sy7lzs-%=*QQn}l3n71Xh=n)Pz0=IrL z=te--XKvmI0Q<@M8v$J()olSdY^PsOTu@;3>-7=fJt3u=9UFO zc`Pd0k*!QrKb>By6+~v-k6}N#?CqS5M(o^*yI2vK6;{VpC$m0lp+sp!X&%dGG$6wp zrZh5Ih~9|a_D64hwsDElh|=~)Y5jGHNEM;OevO1Lqr>Mko2mBN{Xi(qlf^nP?Kq9n zeKz$8tGkNTWL6VycNMq$Y{C*&cNMGqYcAIBRoCAp-OgXNg6PeG z4N~sSnbWH6xHl&^m{@PlteM!~Fctc@wKrq4g$+eH?C$!@#mWvshdFPK7sWk73(~}} zWxOhm#mB4%%&I#nr##wse8V{4y{|yH_{H>uj0rV(F&3c)RHRAN&};*`OB368IUYuKVlRwIkb!*20dS`E19g9 zz^*jJQb@M+-yA}+q%`9o8w~yfx?3)q5zHc0j;)zk7G@gJKD%?`W1@OJ2`)n@G6K>D zoI)TeRDyotgJ-bFA{Q*F!C>-hZ|xC8q<@rI2I>Qf#NjAmqY$iQ%ZLJ48Qv@c*LHAa z9AN~s?LaepXauh9;38h1r^=hWUTCJo?c?@HX~SnDv@~*olZF%tWha{8GIUZLdQL#v z1SE}07oVKq%?WP2XWzmf-I)_wzXkTv`R)hbEDOxY34{UeacC^4Y5f12#i6^tuQtG@ z&Ma`A(TM*m3K$GRbF7CC3l~BZ)@u~47VZ;pUG9qGMw)TMySzGkwOwy89E^8)S%gb> zd|7;XROib(zN|ov6cN7Kfiq{TDA)vLyzsQcv%*^%z&m{nU|aD$4c3b9iMs@dR(wwb z6UN7u1B;lu3!Te; zPOxyp=!5Th&I}cmJdOwVHF-4HOr0fS3$4y7X~U(?TCqM~XB7orKCJ8FjE_RweZB1b zuZEUPZ1b1KciGH}iB0~y@l7_fVq%k{^Tv1C(2~h*zH5G)%`BPN=Gmz6Z8o%Ia+}Ry zyWsC*&N$ARSu(lJX7D|+&1RNNZ1cSNOK)gNwav*odIcrio!OC7Np`Y3LwMF)C6=Ex z7fOrJn#)DO&yV(MFs`|boY&mMQn6gGxhHl1f5_>6O(L-gs_Qn#=qLG<0?+tD$+G_D+*KhC{=Vakve{ zXmPkbq!H+FJBd;4aC=Zl$yuP#Q4Y14EcZNy{U`u^dR<3z|GQU_at-~U#tLc^Xm?iH z0A^s_8*a~JLy4xAi^;mF71Ko8)VeXrHMOF;8c>s1;DqjfF-hxb{rv0%*3_Cik?k(5 zxA)fbG7=u<$Hctms;{Zft=8cyc#vn`wtWo{U~2IG%I~QUqQ?xs$6POTf{3}`V6xG# zgjw?&jvJ>vNXKAmGmWm<=tj8*(}Y_iTa8y$n~h!r|2up3gQXoYCkOzZDU|s-dHgGR zg_YikNwd;xY5J@5a!h2EUQ;lESeEO}t-)|&P5IF?5Mg)t`{5L@Dg~RJ-c=u7N6+us z+?n}vCwmL{A@RS-4HT7K8#Gn*P9f$ZD_Y&p}oL z1fAR&6FMY&bDi(-L6bXK>2FneM}27KFQNQ~Gs42pT~4kcZ}Z$thT7#-_1W=zb&{{3 zGwW)e!dMaBLX@swCJ*^*7Z=5i;w@Vc*?3ph=b{ zZZ{k_3*Q>6=r~LxyMYi`&2@Anrsg`r42BR{&2_|n&T6kC_EUcyv7hsX_EUcyh0MUG z{eU_4>=lY9<__n8*8R+110#%?TWCSVa_1}ICPv?9!n$H}2A*v}owkp|qUp(xJ4_?9!pcO@RdO(xJ3EF-(}y z$_)4q=67Wbn(dF4Sr%RLs0kQ$;J9EH=Hq&K_IvJL?qSmm28 ztogu8H51RK&eq_PYMVmco4YS=6lQmHo$!;DdR8s`0!|h5i*e&~=`4Nl%_$$%V0ii0 zRdQzQR90guwE2ixQHifNx1ic$>?+)GlZe~NO*Xlt+9tZap54U)T4>}uGdJkcNu#so zDzOi%=0a(&R?X#NKUd9#6ts)c?62Eq(YC^RYJ&^^#e)C6fNwio&GBD6Y5MU#^w+`6 zVGDl-1-f4@7SMNP!5nYBwD^zk%MFO4XwG1x?S4cZB{wNLb+!t**u`&Zdur#eg4wde zyV^R~;a#CHY|6tfKCc3DI^j6?EiR>vI9auqG-#{6CQgUOU@B9*c#9gK)n3!EtoE7) z<6t}lU-#GHzXyX4m+1CRQIj==Ny)IcfJK3g(o~8xcr32HnF19GjOISe@nB`U0px0b zxU9DtFTIZ&h%~g(WQlBV0bt0!-ohXwwtEW+L*wWz3^Gjdj`J|&ieHD9m*OAobGW>( z8cNJq-A~?ghud8aJ2|cmZlv|&+GY+R9@hqADiK))UoNhAc0pWcm{N353yUKo(i5O^ z4YO}6y`85tWd97UK!nZ%?xsU+AO^vBI2c@h9e((~GF+=%1Eo)iz=4ubU@))-*TGVx z-pcy%0R#xahjfj8B(;5YJC$_5T>DKgnSw|&UsSl#%xYQGYG&Ok^w7)~8;47bFbd=U zEXMd|&tXu>p9NHM1bd1B#oNU4rabkiO1*uetz!!s<9?cqv6h#Y#A`mW6YGJusY^lJ zrQiY@6`v*K2q7bH??=dpsl(u`IRgw~f3VxThuDh)Nh?h&Mj}@zb2GzO4S`2px`80`o&7<2_46vE+L2;`W3di`b+$}C6 zTO#ugk^2P4C>7A87_7tt0ph#~_YDC=pl+O!1J!PXBQcKf+7kkai6z*TlCT7lx?(IL zkPKty8jG9pLw{i9zVW*5ds%+_G@rQ=7noTg#J1w_PEpA z@yDM7f60V8(_QpS1@~lkfc)eFBac*8q8DgQ(82-&&3gG0RSS6pG@W=`0!T4q$I>f8 zq-2INA(9BCmqa8pI!Cya%62DQs)S3~$Qof3VN@M4XGX;cmk5{Y;8Lu7kN-Y()v-V~ zMte`06y>?MCNB2usmkeskD%MK3o1BN74HTwGiR94DXtF`8k0rnlxd1rWcH#(XDZ@^ zQG`)qYH%F}l~ubOB! zhwJLN4#73k(5ntyO=(7;Z4|UwSw;YE6u_n=BhWSqT0@RqXb)ibEUbjU6=J&L)Qq@1 zx8vC^3AgQ-kb*aR0n&*3XU3ycdW94T4TA83@B&)QBD2U*e+WAWJ0x}_bT`5a!V8HP zvEu1^&ptHmfDs*6)1uZM@Yn3{ja^=jKP?)A@NO%49YwT4oEnV5Ur_TK_zaXx!>XyL7IsCf23XnVLkG&ZQU!@7_GL#=|kR3hK@Qvt59@dPa4TYUr8JX)cSz z&y}25m~grnvJd`VAUVyqloeb0KB8+8`91ic3nZX!3A&evuR;$GJUIBpl}sv&{WC z_i3`}eg8`dEvb5IdDMaX_2F?-sI4~1oQB=4eqmO1kBcd%iu#n@Anbb_6NstzT#xPU} zIvMC>j3k0l21bT~M$pMXN3rFl|K`kLun(L0D;FI3#H2NoP86%0sGba7DMQfEWp8L( zk;*te?aNlAJsw1U=jSEg2zlZc+Z z<(65)9HkBteU55C7|<&WNa#Rx_r1FNSlR1=lN|WBmi(FV2-1JBee%Z1%Yc4IN(c$8 zGwadHB7x~PA!Yy-$rsaJGJ~u_NZ8O{Y%rBW!h`lf8Jpx@N(8Y412in4Q-!d$(6TJ%P zhP4FiOmZE+VN>?fC3p0avswaObw{t-)Mx0DJ9^2n=EYUkYoVNUKNT{mll1WHrnK(i z@w0NQhd?knd=HOr@V<^GFkD+wfcG(3F~#cXs?QTn)XPbCQq(ebXxDR6iLi47IZ=4W zDLkRK&~118wqrG|2VMvW%3VWf+@3F3=mfH(o^{=uoT8+%Mi>6%=42Ls>V(QBk_j^^ z8{K(7?mVlw(arbc=1ujD?z|s&9xHLe(I`7#Q;T5UB3R{PCAA-dR9;D?Xl0R68wgli zfR&ZE1hOq4GX)g^YYVVq4&MWr&g=f(_p?{x`~LPy?EQ_KSp!7oooEd(Z+BiF;JIRRV#hZ3>*K-o}xrykx1k6zli28d){iYR7 z)Ss8p)LqUWD|wTYkBrugg!h`rC|6aJtYWdcn%j{*7>@@8w-Qa)Vz`;=2!XB= z=&}-=09XltrqCnMRRUcsCwibQJg7v2FbZ7n#hTua2eVf@U{PSZQD{xAFq&HyJZ3Kz z{>+a20DgC7iC_1v(cUPE1bDQs z_6K-VJtWxg7xr1jiEd!OH(;t11pEEM-VnAOPtU6<9;L3^$6W53kV_~Qgk(tH2{kYF z-1fO&aeX99C{cuGglAyZnI_cPxdoY;_3h90y=5<+cF~}@KAxK92(i@dX-nDu@AdA0SZb+kF=VM( zi-r)E5Eg@?4M#DX;;p7pM5s!rdc>$2+f@yOwy1x2a_WyLi>aq4By0-0Bc4odx=jl* zPpr8U+3vzBc%-@Hl$elu!0~z4fOq}uwEV8WotArl<2^H)iOhRze$v(B)%VPhqf5t2 zk2N{2ZhsvLiEjc&j@+Yjernk@ZqvJ^^!0qk-twEqcFx`x1G<%`2XyE?N;MBw)R|% zFCYQBr)RCRP82-%WE+y#@?Y~Om!Bf4G0`K zRB+Q-9GC_npwMY3l&wPmqSJsdO+`SV(@@ZMVub1_2<>+N%90pucEATX<4VKY>Uk~)Xy*gd)WZ&$DTSLo+mR6 z6+mx;+0^;tD{FQf;?{>~szMy!*2kxHM+fW(X()8HA>-w;+YF$(?d3iO)lGd3!gq-9 zWlIC(?-2P-8wrH(5aG3Tr%dBi8{{paPSkfAda&g4<5X67^Eenfn6mZ+HyPYyY8M=g zaWIDTwZFJS?K`zEI$GkVPQgs*cc8vcZ5zZ-J2{)4Ht64x`cB0K%S{HTfNs?H87RnE zMxcM^=&udH4n$pKeWybIiu%rOHE8T=#syGFCa&wAxespt%*~%hA==~Ct|*T+ptnA6 z1Prdlps5NW{x+-cG%#rD4xvY{{+YJ7R7wBmSv>U;wn*Y2dT~d8TwKTTEOuX$WF7`j zQ`_4$NJTZq93afGrYe1K>yt< zKq(~M4V>|-7qcYxf@DE!UvRIOe$5NR+1N`6WFzvC<;TlV_HoIMTC^tfpgvy@N2yAD z@)p53W2dbSL2wv<6zN)ip5{UI-9l%wL%mXOb3BWPY%KJnm*kZba*wT!?kO@NnE7nv zPW;3RLbpP=Jr3E;=j+SS-Z-NNjQT=MoRvA%)(w_O7(~fzPXbD7@KUlUCkxS25Y;$b z!4aDfH#eqhC;3rY&iMr`jTmYq{=KJfjfLe{DWy8j#GETuCo2dx|Azp_VOgDwfqw`t z?=K^GEpn_Sduxot<@s^u7VM+HJv492H)qUD3o>hLYUW|R%{J~@6PsPlA`+KxFqzu{9EXpKh>Vs$BOLJ3xD~zR$RN-K_pP8M>OCiV7HOWYxT#)cI$T-Ted*@HW z419L}Fv?-f&L4>xlp{92fYF5@s6L0d+}lTH%D3<100OjGV)*)WCp+g zPv}jbCLZhmuRG{-;7~Z4`QG@Ijb{^oJ|nN(y&KQoqC|Ya#3u{!yW`n({+9UcdoZDJ zR2pVb!D=2bDyUBO9{ArWmN%OzQVt?@#CUkzok=r9@kALy;L(WRc|3wW? zUcG2?hf4U`bk*#pdf7ERTQ8iaLdqGOWvP-sE<*p^51AjmOldbTPQSAL}8 zGhtwse{4YBY0;YU2SriK8WI&nsr%G-Y+>vRn3v-Q3>mJk^NvxnhwS#l9~XkajFc7GfQedJ1uiJmL5n_VFo=MRAM6Z@5j2ZKUkbxQVUh0#yr!<9-S@>NyW6HS%h#H6*h#HcO zDlD+E^AC^7h!d3U88b%*Ap;=;Ap;>(?ETVvLDGbXtjjtmw7U7F9vZ$%fAVRXeCnB_Pch2MYqP+%8OrMbeD z%~&O)iei??|1)7vKdAOIh*<1JFFw@Eku*Q24ZG#3ohV4snjaPhi^TnqM(4DB2C^NX z7Ho5tT1z&?Zi}%OsfGs7OvlqqgW(?+$?TgSiHbla@)(7id|k!ILnU_A`MGBlcQceS z;Mim>>E`mI>u}78N4ktMr2<98ls5C@@#;7#!oboFDM|@YrKyth&BX+}b38s&%@rR$|gN|yqM$E%^`(z@$7R05F(@i@Bi8JZH+(rSNm zUi)zhupt-V7FAh zPZst`2Rrgt#{jFN-m$d~R@&_YvVg2wW^|?ktLQobU%*$L_|onNkOgGbi7aKpXH|zV zsxm_?{b-f)(2hwdsdQPbS;!>I508j_iZG?Jyqez%9Kzhvc6EuypC0$DpAdlT^ z3ijxmM%U>y&P^JHXK@y3zT|{@{~S^sSf^`j@4oF)9Z>fn)+tkJDb({~{T~qP5bM@r z-89zwfI7r_N5uNs1;jeUdMCs>pbl%D*EL#htq=ORVSL0Mhpthd4^kYr2?8gDa$>3T z8I6IZ{!*8Zy`Om@bVxPo)Co+KIy=3gOLr*P*Vy;P;HO3r$p$xln)}gzyUilrt(5)yq~jv zpPjo=ID4IXQAFm`z)2(fJLQicH1;_?2#tH4u{`Kyw+)0wW@?DGy3l`{h+(emNcdjf z_4?+0E7?8_N4U!o>U%vnMegr!W)BpBSiC=iv)uhG^*sfg;_j!IsTUF8fo$AZHkKkX zIJ>RR&QK_T-gXLwL$9PsaERLa3meE8@R7pDax103LX z7EE@4h8DpY?s$eJRf3b;@gxm>f-~Il3^S$T3>f=$v*tn+Ye{KH;CcJP7gd$3^JB z`yunAx2Y?>bkqC<{Yg1PQP%_Y61~MDc%fY7iFe7aNCBn!UfGgtTbv2}a!OIo=$^us zCT1;6Q<^LVWUOzS)+uBdMx6t2032DCm}}yawF-!A&~~v?^20F00SBJ}|$;&(~Bvw6RH_+1Jmrc_R)2BbFIQ=~zxNM0x+b{8^a*6vrFk2#zGO*wMXBvC-7A0)<^j|8P zyb1$9O5E2ZnTNp>#U+JraYw#I7B-ttyu@<`BJQ}$-)9SO20iYuD5p-Ljq0&BZwbt6 zWH;Lb*J8Y=Zs+&q%Rx?Z@%res{JPv4p4XRE@T8w^A#y~OqxnF+L~5Y!#fkg*mtVa_ z;>TgINUmm4B=7Kl@#FVkOa-R@jJ>Jr}yUG|A& zDP5cmX0FrgIla-pKc)g*hdkM587-Q;iC>JW{%HJ4(a{+NHFHr-cG&mo4KG69pEJ^3 z0ac%qi0~#q*f^Yxzq#o`h3+DGzj|-~_vz->8`2B%Jg8$Y7aPHXnX=o09PozJourK#~;IbwDd+SrY`gi3L z_j{mT;#(9%K@xa;?9qg*%=r&;5r!lFpOQcPYckA6J@KLGQ0(%@`qhITvAqbl$Nsa; zc>^~c!m(*;!M=1rYS;5DU6%;nKg(-jAYO-Ra>+Cx{?z9vq#`awd?w`SPRoL_^g_K@ zJ74S+ z5YC2hPE#T$Jwllhy6m?9(Y#CrQkQwbHd0HaaN!I+E!CmE9T_sCX6vM_r!kQ0GzWB1xRK_Y|;ZPrFzM zi8F8h%yqFNPP_TjR%-Iq|C2raNaz|m%0se7OILDM)E=$ut_}5wBVHn{YdT^DV<9r0 z!fmXja3em|WVG1N*z!wjP88 zZUMI#W5K~K=8$w(af{A{4Ztv97%&VqO32zmI4N6p)}3VFym4B605 zb_+H!Z1^7dgrmv5pL%l{0Jwjb6GLdYjS8M_TeN#d8G81K-Q3=jWS)&Z*--b+n}p10 z3RHn&dULvpYx+_@6D^M>`FNhkij~cJ^Ta2tE6blp!6blqfsj&|y}QiN0?f-^PRrJ1Mi5)Jw6YJ{vIUw} zOv{$0`M{sfLvQTwo^}<^PL{N_FrGMY*w@$>C&a!|!kQ(q7bFXu*s5A7y7nFViv?xN zMK)h2(&-0tFNnoh^9(WDrunVMo7f;7ozP428}TpqC!O|BGxvZc=uj{Fsh4t05lRM121-WWrWsM_g#Q1?*KFX!w1NO7RfG80gf7;v zla}Pen0XNWJLXep+;(VpEQWa(*;&*UbdRU|XH>6gmJL8{ z*{7bNwpKJ2gW9sG2N2X&#A5$h*Tz~X$^pn<;TD@Z$3BgJc=xlikZo(a zgxC_uWH&Uw)p73kdlcb&$T8mQyX}nQ~P4_lVM9Zui(DqOQS!1s-A=cPSOn^1^5))pHy+rOrf~&EY z$elOIYZ8i-dwG;oOh&VU&^S zzdrKv`B5>xFrxBf`mCf^8hO6nz<3tXt!i3&^pd>lg1Mc%(+zso(zLW2PWHVU*5i?kU10`k<^I3;C#mUh>|`P7pBOEPE8vS0Y_4(*BaGGOT;cAe5QJ?l)yNV`#fE6kt+nmu`;ny##Gm_78hFpQcOv?qHg8Yb znh{&iqG~@l4LSDDfD*_;`~J)$d6>i`JF#L~MjUuy@E1w%iW|x#s2gc#PHe+7NsX20 zDx=-jD;;!p52QzhDf4qVG6$yL3$~bH0H#+hV_Vd*dpXl zu|f|i3zp_yp|`VW8-^Ci{6^vOZZ~ z*t(y8`IQR&{5T922^FhEvK!GCy51FxX}s+}V{htzpT*x?mtQ1&_z&3}6uUiF7an)` zYw9R$4B~y{gWm_#VVf_D%@a{*WS~v!Xrmd2eT?2`-)aL8m*)=Uo08X<-%%Dh%&Xx?Va=Ng=&-Lfn=T&q z&1Tb)!@gOQSer{%b%^+@N)cc8E0%2Is*ZQiLn<^??XOt2jeplbjjMlGZlms3=xwmO zD2ReYhE*qQ%!?S_qVcOg{^n0s7BTSB*nBd2&*$g`$*i`{wy885=}Pj0VwS{SkSxg2 z7BY$SrEZ=e!XENt%GMj{+l>ik&5HsrGPHg4UL8nS$6Zf-UKeD9X@mp`5A6 z?4q0!ArqQ3?eyG1Z$Lc+Y}%rG@nM)>ikOu9y`IiPZ!9d^J*0CMWU(;2h6K4v zd>}!7%mn#I3cn0^ethl)F}EG*OW9kh?rv6{NRm7E4sQeA24y5wi*=i0&BDikx3SfIEbeWXc{k_`=nUwL8FU78hO=8rw=Zj3 zZC13TGgJ~>&AOnQ(7M=3hYc-01=?C}#}X|TrtpPXWj3v)3Ojz;7*w`sxLHcyGa3M6 zG;aZSdsMNd>+8VX?mb4dp6rNL#obGkHyfpweKMVQ=(p( z_2Oy~-A&~4#|Q#2*hK{EK0ODzeW^^<{ZD0L4)hz}+ob)c{zu!#^KDemi>`L^M8@!a3gH!%5-^RTHz&n!%$2|ZMM zOdv-}OE^6?NPZQ&RYL@bx=3n?+7w~(m2Y*!@I$Om3Pl^(ABG1t! zH`sOTEqqdRzL+hd{k_Jf7SK>CDPwj2wAArda}wUY(9K@I2x#&NE%3*jhFq$t3VhfZ zVOeINw!K>+1KQa#(wB=*dB2f|;?31;DRs|p$d+K7M8DCA5&1Xv-CSuWpwM+F$PwFe zU^wK05drM3TmTph7)bfhMKDOoaOQ}~GO!pDK8~m376ZTl$zZf+9Q^)2p*MY+c&z`w z?x4@dPO{;A?ne{q@41($PWJea+vH@t{&syi;%(#HFGF6RGwStweba_L<{Av2>UTf& zqkQ%f&%U##AMSnAr*n3$Plqn8@MEgw)aiiPP1Wk@7Zio)OHLu0iA-LMq*OMlli+}3 zF^)xQ)N`RxaWKZg%qL#rIXIXSBT2+u05QuY3=U=mVtxW*mLmoSQ$kE;#PrhQ*oF5e zo6M$cOcu?PH~z-vUcB(FZd6Nwu4_ZOLApV@HQP87((Rzqt#mUHG7d5hG7d7X)UAy|3+aXZ zT{~Q;h|ZxRKgxnLF5y7BLApV@LAqHa-LkYoA8Cd5r4=5G;3x>xLgm8=WQ2G?qn6UB zN!CZDlD*DaBOL+w{rjrDBQyLd84KRIT%H`7Awyw?HsGleV=i zCJ0twvA1XuyhQ#4Jl0D6MHjQOD!Y`&KrvqK+FB+P6e}>~<(dvF_3K zq|BipcWc?R9&#)8PTScqb)(q{%37b9r*Qe?0VCxpL zHE&grS;Uka0=a00RC~Eol1nFAK`}8Mr1calrd>g|)1aG9!h&L_K`~`|eDi<6;%H-p zpcVr&y(kMJx3UWWqp*N(1F*BVsLdSE*=9NyjU!OoW@>Ab3Us!a&dLy@_KJuAwb(&5 zD&#<_sMXP*e33n<)qZLfO&idx{WQ}C3aHh7YAG{A#^<~^_7L}JVPin5Z!Bk;K&{pm zb}UacfnY5sSkc~qRE*lK!X%$*lLG`h34$rBgIkCYimerjh1dot)oM!Vd=J>F^>L`8 zr2&$)o@Cm}0I^z6EM;M+F-=s=q9@j!e z?zG`67@ZHLy-!c$jNh}^?VjkF%iATeX8UihHBdC8KhULDntqh+$3m#UQmoscr81dKlWGBNK-(^8OQ}r*QUPs1+b(F!+iifh-7Zy! zZS9{SwXKd8bQ0Q9Y6IGk+V@k>E`tO?ZED@*+8w_yW-}ffheCjs?>P&Rz>Bmwdr`DU zIs$D3ws`{_$nC`}a;>vTq`8gIcDKy!PDyS=00C}mB{#qga9ap&X>%hA2yj~nZiKku zPzGaWVc{bM0#%TkUA=nIi=W-=M)kI3!2=^2NPTLD57vjd*-hV=@&J5Wp48|nzB2*- zHJI=wU=ZAv3vT0n9RtnnG|Y;^jMF@0^oP)oUXoYvx_ucQgYH+u2b0r5bh{fr$U>Bq z=!(?`&cgeX&AoWxi!tVL9m**_dvc^DDRV_hNm))INumw%)#xy(EVP zg>drYS+q!)q7Vln`;x>#^upc=w|D&8U^)+dmi(Ce3wLA|U!`A9{KN}F_w3wt(=P?q zm$yveek{9{ehpY6CJ`}zOPDwD<}_l#JpOtK)92LDHDnM{eRl3f;p}zV-eF-7Qc4un z%L@=vyt{>a=03O;g8B%0TL~%MUJ-H%a*Aw@Gmh5dc2YS4J3vmgTuv1`i$YpKT0vUP zA_muQ)fpT?jVP;1H`Rrlf}Db!f}Con_ooBt(?;@z4$ii8g>Di=>Xfwh`$^$9GuY+awgqD>`x z0?XCBW-`}(Z#{caa1!DBgN5(c(}PL_DX+qA_7-gX0VWuf`6w%@2WjGrNihthv@M3( z0;DLR61|0CQA{A~DsrobPH0H!VAQ67HU~<)Zpx3GHrhY~d0I%GqCpBGwU9{K00((m zNFHSyJk4gI??o^V4p95EsS0AZMnnSynzhfn69m#$0%+7$8Wl|iP^ztz()I#q)K(fP zqak{mKKWcKC;kf+%N8P#2rV2jw7@gL$S(IY{ql4Su}wU$;ZObbw~wG=Da z7NAvYX;m;Tp2L}!z_MtOWpTTAsZ`lA0hQZkmefP#l34>n+ezpZHWA2eC%H=o6$ou7 zp_MhZ5WQ_+hqcHKqmDrPUBxlXFp#%(aiLnstL-mP*iH%;4KL8yPC9Fg3lz4K!rIjG z;)Knf{_Bqs_&P+7zwI(L>3u$uyPy)EmC`o9hZXW^AQUyoY%ih8_6zu`#pE*05D==x zgi_YTH=hs6$h90m!S4|Zers{-QyT=dJxmkmO%23aXsZ}k+AUrjdtl&}djTNQX*dC( zQ#0jM}{hfJO-sZJhfBvzD``!(l&|fUv2MUwq0v_~(xfjGVg6wL~ zd0`fxUKSLRUpUS^#oi^*?1ReH@UytD3Vy1HAA+Cu37;1D$(Y(Ra3Iiy&LKHnId}^I ztPy|^=q!o7AX(7NTxs!`Igt@zG5gq7tp|Rpk)QITz97>#%qjwdHDVAl9WotGFLfrM z(ukdE9F`dA`F9xuHbb)cZArh_8OHtnirCKhXYxcy~aH60XD!Mu;F zV@5SSAB0G_s#so!Vag36L{(Y_%M+$DEL>3)+70t||0C=ZPp(koAkVJ(`b?1ReS|4_ zO6=n}U!C62b!W*dv5p_dwAA&tg}w|2!}}h;{Pkh)d6cvQV-`|o|FvdeOH88HtZk*0 z(3%x4QJk$=TgD9RUjt|MmdtghTQ-kp$!t6esd{!jJKRw_GrC~$@X-Wvtq;wX>P+6I zb82~*_%GBAN$_xOk^u)6RyEDh2R42s^T|1L1_K<~hDRo2 z7C17WEbk4EOrq=@DBJwVB+77PTcB)(x@0%dm*pNl4{~Tz7J$uJ7&x+J4Mx%MbHqmMk>LqTS-A2v_oWA4fAx%+IZ=jIeP2*sKL zUoC`EEX77Xl_NbM7n4OySeDRc`f@O&!xjC92|ogsEFgDR%yY^eog*(5fCHzjMwWf_@`)I zyzXATdD+tZn%%m6YWqxPOUAp~x_9Z{bE#sM^Fme~Z7>;R6=anq7sDHsRc4_!#1+Jq zw+O~tM>mf>)B&cI%Z@tK$`n!N*R`8g<+~dYS`b`@fdF+iwVzAoi^EGw&S$`uj zEuN|Cts=N5UTsF_tlXXH&s({{vIk)0Hcgws$_*+hGoiT*PR||m26Ttk!kxMoABI_@ zu5N5rkv3~fA?GMcX>MOyROIt`9_}ceKrA?0>WGp{o25O}EZA99izMDa2B`6#0``7h zyjn#T=i2mDikh6k6Z>A`y8ur9(p8;}hb%bT6gW!^Nx)|rGXg%Y8Bt8(lQYl(8~|ri zg=JXB^@Ufij}l%<-`aS1r9HdLSsONzZ;4j4aho~mZQ}-&lxZsB&=!_FNO+}Pn^mMW z!Yh|qh#uh;*R9uJJ^8a;8D2U0owYc;a`Ig)}Dwa8O@4QLKjApnMhqFao zZiykOykx+~9H|LywQ+a_zyWYb1bLb8S`wGj)-n4SkyJ}q>_sm=dyB@e{`ed9mZ3tB z8t==|i~w1U!yn7PY3N!hJ^F4OsM?v=B$RSSxXrS};&k3&Q=SOz+tE*;CJ9H@D^)HFk%pyTP%(J*v|(jf9lQ(q3< zJL*;S?7f8vOARIJ5)gYqvM`nSqnN!?XkyOxd{DNe-~T7{rcV=(_5atUwkw1A+v1h_ zkBz@&(>=GnVV`wMco@0=p$H!t3&Rl^3?p_!A7lk~gTuc$+qA=e_p=j!iD%#0(+~H) z;gitwQg=F0KFNf42JH1+cC&h|^kd%DNt}J|xVyAx+3H9PF6kVlyS8gdYcW2gbF}W- zt|hH6_;j7l(YkB9&Xjf0PVnY)Kbq`so^WMKsS{z9m}W|^m(!a^dVRM2jgVgFnVesw zXTncr-}_{%O_p@YslAd~HvH)2+qIq8*#p>8v)PM*jn$luN3f;Nv+)RIU(k&epp8c$ zQSj5ImXD1`AW_iiBQT7DuOd!FW8tTB8pFWbN)kkhqZMQr>2df$hF?h68u1t2os!3z zc6o+gh`a~NLO*&*UiZ9z?l_l^y|c}3os)60_h@c1I_Q0lb454Z&4aOMPbEUpXyw_S zWE$~om2r0BR^=w00v@=Px0gjJ>eolI11Q<4#v+yx(B{2r!m_K`{0E!*)9LJ;;>Ubc zEnWQ@Dcy0x<(HX?xh3l{t0h{pq;lfFB@0X9AHRBY?zgmLL9bpk3H`WTi!w9)EjcG81*omm z_|^GG+V-Uti_6_4YVG>8lxXb|i&CSt3)TG5+9l@srLX!VwUuGoxWFREv~i8gS*DFE zE%Hno*Ql5#wGPNA|FE}5*N}Ny&)Q1XY(0-9Dbs*OUeDTS%bKyfMChWZ=+fQ`W`8|M zYB|c6cov=5w^lS=Lby_0OAOKuP<@>X)|n&Fs;$dFD5|VQ zWMLq2(9ts}3doKg!*U7P(ZeW;$c`R^l95!+{?8zqQ10xzAG4>~8i%=~dbakOS`Z%Jz6`4|Ta5$P9wwjb-x9hKoh;5>c`3Ubio( zs9N0TrBZHrp-A_4p$Lvq+HkxTWQUNuHT+DHw%9VI_EVv|dO(4f_F~L-)S=YC3N>V zju0G3h7fIpi0W^li<_xkTRzX}pl{Xr-L(4aP}?nLR1f_6LWSd@cD$bUy(jz;H^7m`P7zO>B06@m8WBOK}CWnFJX$!x8^a#_~iXV(~pq88D(fTm6xKReiVZd2fN^v>C`+3-qa` zvB7=tMe0J9 zmGQW>9uu`~PxRvOnNk7e&I~PA2RWq1&Y|uy4!kh74P~aB{RCc%l{uc{Le$5hUbJ?IAid z&jV~XS}G50Hy>a#&R7PJb#@w}dj@!)xc^jwcd_IFAP2}#JxEXjxvrxDya8|P;GOxF z{gQ79ud->c(ulMSaQ^S-O($au!4;REzhR?;1jivk$&Lgejzb8;)&U8QLxM~nJA>ZN z{-Tg`*Nq%Tm8NYKM8NlM4_C^(_4yqLq%ikMVfN)@zf9O|U+F7vS*QYi z3x%al=MJD$=!V9Mjzmx@hqrj3RG?I-dy=@J)s7-D5&wl!p=!T}stXA`b8kdWpjV(* z4p@I*GNg-vJ?Ita73h^<%(iuhj;@4Buav^U&@Rv}&@NW>6)0(Ngu-gLg^>?sZ7chW zUXPujFeAqWy#l=gy#l?m*uhY?KE*0Fh-jFMENl=BGZXjJ0gn<=qJco{KkJ%73pMJ* zPrM+k3Kcp%>N%2K9m*1Q_MHW7O=mJK-lw$P<-h#GDDO-RxT_IzJ=u4v8%QYh$r|(k z1y@fKgygfV8zLlMm7?#U_28-WEaAZnZ5d58TQi|58a^AOL(>;Rd*K0z-epUi0~Rt zAJm(n-uPjhU;OlQ+D>0gF9Px{ntYSSdV4f>dw5U7v(zw5A~F)YUKF{c1h{<#;#l-{}8eP*h7?){QCei=R- ztQFCc*HemyHyG^|uIYdjV~>X{4vM`TDKuMFLg zVXMdCfU6{Fn(Y5t*?Z#rLMBQ_#oVB^n=Ayst=;F+=#I6!Ex0e%?o$b(3CTmJ=hBFy z!N9RsCb<_MhJSPB6EE?cL8tbt2u;+DeJ}AzOn(*k6J~D-n?1AGi(dQXTKXL#!lldE}k`XAfIF`)m8^n<)$! z`iq78Ktm5`oBH5tj18-^x9{{)gH1)-<+t1lqsTLmN1zfCczFRikeAlQ>|{u4$vPsX$&m$Wu~qi807V{AomU@_mrMa)6j;u z0yRAqodxz(G!T^a2ui4F0%B${yKtoAzzc)FD8YLOVF@*@d^I4?KPd84)ItUol{+o! z;;2scZ7j-lky5D;0?@!UYGB8?r+gl4L)eBCA)wl(PweLQUYjLn2OnWa%SdxChK0D~ zstep|xYZR(Voxtmr~f1h`=V1HY8{YqUR@AX8{`T%>arW|Jf8x~u!8Af8NxD5CT>3O zIN}z?v27b5vqof^_8}}oZLA}Pc!Wp}EJG5wBwt|}9?UXa5j5PR09)Mg@9{PjqphMr zd%SYJ5Z~wFiYs?}MxQ6~AA9M6ENw*2ZH(O>E*whp`P+ow_ITw<9k_zHk-ye@jvxJx z#OK%lsD*Ik$LxEMyt2jH6Tj!jDN|`|NRPh4jgTj$3oILb*+#|1jjrGb+g(E5%|p-! zI1G6ts&K5)7cMCmYV>{F6lE&nXK-HbIQE651R6Db>}{IORel=hcUJ3ZSj)+eX-{Z z1kmxa$%wdCIzej!HV{CKmmxMNfXvoXkU@|^r)fe$2A#4DDtC~BB!VP@Bub+>?uZQ3 z@vE2Jl}?+}k;|$B-J*0sMg){+0(WeKBg?yEW}`^RAjlxdAjqJ8pPd^6*BcKB>7cai zf6YQadP!bsf&yjS*N?z^9I_k!tJF92H~tq!Kt64#z5fGCOAMl9wtEOws4bD^9*yMe z0KNec&)j6c>1d1Hc(wd)HDG<|(OJ7uP0~r=y+pG`5{yMx7I~}|+7kYsV}G6mlucO= zvYWkURPf=fCvKP(`wjyrpQpJOK3WY77zf#i(?DVCX7F&}0+fy|Qz1W())vlJ>wY`Q^P`fr+ zySi!D_LOX?U$wMppAD;#_H9*>b#TFRx-?}sh!%dFsz6=as`MM@6*hz z$glZ@e?lbnbq)H?jnnaFzg(g{%hlfv+yXs78w0l-5d=mI12=|Ax6a_hvXlN4Yll0+} zEU)Ow9UFWSXcE+k%yh?eZxM`{<(YH%BwP6;&?N9l_&h$ktXw%B3Yr9(1e!!v8=wS< z#CN%$pu4mFvsD)c&kB$>>`BYK- zTlR3|Cq`-PgHbvPk_2=u_%AvEZ$( z_*v6C$!s zEUKBb5PuMVjf=lRk3ATLnP#YrL_y-!De=f-ANkMTTbNM$q_lcXbxX==clriW5mK>n zsc4vkQXar4%ox*!Q5YXAoRj&@FbX#aHb5)aqm`vmxHMGQ?9BOX41s1>VrYQnvcK8a zD|T=8Ek=mm3OF^*>*}q!-8G}f)T>&s!6ubei?-Q}MrzRpm6T~n?X+g6htMr8+pHojIj+Uw3I7~! zF+5?(FB^}(eEae0dy{B35ni7Tw^C3`)+~x2(RXt%h=uwg=Wvg?r$YD%|B=t2NYh@@ zpFH3jzYO`PGHRts{zNX-bI@%UvY-saI65&jYe?T+4KCgf^ji*5-tT2J5pU@n;dG|+ zeh)v&PD(_nYpQ2DZiP;ai=~5)e>PrUHS2{sJ=Zhp+IU}^wp$`^El72o%g5f?rg-HL z*h{a8z|@(DMlSJ>>JcNy-BO86HNcXyopEvpoWGv=d&cXR5zfj@mPlDA$8nkpD{uXb zb3Xj5PR^r=v}SUtP8FW=-qAN#B3=Cel}ssA;*lA$&%r^eaT!&+vTsfBsrSui&$D>y zQNddLvfybt>4~Ku65bR4&&0j==5s%q(8ZtkU)<+u;?mq+_0=C2*KtgD`La>b*-z5W z%K8OtK@G@-TUf(egs*j3e!I!9wr)_7kcdV%QMNwJ->xr*13m9S6KE#@xM%0?2ZN#7 zwWz(1YFP78WjsdL)`IATy$AkxVkbJpI?nL0t2GXn1(V&NI2?Z1^hla}huR2DH}i!w z+li}&!v{Vs&Y)v$&r=H=^ahUR*IEUt66pMqj$d1E#Pfvp!+RQamJ9!*F z$Z*`#+w(IiuaVp1rlg{6o&n9D=o8*eC%XJ$ya1f8W5@opc&&j7Duy|wRqMl+t9H|o zi0S`)C@TDYg1L$|>G?$LdBf>o z!yMWgc(z`6EjCtB1-K)Mn^SwXSY4kO$-qAGuFfcs(o|y$)H&2?a_+k(X`p`C+a1l3 z5~sZa0d<~s2JX7F+`dp!@K&n1UQpS+%Z!-L;P<_GQN;FsmOa-WLb?(+hX zJACY=Pd7E$sVzKzs%+gut4G>r-k%tzX{gy61xzX{eWH31jhv88uWT-nG?f zs8{ktT$}crBQV8!-o})OqI475BcN-?f@0^(`_dCUDlZeR>AstFMv-4Q&b|ENk(Y1+ zdM==M0O<9^rP<<)RZ?@1f@sX)AHFdMq@YK&DS+N#p_h|_tBt`u5{kmyr_>tV>CbEV z-JY2(*nF-T7b!~c-CiRcck>nE17)D>_RLjF*T+8Sk@d6N!^Qd>=PM6~h+gE0Kb^A! zUIJ1J=Pe}Md){14Ea^Tq6iZqE%@d4gF1ux)*v;*|&ODyEcitpqi^FkC>28zQo=W=? z-Spxbi|%yjjQdpMz+)QC+*s?xLG~%cLipTSq@;h(g^DR)A*5U$AJObCsvsbw(n^pF zZXHkr5K`_QP1A)&tyf5yT^=B(AgA~&u(GU{hG{2k0I^kS5C>x_2ZIee&q^1j0XbD} z)&gm@j8kD%!K&hYOlnMScS7vfYgL&&mmsGgr(jiy8MCmeTIT)fKze=EO8kBkrRENO zYo5P07j?5{N18}4e!@hD@cC>JBmrgK_02#FgGc_KV}H)Kxj~=LEAz^;x`IbW(B>Di z2tcPEiOXNe9yq|u%7QH5g^H$9yeI*~hH?Uw&r_n}Yu+0_t?rp8aXv8ASgMH%K8-Mf zjK>)N@&w|8G2-~dR;>=3--<8fo#h0s_MCE?8bji=vYW%Auasa25oc2YOK$ua(R>`( zCI?muE8^HTIW{A{fdkv*z%r@dFG>9t$$LYq4qCs^>`0wKkFM#~81T#tkfW7`Wh*cw ze8B`dwsLMVKbGGd;or3GilID+LU+J!c5|UZSeW%BA z>8r#;^YPn?K=FK9j%p z6}O13jlWU5B)XBCupsec;jYl<>HS~3H?J=PTD(uwKQO;eTRuN|007y#T>(JPa*@`% zFZKq4Natx4h;-{(TbROJehrasUhs!V=htXYzmZEO(y5F(h@74?pztm1bO?1D`xQZ` zpR<0Sox4#ud!2ewRJgYXp>CN_pHIBRgHT8CB^WdNB5Y-G4oe+EUG|E!5A6j@y$?$r z5p@W4q*Ux|Et~50jz!cV)R88IrH(wgrTxOYCe(H5OF9e=bEI6Cid-?w=K#ZejLP-L z;e%{?&PNbrLEfDzPqV+a&%vh3{&YO47|fvSmukFTpsIfDJH1r4Q)ic+o2zbw=)(k` z1I{GLdNrt6Fhn18?q7cFa*^Bg>_#d2R+)XGu^-(-NvP7okJ)9PhbeE zu&M74>E?wyy;j@}xDZ3f`Z)z{;oeGwtKsI5IKRtVJ)_w;P)^H3Unx;b$u18W>p5FS z;4Yp)V?en2pn-5`%By#0ly8#S>Sf1(xO#VPqnf1bU(_vk5&Y$|*)xlX0k1x$eI>cj zWH-5E+2ofi9(_67;?YZfSwA|}m+0Rw8iub42Blsl)ufL6XOC{#%MO}6>u2;A$hqpx zT!**aabMns?91?hvIBj__PxZnyw#M*sm|UKp4yAO=*3qZperIx zU-*Q`UY};(eb}dStgvNB)t|aKQ=AnE+^i`70&a2<#S}MY*bvYGbT*0Or_d>nI{|${HJ^PJjxv*RAB?x~Z zS7QR)82#aZn_RoRCAcx|WIzYdS#`;133SSKG5`bsZ2=(DP6l)Uoh_ha*vY@ZPR{z_ z!robD@5r9A)FylY+~_{az|A_`k6NlK~w-XLIOiJDKM9 zEkvUZ#FXXih}7n>wc$41(c}ds9SfRMCyV>@3qJkZZ1Mu^7v`n_`!(r?3?}y z;1Bp)+yP=4{L8rsFaemLV@zQBjetMk-!b@W-}lvvCZW&Xz3|O<|F{tU%aRRh^4)k1D` zHeHp8wVj&1!|j6GRo~DRvJdu0q?u04$>seYjTi%B41OHc)9tk`u&?yv-asPKf%0tSxPRg(JHi36Yd1w6UWphf>9M17VeETCZHxjLA!{5T^ zgwI*G&w0B#w?}XW)u z362F46?I3A*{8}(1^pP_EWFvey;%XeO2-1YL+Gx4hgRTj1IGgB1Ns_5U!`LK+yQqD z;jY55K$;Aws~>gMB~T2Y1Lzt8U8Q3I+yQqD;cf%R0_X$!8bV*CV*%U&cMaigg=673 zUlBS+zM|HAh3HJhfwl5ZK2V3weUqAVvnJ|Rx)uN)fY&7O*7z2HAK=#{{8l;_03LwX zB=A;v7rK$|`X0hXH)Ko~{GYt>H}rHqUQg%2ka|VWy&!hktp)v^MXPY{DPZsCtk7*< zcEDcJQ;Vo)2Qz2y52=FzI8E_7q zTY>YH9v~17gj<2|6|Uy~?Z*l?DByn{f2L5^4D@|K{8MVn&nI5uIfH>y>^?wlSdA^; z!5(0bJFnK5;#%vz4)$2->hAM!X<9&mB(s>cYA78Ph&!SX?naGbl>%AgDuYkP1atQ~ z*J=0E8_k1Hw&#5L3{_KDrx-s=|UXYMK5TB}|4QlT^43AhtS zfcR}ydY9xla2mI7(sT!nl@zB{&MTk_sJ6jsNTIskiv(Z+*cJh{%AEsL0o4{kb+unr z?s*Bv3Xatg94mIS#YD&GoV1z1}Vl2u?`?_B}1fNZNETjgH?tN?4P zz*^y9m70IT!-9u(3=iwmIu8p-g@@G&4=Y7#rH2Ku0<3KU>joYcAPdO039^+Q7QhOy zwh62i9u~5#fNCqCx~@8q95CGZ!JVJuS87wicy%8aDrE&&5o2vfjCJD*K|mIeZ53oI zJuDalFk9PXwyyB7mb8LJ1`8RiLuas5yLM@~E^k@_s3tG~j&A_up}I1Q1+)UKEx5Ry zN9&q27BCCUwhpr^y)2*=Xl)%@wVO4LeJ}AvC)YAtBbD7* zcVGLgfn29Wi}xwbH~FtL^15K-0l&iHx4>#I;`jVwmCX&B+e&lpXW8$U0>8H6H=1lesR zJ8Ul4T+z$sb646i7ej| zAa)(+>Jq2Nyr+P@pR<0Sox4$%no5JL6lN1R=}w*iJXKK>1fELm#GS^nE#awDxM%kg zbaEUx1P-GW!kM&I%{c6akqn*!PaTe@QrW&d#{(z=iid+D#5+r3FGv>dNE%_e1kQ*& z#Oz~RYu#bG*K9JS;=L*t1|bh24??iBqS?fEQOHA;eH6QX za4VQZT0PX~LY@-!RQgw-cA!h4ItCY+G zh*@`!;!Ys|q?k49ejsTfX`S(_7q1Orx9RqYlns!ykhI}!?9l)&^5v;gsvQtDByBl> z26+p43whh^f=5`kHFe%K4pLgSW;F~XEhH@@EhMeWqq8c-fEYqeF$5zeHu9+!W%h%` zUi4DPic#oNrYU(E$gU3kQuoMzABPWwF^e}#p0=2{P|O}#yk)mnNJ#+ZfVqWYOu{@D z5(d(NbZe2mBqRsC1Mk-2Jr@!I(t&hqk*;0RiS$Ty2RaM)OqG!%|Ji#B6P6WTsT?l3 zW!Yy|AA(VK^QBzdXtQ_Pcezh)ad_oFe{<#&FY%ngzyUvlpDD+0Gu*qt&t{MTEDe?h zOUG2Qlu5O1Z}c9$+KE(jIhq2-24jP<0+tjW^`K^88(8VdHQPskjxmr^RsYo-HD%gL0EN9 z|8YpgO(Xf=<>)qtqUy~~ec?#qY@t)x)igfi)U{=IsE81Hr*9#t+iKeBwI z&5`uO5lNc9`!FPJ+eULFrNGMDIMF<6pUiih%g5fuD7EGMKNCNWypWNEl6xoX-RYfe zAnUU%+DVt~o}Ifwq+akrTBDr8%8mqZ=rA12Oau@?!m;xLq8!KuE`W=_Ic6LbhyWt~ z=5)-oq}U+rNp4T>Igzz{Rw$4|1Ac2lPUj3(fTuq2bkw#5gzAG(=geS$r#|q&Von1r z7hMXuu}?60MdCrk);dUf*sMJ5)K%)kV(2pUJErnQ{`D8+U(=x$P*IJF zE}NRbMm09NX>0-&)u`yCxd{)X8MW@Y8 zV51Tn9W^(Bib_;ybCX@E?t|3M^|NT7!W%EL*nhUU_ud9qeEDJY&v=(r^xdAzR=hU$ z-DWqU_bQ<8M&ayr>P3<3_H#uQ5D^jco&xrM&iZ|JZk!WD#F*LFrnl6ZA0na*eIX)D zcN9_rQiAIan%U5~skUN(1EjaT4*T()<&Pw$%)|s1ol?lx8~4y%?!;D57OA z&PB=UL}K=aqi(H4w$P7Wl2@G;*me}QD1qTjwn6lrkCP+wXtZ}n_k1ifrPAr{q(qdu z2HQzq;?&_seuU|EikZ{dc6=2LkGN~`mNPQ{K5!=fv-cJz%!^;x^DLfv2@MW&M~aEw ze{r9uiR;q24F|(}Z$9^<3H<_Hi@SgIqDkme0!t1GlYh-0q?tJVj2I)K2@y$6dRNvSF5akueOv!SRPP>wT@qTXW; z9lgG^JJ!FKe$y1f`(lV5mpjY>8CWb zxTNSG#jtR$2Hu{Zg(bkNR5G<7t#bAr_}}So&7Ww|z0kj&eyGl?QvdUZg|o32`l3Ea z6vzBW7#>OaAZo#ov3;kCr~~JF z93;LwDjR`CyEz|BplIR!IsH>$h}xcKy2v#xvFvEp^kCCntLc%o(Z`fldlN@IthS}C za9;>ihJ@XF&DC$wn|bktce#_7^kFHl)D?oI1EFfOY#$qVZ}baUR+6e zjk*|!Vi*;4Dq~xV`gbKBS=v;?FEY0D z>MdUDB9wtQ!a&_mHWn>{?!jL^Pj*Pg*qu`Z#PTa|W1;t{FxP2Z-dHbFOD>zh?BEy3!M=_XZf zudH%Gxt3E-+Ipazs**b$S-H~50MDHS&n@w!(Wx<2MGf(p)a5d|FH2Z=q=b)j#$JZZ{u3oN7W|S+6!-I>B2)0 zUn%p$M(Pf0$a77k+>~IVN9%TBByrf+*rx>XY~t4`-)tw)=j-8v*|t!A{Y70A!U_9h z!kl}ZL)&$FVtlrf=)ttS$*24+T(PD6>myCCoAL-w7A)>G5k!7QLRzpT) zZNAqccxNI&h=){q5m(6wI@|X;MT}vKLx_v+aCM(Bgt)t@{;OAr>mq2#@zfUHm=e-i zSN6iTu0G^A zI=x<6$0L^V@%oaw1!aX~&;0yie?jvTs5_nhyzT^KSM68_t>n*f|Luu0_4Kq`0X$1M)Y^c1;~Z8 zzbUW)x$rlq7+eTv-w|A(`>`ss#bX)S#h^|F7k~tw^6n%OO2GwSp|e;h1s8yY&SF8z z1;e2P7CMWCQg8uS=qwhr6H#CD6Y5X;*!wKH*^Ca|GQ@oMVVa_tZ*19aOT-QR=p}jG zGxh8^myf**L0Oe2uDG)PIAk~bWKTsdSe)^N<6Kc=@?!r0YC^(n*;k2RHMJr#&W}Ts zchKF4bPx20JKr!Al*@R~Sb{k+Q(RKuB(!&@nyAfm%2GE#ZS7ekV>q>UGPC&D4$`2_ z;`0-d3$Rml(wnxIkgzkWnj!FHkF<^NkN|nPYVGZiSFWuF{(!$j^sP13==o7%dA+b`>}4jzIj;XAl}L-ze{aX?&1yHtU*=V*gWA&pU0 zKdXW0ujWTP-LQ>~68>nqLwU;Pz(A;vG=j;|x+j44aGpz$r2w|*I zJLCM2uG`9~x7paqlQz~Uj9l`|LGY)5y`L9H`B+DA(_{n9yFv4^;RecggYu^N2AX$+ z=GurWmQCHFF5S98j2)_c$|sTlZrys~M1#hB+00uimAiH6LV07RaSnU~-=bXk{`9X- zD14V45uh9>w+-c{(*=A3-?rgfJD42^DX^Qa-63E%UAsikRT`V_23T2F>R5AGM6z<( z>ISi`CAMjNg3Q*ES=(TunwZ_BI?Vp-1O@Y?o7*=vcQ;RPh4%SzV_ z*iC2d85Ha`(0oP7lTB9*%H|u$-Wjr&tvC?BGsHKIIgq_GWY;!bvEoTsKj?;UOA%1# z3bPC5E8rcYqR$p)md@#a{^pp0Rv;V*mr~x2n+H;Wmz@&e95}ZR=cfM!gahIBAzZtf z9f&WmPo2Ad@Tqgx4?0R?)9C;!+gPeBSh;L@gV@#*+cZBxW^2i;Z7^AL{3*3lI&l3U zZ=Q5>`=;jZ<_VOQS~t(Zl=s~{0YenpUc30I)7K9Qf*-`TxlmOQJE!JAZ|mv3M5%-7 z)>A!a!hqh^(_0&C9SBhH3Xe}qt{;5r&h>-5-3FR>p(eFtzJctWA$!@11MxdUeAAc% z**imaZPS%%p1Adc>j$<}EO+nvLEd}?yiw9;RY_mTQU}6;aQhHmc1nPA;M_i(oBkIN z4uso>aP4Y#AiltEJ9qscKV=Rywy}m)(Acc*0GX{NbJ_9+v8^SxX?}vt){jwqF4`SO~s9JJR2cWn0 z^j@OWL3Qh?o-<)UZ|mu;4Ym#hDERe*+a=czZo6~+AaA#U=3S^sEtzj1duPaAw&Fni z&Jf=;=0Nt&kX_q!rJ5&h{owimt{*IdF(^#AOZePTDa_xcBC?wvOY*}{(lFAV+RddrQ-e}B6k4#^cG5AMn1ZX|d3-216TyLBAeBZu%xUlaJYi{jnIw^_WJ zGf@C>KwOX3JhfP%DZUcQYzZH2JChx`@VWS6Ut{0b zhGq5%8JsSag~=Z;g6TZ;S@L7_&ak2_=HEN^LXSXDlX5w z%j^>ff%WEHg%UCuKmEGz-k$%(-6gL9lnawOR)%1 z%&!z2^5(!2A)rOE8QFm}hBQ8%3o($!kj5u?kE>D|mjk7c$&ksA$?^)Oytry_4a^$WrFME{Kuj{R%SX;c>yl`XX?#y75l^ZPkZ&q&8G>NR-ppr5Ziq$$jchDP9 zzZDC2>Rx;pW*ud^u~|i0K~K^dZ)2%Lek4943R7)yMQ;3}pv)F#u) z6{!zih0M#5=~gfs`On^4n6NC7Z&W~Jp9!tjb7~ODJ$ocdLcKUV>Hm~(Cbt&O)3vaun`H+>(J}`N(7>@{#afO z$xdS1l7^PV;BtC>X-XX0-M*BADaYZp!)rJ3AiqW^-flIQqd2_wE_m&QN-*ek==EZ3 z8eTiRb~`5}6p?Q0LZY0|2|$u1EDptIt9fzBGyX==pfQ4L@bSX?FQNQ2giMHOiQ_pg!;$rrx75YI?)*~o|7Xv#HcH+(Laa&)iv`co`3d$MExpC#3vlG`8iUW`UWaEHD zR1r}{qjA!R=CsiNvs?CwwMIi5HX~Bc`ZhdfIK=@CN!TOw1{x;b9zNABKwT&^TAw`oSmpI zvao-~z8}pdqMy6=8;Q}`SNaJPKcesEUJ#3UAepY%Hapi1P4oGB_+X~4cyoIkB#oq@ zOa2>rhVuCIK`x2s0G^svcRW?fY0(ki^$N{nArHdY>(q-P(SB-wZLeXRN(IP+Fq}ai zv?PFTz%wTg%dRwbL-sDbI-` z%9=huh-(>f%ibGEY#E77I~>HdjJVpOVnZ1~_sOPWq3FF8_=y*UE4f@A z+*?qbDNJq|BI~B%Eq&>qp{1dv!O|z$#jF$_lUf=q4J{2VErX-mHdH!x3+56_uSrVN z@M@lGx7QOvUfQ~npU&l_QzqRkD-DjeM0X)RX0KK%aP+#gGDUXBg*%eMB4_cmqNm+bJ-s@M1)c^^gQri6r`Khs!PDSr@bqc%^t#kEcp5wn zo<1#}UYDB&PlKny)2GGLMsoUV{Db+j&kA)My38`t+mck2q_e3?z)2 zD%FZ$zLeD@ozr1}HAxt=MKg^Rgc$=NL!ysDP%%qdZjPrpdYCb8)YOQOnuJWbRX9Wq zO)rJ0fv8zoJRn@NERbMdle~uP8M9?Qgbakti#vjlfsm=!X)+?e|MC;I2>$Zf?3qQb z)BD#jjjBCT-}z$a`3-(qKYBcy|8PkGu=^(#Bz`Ogo)ebYAF(%QB0|M~tV2~FQ-j#J z+kM|x*74(Tz%NSe_^_UP-|xA-UaqZRTNh{?A@w{@jCSWch2!ad{A2IJajq^$6qdKO z>)2JUJLcX8We!{zg9`43VdVO$V8(Yqi1>JfDEq)5#}Ub4`UxP!5ed9h$gi4uQZOL4tNztUv20?ZpNHba+q}YKJP3Y~*Ar$w922^%b&1mlI z@lf6CRCjh%M2Ti}clHJlV;f>Lsl7pxH5V_mJ(V35@kcZIJ9`88V;lZxM1#YY+SHc1 zR7cg223L;Ls=+~$T_jaQ8XUyfg&10cv%4sWf+X-ls`H;P zQTF~>GTwb?$%oWbtcTcZ- zNIyGwdwhl#L7G~)@LMzbj*ZQr?zy?^JrH{kdwq6pG#4=MmqF|a9bm&O*i^xHTkM(9 zWk^0qK1jY<#5&^IbX)S313{2~kbjVWkbeoakFnq3HKVSOe2{#Qe2{$IkbFADG5Gx> z^|qP#&)!>@FfV>#&$D>yCDe9^D&5ln!TT@n^E7c?8oAD!33>CmA5G{N$b9~oiyYSS zG;?w6(_X8iKR4?D2EW(xyxanB_FLdhae;L_FSo$k{T6szTwoo~GZ)BvEA5WIQDJ#C zJk4C(uX`=-*TUjzc$&Gm{U}i+Yz|pakD~o~akg>m?Xbi$${_3WLaZM;y)Ce#nlkU}uPyg_)H>oecS(_3qDkPeXIn zO}#*GVeZ8XpIR;kFOfTvDdEN3A1~PW)gON&6NmsIKX~<`Nw~~tDjHG6?|DA$QXEWg z#~1X9=Wej$H5|)ou0Zsp_P|}$_cH#Bv?*p?Iq!ILTi`jZU~qYTDul9 zGC*2Sn03den2QnN(CweIJgmCwb8-vf;m;i&v^0#m>vM7o;$g8J9#o93(LANypJOhF z$E~(s&$2M-j!!X!$l&+AS0fmDujk11oNPs_r>J3hr+3=hEUv>x$?W<)BBeQv)h^(=E?>%)!Pzh}iWcZqe@ z{c>~bbR0Y$x&14|AC_pc-?Q|>q!S$b^UxdnQ$I@BbKr*)5q`LnsZ*vxfrI{lgwlKZ zX)-G(R3C>AGUoU6_WUe@hv{W1d8aHN>6X{5q4ND|UTPaxbn?b=7qoCx$a~+xl1y78Ek_SP-)X=D~)7mOUB@bSJ2St(MDOxg; z2SLG8=fR)AgD1{|py289U>1=1{d>$ui%#%%}{1IuAAdM_ea(;9<|7%&I<6G#K-$ z$sl@BHLi4Gr$|wqnE_30p{X=qd6o<`wS}fSumhUfLQ@^;0Znb8sSf^trnb;jhl4;< zTWFd&r_MmTQK>gNx*Ise$1zJbY4z_oU%C5Abr5qeh{YI}%rD#Nf!SZ%*RE9dC?vm^ zkGrA&$+o)fLG|U|)7hJDDQM~5d6SSW{8;uwj;k62)8W7SW8O^Rn!eOsRIk%cl4tHi z)t@&+OY^E3So7q`S-yY=qMkfa&1;Du=gE^(+d@>9NSgR`NQj?0F%{cRk>#jZX9#2c$^?Q37k?G$TjYu#-$P09ZVYrPc2qri?r1{+l6PVUF z_yBycJ_d5;vRn3v-Q3=55AyW+pzOAQ8^8@+&v_B zo4Q>?{@~1f6mKd_muia1vmG5}dxtP?kGsRenJvfN=OGl*ad(&#HRO!5Afn63JG}& zkPf7uJkqytNr89Z{p9h!kxL4s1L-G^^bK56lrjS6r;PK>3U(P_4w#=j%r|mLfpj4K z+bpyd8jF>y`rQfVv$}*M4cu-D@vD(O@HL();=Pa&+h> zz3Sbh0cgCD^5?tZ&_@^oSd1<)c}zdX9`5tgUHpv7Qheii&iL9vNY;}-!g$%73>8l z0m{Zf37L3J46c2Q>&$?uG;^Smo0Ey_gW`~kkc^OwVt$n=yGGpWKlYUwNXF(QV^#71 zG7&NnG7&P7bAgq2HAuHD^PsaNOMl?7yC{f)B=ExEFMq35hqUUDwB%;L`>AveW)XXN z^Wq7bqgXmXqO6rbeX4-znoVMATmYbh04Q4%fI$agU|LE5KnDSkS%J=YHl4rGef6i= zTQu?Fz+bqx?j)IcESSzicjD76_OPn<=y5n0-Wh-0<5$J=eX|>Uhu%om2rX7-t?z!O zo9p(LY-(%W?tSLMNOo^E&4Z`)0mC8f*6t0HW5PFhc78zx#>O|fRw7_+Td!<@we3|; z1~->jd;Chhahx+}KY zv2SoyMa!#`+|+D_{+O&fTa!e{bK82mq?5Wk6np26x9^kSyGh6dO4!s1=P<*6Hq*xiD}y zxEtJkvfM3oH@G{t{Ekdc04?i1JDD|6l8Zg4la`((LW zC%XqdV&%Je;E(<9!9t8wC%V3k6P9G*gyd}=`eI_Q$}en7dXa;4`@9#7e3;|h)3=m# zW?y69XNf-h^4l^V&@-haT zu|MYHxpr!iUOMAGcklpK4XO=$%^L^V=kjHR9O}z!>zVMN-=wc)CC;vrNZgjqo|uXw zqobq)!DwTzRS3qos?Q8D#Qr_LjWdQ|+*`x6MKBs|?I0U1Ya(FiVQHxw|H5cY$4^2w zQiiz&V>k@3wna9UIzB=|LP8>R5zfY*aIz)KZXLRS^=OUtXf#8GY=mrtY=mso(ZVzL z&YOg6;m2~m&4EG`ZLuD8GKO8v=0Dh5G=BBR-~0(rm$3UM79@Tw6e$le{}Fq0n)^fe z$&dc|m?~Mrb-VA=&2#!s{)G1s-u;0+dQ#8r_42o=PGi0LfM5KC1rzdPRQULL7Ee8z zqZGd^^q_+D!|^Oi{67=--kZ<;XyV82`!DYEG;!(g)mPaUzg=GrKhW`-QEB!b_}}T5 zISI_r@=;fz4})FD9%cMqeNP}w^CL1D`Yg83WEc#X2~Jvv=PxTPXpUSwi*=qU5{d<2RI5-HqKAEq{>Q+Ey?M;F9EK-j{*u9ie(T zqXpV4=iXkGCOO`W)r0C?p}IEbo`W!Cl%v=$_{eV9tum4J4?MCPD*B`cnqjn-uT$QS z>+@EyEnlg;r+W%3m1in$6raSIp2A9vdz>e6rs7Uo%U7y}>GznjH}0sML-^qIhOQd@ zsL}}{N0X%+c>3m?{`rs-d$m1rgGFw(zRcN|#rQ_rgV*#c1)6467IS~hdzJ9b@gyik z!ejs0rHPjLB+1Hc9)3-dLwa12w`f&TYPW4whSqD{SqTl-qE&6cfZIrkCYY_+_v-_o zT&uixsI#y;-Rz;1&|~kyajq_Tj+c%6XYVbf{4URz^AtKu%W z3c}GHkw7FS$yTzmYm>|l^j%7I?feX0;-C-2G@fzbCIUoZb0Y`d5X650#A7ld$Yw|( zo*qbJ5XXVjZQ11q-Vnt94v6PZJUx)cAdUksKwKYqLlFO!E;hqbF{O$+k;Xu-UI61z zX-;(_bmR@e{Bj7K7eq^TB#i+*djpWJke(e$gHTu8gj3H>T^&htP*-ojp)WghE!EjI zRUUg|pFMfw|KHwsZn6v0GZG14_X^-&|3D{N&1M-`kz^=deLF}QGg$2xH>O99W{W;A-KFdC zJt#AVqt!dj9nl0)Otz?icv5=T{SIq-(hjnSy+ZV)CP)DG7?af_G#OY2bNfp z>FU==yLvU!v?EH}nYc)+r@u<8r?<@XW9lrlpJJhX&4s2OQ)i*06bl{YQTDQOUV%yy#@`T80yQ!P)~N#j;OK76k-$Zu4Q!QW-;gHXcgh->EWTBLLqkOV!JECD&EdTrD56kB zfB#yeU@_1#PQZ30{X-iDYG1x6*_Pr!R4^ii8vBYtB?eN#$Rsjj;r>Rt2e5Ebwjb7j zun_h-n+?=7u2xs_o1wX`R1Y;NAY=j2swDt!_G@V`+^KKMKHKl!ik^rvb3EIfi_=UX z8+yQ+F(V^h=a%QU68ELSUgkd29-um!s}E`4-4&-AX3ugGBr0%jG#8sNN<;_kLXq&E z(b*;N+)Y}pmP_ZG?YXck++BLRuF%(72V9)M-3ikn`w-D(z@a|uu%FM@uB4*Usd$R) z82gg}NSpNeq9&NY(Dbbw)&Ttd7)tvAlp-MXOT050*b5VE7`eCt<%So+vMDOm^c6;1JZRmcXEb&f6Gp8lWVYgn$8;I=cD8}xq234 zqRGo~{@qgv&#?;ie7tkaufc$6x~7aXV2+b(F<_4Kr(nPwSE0p#InJ-afN477j5A=4 zlWQ?xj`OErz#Lbh#eg}^ufc$N=AV|J&*yMvn_U3^$(_ZfcQy{&&Cy{H9ZU&>=(G?6vHz6)1L1=BEz&izBO|rvjM94zDUCu& zuQa})({W(05$vaZU%qdhnKiZ7_SE%$k^g;w3oqZ{8r&dLx9_+RamlIBP{liZ2|&BK zL#9Bn*WmvGQBzUGzNC@)j1cv^6;yu=uojpHj#2Q5m>y}vhU zQHp&d@1I~VsdK+qQbcF5uq-Gj^q|xD6AN$El%SxL)P@d}l^L9JdPlyHJ+TI zEu*sAe1sB%5;I@DE%^D!%8|D;ut)1sQXAz^R!~+@R$8^BWLQjaPp>J6&mOBu!%P=N z!m&%=ohjT1DT`jkOQzhaucmTG@u;domzMV{sq@aq%*Gu8l(aR!Blg+XI6H-Q{Yzo* zh&8f$R)6#?GkbS%!o+NDZJiCjx@2=8eDhb)3TX$;q`P|AEpSG`i#NycK9{r@qoyR{ zju{_iYqccL3%j_obsO>1F*1;3%}~Vr>&}U$S`V25_~pgkxtAn76TAZws5h zm^}&cfqyS6ZB#gvB|k=p(U74bgQA1bI%z|ibGyVr>iifP;D$^uzkbX-C~GKdC~MTB z9m>q3lzEu0zwvbaF*1;t{@9z-A7NU)zzGeNp9-0l58r7g3ckql)Vr4nYvJk_j|rj) zhTCBI*z^E$J#u{^lZYVGOwsQN*OB*;_Y2MYvEegvJ#u}ax&B}^ALCan$OqNaE3RWC z#IfPBI`TU5dQo^iHh@KT56D~mJk8BCf*gumk?E1?q3~CLR%N9xgE4(<$cpTa>|RWE zkBL?H=4Y%v)?Tsp>UaKLTkHxcdEj4Y>)Ac`1eqSJIaXf_cvO~P`q=0d`5yVcn435R z-)AkrqN`KreRIGc1@15s+#egyqSi;PUvRA-6WE5cIH=wWt=?}YRi6~mBDWXVyhj^| zZ;abxLs?{aWO%w8tyo1VuHN^=u*mkv_C;m;*x(fz9vQx<3?CD9LgfYBf}S!;rGO_$o9zgMP>Wg;1wAj8NR3t9}~6i z&(+{*H$@I&i(i>aIMNB39ut(sO;9qX&rps!TCNWu#Mz#(77qHb8|c8*o24{xgE2X1QuLdNt_PTx-fk zIjPuUdOkLIMLmytzNmUWCTdO2)s#wqq)pPYQjkS+QFX zRIX21kVVEv#-}Hkzt}W&e{JPhmGSpPv*_&rh4F^)?P^&pVOQBdHmXI&N5-EP@Nx!~ z@nfP}C7FZ%O|ewoZJyw&^84;3Jjm|8`-(Sdt~TWEdfoXTRj;ypY&?q`j~oxpcHf<; zS3Hj26UZXpBi|R6?_(oa>IFTkhh`qtlZs`vd_l!=bJNd;jSZ;@j_n}dt+uBWqb)5 zy-cW#OG7?gEum-Ted>|V)zaE_H>6Z*)P+Bjwx5QX4e@pXy&(o*tyTZLcAcs7!`(WT zK%wRF+J*PNo;zSXjzpt6SgG_3zd~QL)pTC%_qk_@u*>o`w(D)faW)Xs`g`Lz)^as- zkhIL1xg%c)8}G#F{Y`hQUsBmeoY+Lx#=fEX4WNLoI| z(qgzmKq;f%p`P|3)K#cHNl-c!(Al)|SS^{-Jkb%U`l&F>v7XtUU8+_~LhGS+(bq1? zG-O3@Q{+y$P~kO|D5p{(FoR(Xy=NHTMoDIw6(0btiZtOKL%!aG6UB5o2B!;2aNVHc~Y3U~8 zU}f@LDU)(J+_`hv>r@c>fwf5y$T=FyaM4ijJ*d;>v<1R~OT8z8gMRGh| z_#!zbE7yR@3tyxZ?I~52^!Sb+_GWg`+VbL8Dv@dpq0!oUUryhg>A%j5wp@4V|AF!g zevjINRIkbDAX0)*ff6s<=}OGrLF3HVa(%@5%9@i_y-8+{XS?%#71^&fW)n@#%Gx8? z)at2vg@i6rW-A`~VspX812dAaC?0@;mYG2zv{WY5a+Nm~6%A7I(5d}a^4-bX05%|P zwe-5$EMPzA%$d3idrq3&XM4SNmNTgMeg8mS7ak#{a*YHQA^41{e~72TZ(AE@3yrU2 zcL-93U`l=rzjQmHcqly3sh6R6m*-swXF}#do_8S}BX`u_KJP*}MlN6>Qe=K?Af-T> zlAQygh!Ya|6qSH``bXGTv%b5|57H#?4ecKZzVxxaT|3h)|28BqXIz64)Sht_O4NGB zRVa$%jH^(z#u--;5fIB=dT~P1)sqqs1O^Ko#*`RV257W)4L*b zDXUV000HMEpljE8zo_M@PWMGEOme>{UcxyWQDsk>z}KKOG@Bw=VE#b2d-=^1Y@=_) zfas4|rkgovGFlxs5^wXZW>>TH{Lua(C$#(H=85+Fm!2Qm|HujL{) z{wY~XLs}*nI8Vd}bFgHlNfj9k42#bX_4Qg_xECYmiF`4MaqNqc^F@C^Wb^9}M$Q%e z!6dmZUvhsm8({Tigd4=cxg?CN{{D>7sTU$q!u`;fU!JptTv_=75(CzG7ZXLza0Vs$u?vJG-fJWNg)jiP6N9KD0hW(+#76^v};7#SspI@(Fep-$`< zd5_>Kb+oKtM9H!CHgS0nIMvTz?|#m=`cOsQqbp(<`2;gcAi1c597Ce_{q+^fEIT3% zL3-^At%ZkM#!|njBqvk9tE3cDzsu)kDf`s#@_DnpE0O%ofr{3zrM;l{O+f~oJpXWK z-kZgnGB#085}}Uo+|YDm^fSonc+Stb+E!B(%EUo zNXEPi!9?PNfYv*L93_18cN(hJS;I{kRw2d+A<6RNNV6p4nxD0jBGImeXx!u?(Q?-Pc}N;-6hTS5E=fb8U6rKmiz?O|Xq(%* zaA0BJvqfT5aN&4|^o>Low}}wRBC)zyA|)=u5Z_*Vlpz4IP6MV{gUY=ii2IO)RG(cV z2@gddr)JQIEjU%Qe`+xEki+C?9wj; zr38RPyjCJg*K}{UtZsD;3Tt8<)|Cw}Qn}w>PR`zzefo82H)fxHX(?N?PrpFz=Iqli zP09g_)FEDn9&Fw%(u@?)A{KwQXk(4`vpd_%92t}wN3qM0Hi5(b@UtyLqJxVwMMqrK zeHVDx_05aA;1q!1vmH%PLrYn5&wV}#Ag|-`_8{-q+TjJ^2zeqj->KxW?T*nFqy128 zals`nPNFW{*jBlu#o!!(D$Wu)yL5%gS-C1k~X5*~q_S9K8uqW=-b>@Eif}dOtLNi_t`R;$} zt#&(%;0z|-a3ETcXd{70R{QAoH>RrJ$TT*)%_x-H*6ol{y+OVHg~RaCaV`$1gMAsd zMrEqPl>U&VUG;asN%p;3UZK}{D* zfO(QKIn#_HtTZR02(w1f!xn2t5k`&InLVvSiSVJ;H56eK;o=2Lg%V*I2*c6M{zb=d zNQ=b+UFqc)@19}^z(>J$`@lxnTiCEtP*BxP&`4^YIVmow)iN4VyXe&3txO`#i%xU3 z*o)LII<=*nCXP2NymJPZHZ+}A8&0(4H-^wlM1srgApI=w>k_%>;@NZVq4GatZptn) z4ZlUTY2;QUTMfccxKX(0w3tnAwJ)$$yBXo$jk!_8 zQN&TipT9d(s^fNAg!IqJz9ZJi>RJ7B-N_ty=4y%sg&Tz%g}Xq)Ei-Djmpz63KmKvW z#jkt6D^o%DMq4YHylIpM)AIl_Kq89a^T{<8-1gYqmZMJlOox0HQ9pV zjpB{sT`2LExwRY2r1oy87}~q_V(85g`^Jl*H%IT?a12#?q4VcVrK|oq(!2QdmJZv^ zL}NWHhAy!fTHviSw0|w^pQCJJrUf%CMai@<*;d0b6mJx76z@Wb_ipr!LXJX?LS85# zSCcI$-YDKE-h~oxnOnQTOzI7tiEE8+y%>6P#8#tk6z)QoNtkf&hGR(e;!|Dq&yn86 zr?+(2ZYCNVVKEeop|ye+L&N?#$~ICaY;f_uZ~s&NUy6RUTx->ZtZ%)IyZokq%Q?G&w^aJ4 zRCFfQ1CK^ITt2)YRH4Khq6bl^h-gzXTjE7l+oJ_I8g#o0#O1_=XR>$ zKFS`-9?IV7WKSkrczOMOIel}c|2i`$u-BXX|5`KHp9=*@_F0+!5GvDTdRv*iwOG&X zsbg&%zh>c(CKT)ZT1GSEZgK1GwEEwV1d15e*mkzg6clG+*^Yeyh%9Xoaa+!^(?2{r88xnORb_fSax77t8gWjqR;AG_`5{ z@5WwRjQ6SflZCskU$|pMZ2t3eMW))SG&7WOurhgu)KhGu#dRz?ifW}ds0%v5M;+^% zVZXx_5A8d*K7KYEtJ zeEKrE!lb-uO>q($t0lB4zE3@CNsD{Df>+d(t`8tH68#1T`hEw&)Xq^4U z>KC4uE77zD$}!3@4boZBoolqT4d|C)uDCSclpL#db>%oFG|A9FPM#O`+D|B5|CTW{ z$;EZIm`UC()1yEaxlo1zU2uU`tNtj;D9YFGgWPPmEc0H~a!7Auu|ei1vlbgd`ERNw ztiQo=x4cbo146c#lno1`6*Wf(tT%VITiEW(0(VIVtjlWGWdU`ia?Rh?!?hbEvTJP5 zH!uDvO+~xdEeRpjv7_e6pq-_t`uufqh`V*YSiOTRzQt|>IN*&4L*;zp{Dpgdf%>}+!hOHgrhj! z<=kDuX~IwoZa&-VwX>YT6^h?Kkk^F=SM>PA34Z@tgA-N7Q*h8KeXaa_Pmf&v=eH6s zl)~Y^Q+gM14ig9vKK;+!UcAg~tMY$IwNiyCe{A5uSdtnBsAN1p&_9BL73VJNyX*X* zJtg<-@}c0%*VSeLvanq{(=Gp&`~&wj)N62Ug986$u1+A2Cq?$si(z%03HHB2psjOiMk!lL5 zQPU63yfufN*!05e8QE3ZR=>GxfvpkkTv5G0tKZ#kf}hzW^xleBW(QO!$@fCexfC_Q z!I|xxtJ&QxbpAD|Nr3aOMzC?n!F~|#KMhjjLV)frGplh7byaB$0KTMz(cXN6raJ1z z?qPBIro!Uvh~I+&!3D2ZAXp+IMmvOqgB0KZy224c48|W*VVpiqUGYP4Dhn4nhqRR% zDCmF{_QGO-p$}A44xt~!hYpl=rE-mr!*tfMG^D?Q=s z!Z39+uVuxuU;SEE%w2if1Ai?m<~XJoUtP_vSBK+kTCp&AB|k0tPTh-A z`93B;e!w{fhlM#$-HsLR2QWUeG$MJenq?JoS~uJ3V|;9>Le1kuDm(LIOSNQvY^gxZ zkImOjMcw?^QYb}~x!2=Q>GNHS$FB?4DT6EBHC1_qN__^ zu(XUHotdjyvhS`wfy<*_aC(lb5i;7Y=elVfNsn%jW_d8ZXTk3iH;TTE(+Ws=fwc7N%JQui--g zte0P&v!(mmV`9T#tYCvh_(TJ+2q!xY;8K<;(0RnM09vr@c=N*IrayCGKN*9b)jd16 z;1R38?|6XyAccL)1VCU8gXaY7Uy#&-;T={9O9NW$K@N3{bT?J)8Ro<|7L1&v7nZB# ztGi6vQ|n`JzhbaPNe52&7=4|u!~r3C+X3b2C2$$a!X^nocmVxN=TlV@eJFnaX_nJ~^c2=@ zqF1o5&;hg?TiLRJLk59 z(GG8I4{;8C9L`JIciL6a02CzjHPF`mwsc?JslALlGo#y7kF$$+BS8B6%~YN6*>gO9 zZhis@!mB%$40GKclDYrl++%kgV|T#jE>EzM!Q=EvphrCWyc;0N>L z^7XPkc{$+M{J4C*zvqNs^W*aM{*lvq&5s*37Q%C_#B`q0BddaAUGnfxcAVS2KG)&H zZ9+a5eVqDS2TdNcczovM(=c;GML6={e%@FD}o`~ zFb(dc+$37OaHx173Npq7L@~7%?UN;9e04PxI(F#jviIs0VJ-3@-xb-5aCO8mI?iG< zkhWlI!QMtIUzbW-A-KY9(B`lDxX@;!cpwTg`es8<|K@{-tJS}T(Q#h=YZ#cM;`iQA z-V5%jN8ur8j{UNis&2~+9bJg{)Jn%5{YjLBwXH-Mf^H44hL zYh9zrFh*A)utMi%N?VSM){WKCE~IX(E=h9Yfm$Z$AlBcx;~1!;9Sxu$VN9B2H$@G1 zE$A1Ht$rs%!7U=T%lJpW~B}Y?&Y=T^So4ET#55>emBE;%Xl5ePohxTu$I^$XdVj^dT z#oZru2pN!xWbMh2eMo(SRO+#LFMG_Xcm`LV*XVrhF{kbsTzg)l^R=_RABXS2N=;R+ zfAbohuU+%br;KaQYji27DO={#DwiFPLPNLdWhK*ew`;FDY$EQc8m8N!4{Uutw1Gr> z`XqCG%}A51_P(U2Xt@0Lcx$>^|ALLBfZ`?vuhvwKVQT&&jlAR={t~YRGz}AJc8}pC@gQLsE#}WD1iJ~02kNcA3A?q5>AQM@a z8VFwT&?VR_6wxWCZqR#hGn7z+hz<_t;EooIV^Mtv{@~$$q38K(YR?^Zt}1={aNKv% zD;7wWxQIDdqA9Ao)NM)w(2lPehxNlHJr(QpY3+@)o$h|0G(BKpcQg(h`b0%tG5sLk zU8O9%+eU`y{y<(A9-$I>9J&R23mrl`Fh9txs#l;xE`G%V$(lMOEkIYJL$m=qj;SLl z>_a+4dsRu1Zk&$01eL7~*m39<>@9Q%ZG+Lc6!}no3HX|IFvsE7v?Fr)OP1;0tHX2X z?8R%rG)*609j32r(K3~Ob(p3Z`YT$rO#ENbqPZcb^@J;0v@nN}dScuO?T0L&ZavY+ z*wVn{xAK^JqQSMtRQ!yL&iOE}(WMg15AQMcL?f7yY9+t5$J7&ztX&GKNOSGYHKcZ2 zt|l(ihwQjWA!T5uzpQJE%=95U4&j2uh5e*0p&FMcA2Lj*49zZo$*|lIg z6y;q0qNV$AMeHHHk}Fy?$8;z(yL|SLKGfA=Iux2+KBk2^j5w=tSN$HcfV!cXk+G$L z$#3N`p_#$8#{^GCMwhxZ56nmiASJr1tbC{mB*k)fWdAU(_TxNo1@@pE9tpZogA@97$sK01rpa3t4-vK)m=a8t zBx%7Ns+E{#x&4#}1fBj4)iWY#jw`$P-pMc<(sOP;V0CjbIU z;*fMBj@fO;MsO?`S?C4YFrzeYCZ72E;(oJ~o93j8lj2Ce$QXzFSwc67(8uXbBCzMA zM#}1jfruB#Utq%q#Ni21k%5 zRkUvs<}1^KMnFGOrXtCFJ=HT}D7Zl4e5CgdWsAN9roH;57roE2;Fd z@&eJOFyL_Ng!mlQBK z00s(U?^8Ie0}f57miXC3|JkmV&*y#%%0OTJ?L9acn|)wMpn=2kDlchcjU7@n_F9F!;i|^5IV1Azqr=-d#h5h z?#Xh#dRy4bB^%OTMJqIVi_ZuXeA)N<|2}-T=kJc?1z8=CapfE?0ax)L|FczlrU5GR zUSrXq9z2Hp@U;eKwB0&C+@6Af9Pa406as_z7G?i-Nj+V!f6i>rhN!f3E1LdxslD}V z&-uLk;Vx%GdyO=oTE+G50%h*5?-<#U+P6UMn{?A)lNAdxZ^cmu(FTxj)KR-xV&AB% zcC+-pX=m+bseYsG+Rf7YHXXL!?Ky0{n|0W3mDsoHu-z)XZ`)zJRjS{r!*;9mzDTN$I0lg4Tsn0`z4Kdj*lv~Hx9zaqD%Ee*VY^j&-=4!(D*b(17MyjmQmAjS zCVJDFcAv6B zkuKaGcob=R96|9#TFsJ0To9CMlK@Wt*KZQ)GqCI&;toFYK{Iz7wwI zyHTo9s*7{()-79XkuED&OV-~T$FbfVduDCH33q1J+GDYZJPr+xQsYl8S2KseZ)@A# zz_DG8y0CC*PhATRV=L;ZZrm~gk9|>NTR;~_Bpmrh@yLJKx{LK3DoVfBa2pU}7f$Ir zbY`B4Q+kFU<0i;{*GM!?CXkG*OEeE8++p2{k5yz{1IImvSho^NbfPlO>4?o8jt;C3 za%1bRa*YsQi__w&^*5XwADjn|nTv$u>>*;FJKHV!0)aIkDU=1m zypLvP;*K*PvuvDcyO5pu0ynfhm%~9H@+!ZM^GtrRH{8=HbNajsKvDCkXPIYW`_6q233IdF5* z=9}y)d|ho8wr9ZsGM@7ju2izuYiBugHYB)Jwkdv!ILFp^*ZDzjOM;t;;%=f1u3qwI z$T};5o3S|)^Qxf6g6Un_!R$Pk3DyeVgfujwgQ7#SN3{%y^WLHG2sl5oj>~PM7_U@% zCKcuYmrDPX{sO~_af4pmK-~*p1Wb`8$QSeRIBCFbc0mbzb2f0r+5dZYmQx3Iys>b( zLJQDwU;YIo4G9!7&_!J%C;ih4XCSo)9C-+ND2o!>?KnnGLQcxUNos#9@(}V+79NsL zHQmHSiz@Yath!JvJl>b;E!JH z8*%`18efUSbDDuC6Id9Y(+nJjJDN+#X$B5Mo-;^B^4?bOTYEX%LbR|3PKe`4z&Apa16vPPaC*e~+fjEi5WK&g+xwLO~w>PqE` z#E8iDJs*#Dz|Yqj$2dPVCk3V-Ii};ZiCiq$9A=I75D*@L^F!Fli^o93@2%&sP>X!m zt*Cs#tzXyxaxO(2YYVGBj+K%EVmYNs)W@ zg!>gj_t*l;%G0O}c?sz#NRKf4&uUF~E)E5s<2y|tL z03%@8*kA-mE*=bAS(aF7ssuGUs9frCYA^=G%a!6lzNpx+v+xcI?t_-#Qf0vemkt~! zxb%UL;0EdiWH%;Fvday76c-C@4#hRsK_>2!f;7;`s@#Fl>QM{-;rC(`Cw(A(o!NkLX6DQ z2hQv_T@1RDR3*yC!XuEKNy~gm_>5u0Y^Ep7-PD6hyTtGaF$+5&AHslS^`-8?ml~4d zIaAtjU4}QMz1-Y++MgiECNW1-q>iWyrj?EiL6C8_inQ2S=2b%H^1zt)SmwCoE1lpaGuSUv;8oe4pKewT06n zpcnL-!?QvZMtcGrR6DVb1G!HiYOWE>`}ig;mXmwK5zi*^oZKCbcs7aWvc_rWVW%tt(GsVpNgj=jyu@#dUz%!VSvNg_z>>t}Mi?X}Z3*>gqOUOR1*U1p^1wbM4UlT5q)>P@9_>!#gg!`Lw9PI1xIYhhKLL&NYS zWhVEA0GAU48ODY&>SlMA4MT+Vl^EdXuCl%dc6P#E9;d8uD9nw^xE?aRNZ%Z_nPK^5 z$J$0R>PX+@^FMdPUBldNjK0|&XTuOl?ZotwI9p(^ZbJL}lbwB>te-PG&$NxOK1S!6 zA0liR8-~RAbU1To@MJ^p3MpXe85KrCK(M3uBbc z?lc>P2Wjis?wlT~ZBQX|gPSGWjI@>eFOA~Du-s;GmW{%La+{mnB5lRtYfvCazsuMt zpBt0gsFNJ(gZ3`~_k~LCxDI-$t-eMxwe}#kWDjAvDsZ~&<20du` z)z>IPCf6~tc8M5;MnZPLUsvHm%I>FZc7GjdD}6enxHw=NRPNqS+wA_jQFu^pwS78$ z+H$$g;?p5*uS0H;w#WJFM)};BPR{HkXKeUUHHuWkDRv#I16+NsipAwe~h~S6o=>dcEajUl25cb)twf}%MN4sj;@v7XmQ~7ibJOq-8R;; zJ9oE@x9pD7ZR3seTNcB0+j!&rhIm^$%bBww!9F4|X8WyzG^SQ#wfA#VCUq9$8)V z*chhA5lkB%SzR>M(8ktH2a7B{m+@5q60Y_&uG13c*;T9w51x2IDvE#xUrf^Y%Px)0 zkFNso%ndk++zx4Pz7c`#*VSeLmqSihOV9b~#oW@=6b4rOU<@gy7Z}4;H;Mw44TO`o z-oSNRTX(h0$-D;GVOFxRd^PI&MPi&9agIE%*UvBzOFJBJF0X`d_~x)^rr zVz|uk4A+DP!49APXU081ZlK8t#2fQmiUKDZT(U+4j^S~OmP zXAkeLex9$U_S~^H&MSNR;Ek?8_U8xqqto59|A#(QR`0V-28Z4Y!OE6&&~h9Q^ofeP zPWl0>5|Te#^%^OwF(RTLj1A!D#ON37uX8(Yi0744b+1oE0MX%+`$4IA(31)(xMJj3 zsi04Uq=J6Hr6O8vU;_zNqI*(ZsRTue0+1?PQ0jCm&yRXE2)`JondlQC8qg1X8mNUG zjf<8Ffas*oFq8@D5L}3b53}|uWkMK=tcIGN!SkUi&iPJuERxtUPLR*(Cj}0mHeeUx zF=?+C2_aqVIM-E(M4rCW%oWK4gZBe4w|G6kER#82DQ!CxsA;JpCM#5E&Wx7$B0`Sed5fyEq!qEM|#o>C@UYL*{w?=TbR$!BrA!ArM%lP z)l|>Pi^M0ec{%n-g`j_8Cvb+r>LA;(M;^n&2YaVL1*E?uP0qNiAFJDZvoiD3$T`ZAqrc}1URVMe!!F>miO^ZS}Z3UVZ^gZJSUrP#Is2} zCmVjmvq?NBy9|hDlX%YTY|z#!rT_VLzOv)CM16j7zgaWbb-%FZ*6UjFJN92O8F}q+ zJ?S%Bfwf&b(=FTk1UsckFkO6;L#6=U0Ni04O8u$`wDf`V-L)QBjLhvJ#dwAxHN~XD0@UKgNRXfv{Qq}s`yN2HtJ^(=bEh_q#K zAdzn8q+50;66tnMx@C7Hk#6UtTV`jHc2d>Hx9Ch7f!v6B6O6NWONr`C8d>{QI+I2q zKay(MGm%DCk95lz1aRY)#hFC92_1EYARxOliF7+B-LgBANVjv+EweMJd)r{qilYYL zKGG%0nw2!L@~d=548VOP#j-n*2G))=gXWNOO!1x)^-$AD76%e(cCIp8cIOdkb}pJ_ zcN~#s=c1W(8m-o1J-4Th^a%iGwlN4M>>D=gtLdrnVhr*FZT-UR-$Mpn=2kDlchcjU7@n_F9F3^Ymwm6prC8SIrMq-JKG%!^ zy?Te^=I3;5xhnXDZ;~t^5*Tqf!v2I?Jiip2=Ay9;f;41yWcETUIAC@~wX++Bm#Z1u z6IUZt{r$ah9IEQ9zd^AF3R`Hqv~z8Gz@^rJM8=O6Wl@4Cg=@bLdN2%&fV(fSsgt7ct`fdJro`_CN13aQhW_xyty0&QS!4MzAxhVI?U=NMG`E*5+ z+;2VGb3QMBxXanlUZeDz$PJ8D9Y)T<{4n){U%<^D+CAFCR)H-7=su7LG6o zdCiar#B{a(WxX$_Z_e~zX9f&VZ^BCbvKw1I{9bRu<-+{)5W>T&%`lW)R^&v^L#G5p z4gxiETW&Wv@MPz(Q}F1*_epn;yH0v%f`do>>fDvf7bVWA*u5&3KM*>3nI2lf&TPoz zw3ln8QnUQj--}@y)@7t#-%UU8(XUDtO2gj6g`ZIxf-{*;ptHhUeL88# z-Y9vkdMBwn6RpF{wkT1RBhwP@;VZB_@aDKIO{gdjF^Bk~w`9ntJ+FO;I~N@zWll5A$#*Q+6S}`J1L2n@b&Ns zmuhSqq!!L452s2l(UbH($V1uA=a^;=AA)P~bRoHJL!k?05;}7fjI@LZi&o6S=mVjA zAN}Cu38#y}coInu2H0r{gA&5FBY`fo?9DgAT}Qg@GT020)s;$1h+`$>WJxHLk=SrF zq`U%;BA27-Q#!#HL$5H0tJe_fE-^epRx5IX#FQ>TNoqa@G|E!x^-|IVXh%Fkn$KyK zbP_s^(JRd1=a7-?yV0*zFC`HbWdvm;NSRT&j7B3TNa&&+L0>DA-9Nt_IaN}Np6WYP zPKUkXtd=$?*B!KLgPCNQPvC87uQ4oWF)O1Fgkr-uQzFjN(>`A}rL(0CPwqHRnn2sz z(gp>k#7rw_n8nqYM4J@hA<|39$&y>z5GAp33~XnL+_gbLIVp^soUHRoo4HU<=sklM z(6fFy6bl=JGuo3A1n`%G^&~+=ziSanb6pO_E)ezBe?*<;TLz@JpYLh3Fs@)uH@WX$u0=jNpg2Ey@paDOFF<+rWZ5y43zUm1 zl8aL%qx7}{pCp(|3KtKC-9dIo8_DBz2Rm893uOgm<;rE{R7o(+O{dq91=9!S z%F|%_fF{L&=Az7G%c8%^@ECDxqfeYa5vC7O{&-KCK|8wF2L`1jdI@X}ewaQvj+T~_ zCByV#O5)}?U2vvsm_9HlFU67<9=Mz!A*Rn_C@+`OD}PB;3)==Y&evaMc#Jp=e83w! zSyD_NCX^SH7rh(mf*i6wZyhZ!Crga!!-VpJ@^Z2Aa;oH*=Ci1NpK(hSyzVXX*pSPOdqBsZjRFh zXG)Ig1B3EXEO|Lua!jAaP+l%4c)291g>A!`ys?ud$1Vx;NfL?v7>V>EUlP?WLS9am z9J?gUqr50i(%w_^FNtawAulpHW;IspU)E}4Emq$hQYzO71Pp82-H=kLQGc$MUhFM2 zTW`IMyZlC)@Fm!$jpc1@*V~dN*?KcV;4ynXUrlXqwSmvzc%8=wq$=5t^D9BVb>7f*G_k~mloP~#csDrc$9Dw&* zN#u;th@cTUq47l{V!(AlBVyVcL?glj09_ZF8 ztxPfHl{Bx)X}>uhROEv)yMH}~z4^A4wRiu+>1ydYKfSm{3KHBgC4PXV)~Yp8=9c4T z8x{`k5M%LH1M9o%{D76SyOxwvQ$gU71hQ(pbHcG~&zd{-*0bK6`5L+x03)(K9wb#+ zxtFsGy}2v=NSRhJVW&~3HkZ%%3IO%@U##AY)l=*p$+PDM9V2v%&@sCD&bess2$~PS zaWXLR*m{^t%O;u+G#_X_3SvG&T_b2g(1M(z=^rf!S`f4#1+gG8{UT^b(2k%TIkdI! zGRje~uZM0{#7$7n_%FAi=M-v&9|s z`a9@VM;v;XYG0z=DFVZIHUUXh=~MW&LR-cVk-J?{S|wB8I)%HVP~+xzJdVP-T<-=- z7Bz0kKqg(WWvFpY9_ys=Eo$6jHW4ZsH&n1irHe{8?TK<1l6FR=o6}i(sB{e-N~kE^ zm>MUlUR1rPdLf3!V@%-`RGzg#)oWh$hRTAdbW!P|(nY1qkDf-QYxEFq#otvbX+b9j z*3PO1a*c|Izye_0>g(6L4iz5YDEuJljdicAb+5nJ+2&<-J~zs=#?lR3bflRh=hjBH3BZ}>(3kT*^>C}F z{#H*~{HMpVLt(q=yxQ+`&k{TGlnc26M7D;lMfFEoP!tMXicjH5LObAOUm3Q_r;N zk~}Z$HCOM?ez3iBQy*#SZtS`^yHz3RrDpL`)p8x`Q`D!i+T`M-ovAm@?wCR~d~7(! zE$UP4{C>zwjVVaMZLnCAN?(&=e8{fH#Y{eE<%4_K%FF|*u#1B~!(XApF@*P21xIwIPy+K;zakDmP4an!^zsuE+W%W@$P9OW@#h&q|ve4W7U%HeGG)z#{=P$)kj!-uE0JAo=S! zTrecFSLOgOr&Y{!>X*SB^0T;s8KrBa_cZE`2em$o3@H3oee_l<@jq%$boA;&X zE*#6*Y@kA=vLahq%-7-7#XbNljQKoim3M>Tu-$IddZc<^eH3EwIH*m=qd}Xz+Via= zK7JUCYrT52-z3nODnBkaMw3y!)@cy&WW7#c)Mmfk8xu&=S1Vh`+ks!Q>&)?NcTV=4 zrJ%^@-K73B9!&Z}=<<9TDXWG_o1I#B+;27MR|7g+^+C*1ec)(c+Z(vZh9f=I#2*LU zNxxAWcS*HeeVnf5?+efl0_KnP*0?dM)nHwZHb6UfmyZASAMO(F6>w*k>p2^n)+4ni z{(}i@%GLg{diSi=tF^J0AkzACt-Lp9lL|Gy7D$Ivp&3%X7HErfuZ4vs?YkgP>0VJp z?d~4*?(aC`~N=U~L#CCI|R4SV|L%qFWJ&SuN3$v4NdrtCv&O+U3>R~zfaUD}&pmh*GH zS~^RQ%)FIt(ff@w0Q_33);_BvlDqqdN75nxkO$h4Lah-AKaghlQn@wpPoJ$blL=MF z_t#g4HWB!A`~HEvEZB|6OApS7>$N~zSS zH*3FD-<+S8=4RlLk?!0=|+MdmT=GOMjeboSj zO|x;oy=8mTvtQ=i2br$GI{J73e`OlQ+1HxYXB7XlZuJG7?5#Vs7S3V?ycH0wRIX22 z(N-nyQH4kabPUk4Gs2{=H2^jIA6v~)eblRu$(QQK+N4|k*l&FmMgnZqu-R+3x|1fc z*Xy|pX((_+s})w#4&-h`2DPWBVZUD^jn&cv0jYlc8yq(=%z!joz22|}>#9~ZkPNL> z?04`tg8_aYw1+LAMT7k1Y`z2Q246G=q|@lbzr8Mb0-NiA59)zeLf?jI=yJel{cydv z>f^%R%J;^k`7|Dn`u%#U_kQp9o@&iOdqg(Q7Pe!^0Xt;e>kfylW{q^YbquY7BIOa@ z0sWwOAYj?MqrsrwgdhHTpH7|a_Vs-}2j!yz05DMq^QQqQJos(70#gs(jeMz3diDC~snu_hp}hrzKXm(M>pIYPQg1gJ!#0_|Z#KYXJI_1}Tf4HvMDlp=`R)YXW+O?+!`Q%I;_d6AshcY{5d*ZzYya$ow;Hf!+ z7por?_GB{(31joh*Fek$7tLhNRiA143&2Yu~~Kv1hE=70zY+w}B5C`)%0iN_Ygk ztJrT;H%i9auoLZ*^J;N(wtD#w^e8pvE_Hd{JP-8$OK{RXjc|N#I+e>W;7#{dfQM9X zh4GW}Rlr-SH&lF5M_Rh2V8kZFr(vfy>X0dP3s4n2-8js20g9a|{LaObsZha#1JdYq zp2nT0AyHNm@Y>_>snu)tCImt?8r}NDNEZ_cYNUKEAV<2_!t_Y{E)XQ$E6EfABR=l7 zhrLFpM?U^unN}VvvpeU*AFp@6fB4=0`1ojld~xm`X7`of88yJuf)I5LQK~(&*PsI- z%e3-V5K~JhTQeIlY;*^p!8)M8Is^EBB*=Z&Z%lxsqc;DF&rDsk`*wHI1+Sz5Uo;w_ z%*WkuP-}PUV=y4)s(jcT-A?Vz3~XDeIcD!mKH)jEfL%ya z^n#|nynuWDhXe56K_7!u`nkNPakt+Z0bB4^(`YV>KGkdjG~@ah%$(3l?_2PuS8Ja1 zVQj!sR^0mA;5bU(tJxxhNwe7=01E|5?a=GXcd^C+X}8AxQ4Re1Kn4Em{1RV7+%c-P zhU0dlCBEM}U~^eEN&wm??Rux(@3xyjti=m;Dp%m|z0OyVpQaX?ITY0oV%*10_o>&U z4i^u*gOPskw!j%_cKiNp;svnigMMq!?hJ{le15C)kk|57*2j-5Z%{4G-WO|#{lMLW z2&Ppk*9fo)crZcbK=1$yo{H5Ee3(I@m815h6-s)D>_@W%Ie*6KrE>TAbWuglag{Bz)+!z!bN^JEG-5@W`)ldhKOv_|i$Y3BKOwDAr#`HM)AHjD@-~V(7P|GW|J0w1 zIuocsd^w2zP061qzT5$ST?#LitXw|MWC@BJWGc&4MRQ15Ggj z4aX+!T603JJ{>9Mncv5?ZfDec0*CDGokClF_$dY$k>R-B?lyX`6!ES6Njs85>p zdJo(xSYcTXP#=+}c7NEUakXDmfz-<1Pt}hfs*luJflLs<<}POrAW@9hfNWE}-Fm8z zYVg{01&L;dJ{!F0SLhV%yoh&y?{z1m+7Qe;EcEsDbtb;KA40aF-hF~quBxR0#Kn*( zk`}Ph?hT&0L%;kdzWAdJPC{o0G40E0HFuO~`1hyLQyr2WEyB~|;+2o}4wy_JJ`paG z`0n>sy*;Wwb!)!G7GFTp3ruaV*`ZD=ca4GA%uDruD>b^}n^L1ky-D#lU<{TB(AB$; z!0_HSs~^nvzwcDV{lq_al}4mB0e`Lm{zj+7sQ|aD|1XO8XrV&-T zcalS@dIyqU_2CF4lF(|-b_>ZT;BMY9u!VC8LV*jAsW)g*UwWuM9{7Sg&o@S-3nktT zP)iC@eGF+ID%Xp5sv%xrzVgr36aBMZSHuZ&dZS^#GwMDy<;!zc+?3G-Jk)z?*6QsE zjm?_F_oYl|N)Ml^zY%zyz0vpya?7-^OiQN_654X8F=zN$kY3R!DF-UpzxG8|;h2mLN6oevQE z$$S#{arX(NH~^HU zH|ft5GWs($P7uIEF*GLKX0KOo^m<@H{Qenl^{=yp!QZ{t4>RW4&zvdEEu%9(53U<) zfS<|#?S@@?2z%;aD!6OG>RgnDccVtP-<&{!0*p^!ae!LAc6;0gH9*Q0S`+>Kj}ISf zb!azI9%_mby8mUjbHpW)rGy3aHKsQe7?C98di&+F~p1PUq*5_F4HA7?9C zd18sqR~P8z7gDN^-zD{-R$m*}>XYtRc@fMJmvG(+B3PwIMzoiu)0u>m4WM=*Wx*T+ za0vWDpqQi4BMtB=x~)-P>U}>^5b+0Dq^Xz;`f7bLZ1%f~$)ehi0V= z3O+W|P>N~<9v*Z@V^HsdLnG|0yG=%;CS=u`9r-FakW6m4tqi1NI$wd92xNiRKdH4r z(~cAi8+wy_&w*rBs9cG+8*MTiwEIsJ@CJPb3nY!&eIb&3Qd#JNbmIUD$Bn^2S+DQj zGH0K9+c1%|@X!hvutjS~M)i8P-G{ZuOuB{g-Rc`lv$I&H`JpUdZINCJs&&Jm!Wwek zomU(3RmgljK~vdaqEbh`3To!Xoy{E3IP_v` zLZ6J!9vO~$?cNY-x~brU_nDXHlDz3izDc)Njcr1-h&pPR_bL!I=%zLK8@{2}z!`@Ii8?*%=R0iUVlD;ix}?7MyhRL9f9W%y<{P%#?J1c%}o+ zP0IOtkaX&d`s37GJ?M;vwbmph8M>s^YCx+HwE3n2uS-VlA;8y3DMek-N>EtpL#K3_ z`M@SLp-kBuLeL!Zo(q+>kJLe@`8$^766O!Wgm%3Sv2?92d_U;X1YeTZz5SwB6MAlj zP=IVe{wSzN(Zm_F8iD&y<8$a^2B(yUk26;`dekS78-P;q7@UdsCA3A-cF;qiLr`dg zDpj}Lfi@i>tFmP}FyGK6G#GXv!3d?UU}0ORs7;||jaU7l*=7Y3yHi@G6L7!upgT5hRs$N>S-;J zP@o-SY!|?bD_ypF8xG6v^=Y&vNf`~U0t^jFw*@wA1f^)<143Kp)TKRH;2}cJ)_rxA zj=y>j;yB!VQ(k~TXJ(VX%Bdv~EL4<>@HQ`sg3AhgDyhPsd% z@hhZ|@uB%mntF(WmvL_TQUX*{(k0Vn(U3qnJci8}-m9+O5#H9DMab~*lj-0Idk6X38egkFK# zxF7Us(gZr>sNWxa3Q=|oN-x794Yz|f)ELHRuuNr3Ddf4ITA;LBij|-$K@2=0;Dm!9S`6E zX$Kd#)`!+Zl`u>)qR)Sldt-Qd$!~f1bT4-gup06QI{K%(*iS2v@PxuV_>Qq(KO}F- z60;>g;!k|&0l9{hPs(jve5QN$e)QA3*iSiR^4S0!x^qvdNrJ*~ICde~MA3L3`=t-* zp6?`(dmeg-+4~hN>^|l@f7--vE zz#&@dy)RLf$d`Hp0Xh|j_|Og;>Z5T1*L+E$OY;SRo>b4P=t%V$P)k< Q{XOzn@OAX>-~P}42XTleR{#J2 literal 0 HcmV?d00001 diff --git a/code/framework/src/world/client.h b/code/framework/src/world/client.h index cdf73e38a..0f41658da 100644 --- a/code/framework/src/world/client.h +++ b/code/framework/src/world/client.h @@ -10,11 +10,6 @@ #include "engine.h" -// A client sends RPCs to the server with FW_BROADCAST_RPC (the client's only connection is the -// server). Entity identity, if any, travels as a NetworkID field inside the payload. To observe -// entity destruction, override Replication::NetworkEntity::DeallocReplica in your entity subclass — -// ReplicaManager3 calls it when the server removes the replica or the connection drops. - namespace Framework::World { class ClientEngine final : public Engine { public: diff --git a/code/framework/src/world/engine.cpp b/code/framework/src/world/engine.cpp index 543b92e8d..be12d8c1a 100644 --- a/code/framework/src/world/engine.cpp +++ b/code/framework/src/world/engine.cpp @@ -11,8 +11,7 @@ namespace Framework::World { WorldError Engine::Init(Networking::NetworkPeer *networkPeer) { _networkPeer = networkPeer; - // The flecs world is retained solely for the scripting resource tree; networked entities - // live in the native ReplicationManager. + // flecs world backing the scripting resource tree. _world = std::make_unique(); _initialized = true; @@ -24,8 +23,7 @@ namespace Framework::World { } void Engine::Update() { - // Resource-tree bookkeeping only; entity replication is driven by ReplicaManager3 from the - // network peer's update loop. + // Advance the scripting resource tree; entity replication is driven by the network peer. if (_world) { _world->progress(); } diff --git a/code/framework/src/world/engine.h b/code/framework/src/world/engine.h index d66266c28..e877e7179 100644 --- a/code/framework/src/world/engine.h +++ b/code/framework/src/world/engine.h @@ -15,36 +15,12 @@ #include "networking/network_peer.h" #include "networking/replication/network_entity.h" #include "networking/replication/replication_manager.h" -#include "networking/rpc/rpc.h" #include #include #include "core_modules.h" -// Construct an RPC payload from parameters and broadcast it to every connected system. An entity is -// targeted simply by serializing its NetworkID into the payload; there is no separate game-RPC path. -#define FW_BROADCAST_RPC(rpc, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - auto __net = Framework::CoreModules::GetNetworkPeer(); \ - if (__net) { \ - Framework::Networking::RPC::Broadcast(__net->GetRPC(), s); \ - } \ - } while (0) - -// Construct an RPC payload from parameters and send it to a single system. -#define FW_SEND_RPC_TO(rpc, guid, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - auto __net = Framework::CoreModules::GetNetworkPeer(); \ - if (__net) { \ - Framework::Networking::RPC::SendTo(__net->GetRPC(), s, guid); \ - } \ - } while (0) - namespace Framework::Scripting { class ResourceManager; } @@ -52,11 +28,8 @@ namespace Framework::Scripting { namespace Framework::World { namespace Replication = Framework::Networking::Replication; - // The world engine is now a thin native facade over MafiaNet's ReplicaManager3 - // (Replication::ReplicationManager), which owns all networked entities (Replication::NetworkEntity). - // The flecs world it keeps is used ONLY by the scripting resource layer for its resource tree, - // not for any networked/entity-streaming purpose (that machinery was removed in the native - // migration). + // Facade over the ReplicationManager, which owns the networked entities. The flecs world here + // backs the scripting resource tree only. class Engine : public Lifecycle { private: friend class Framework::Scripting::ResourceManager; @@ -72,7 +45,6 @@ namespace Framework::World { void Update() override; - // Native world access. Replication::ReplicationManager *GetReplication() const { return _networkPeer ? _networkPeer->GetReplicationManager() : nullptr; } @@ -82,7 +54,7 @@ namespace Framework::World { return entity && entity->ownerGUID == guid; } - // Resource-layer flecs world (scripting only). + // flecs world backing the scripting resource tree. flecs::world *GetWorld() const { return _world.get(); } diff --git a/code/framework/src/world/modules/base.hpp b/code/framework/src/world/modules/base.hpp index 117889fcc..e87f618ac 100644 --- a/code/framework/src/world/modules/base.hpp +++ b/code/framework/src/world/modules/base.hpp @@ -10,12 +10,8 @@ #include -// NOTE: The flecs-based streaming model (Transform/Frame/Streamable/Streamer components, the -// per-tick StreamEntities/AssignEntityOwnership/TickRateRegulator systems and the GameSync* -// messages) has been removed in favour of native MafiaNet replication. Networked entities are now -// Replication::NetworkEntity objects owned by Replication::ReplicationManager; see -// networking/replication/. This Base module is retained only so the scripting resource world has a -// module to import, and currently registers no networked components. +// The module the scripting resource world imports. Networked entities live in +// networking/replication/ (Replication::NetworkEntity), so this registers no components. namespace Framework::World::Modules { struct Base { explicit Base(flecs::world &world) { diff --git a/code/framework/src/world/server.cpp b/code/framework/src/world/server.cpp index 2255a344c..0faef1213 100644 --- a/code/framework/src/world/server.cpp +++ b/code/framework/src/world/server.cpp @@ -11,8 +11,8 @@ namespace Framework::World { WorldError ServerEngine::Init(Framework::Networking::NetworkPeer *networkPeer, ServerConfig cfg) { _cfg = cfg; - // No flecs streaming systems anymore — relevance, ownership and serialization are handled - // natively by ReplicaManager3 (GridSectorizer interest + per-entity QuerySerialization). + // Relevance, ownership and serialization are handled by ReplicaManager3 (GridSectorizer + // interest + per-entity QuerySerialization). return Engine::Init(networkPeer); } diff --git a/code/framework/src/world/server.h b/code/framework/src/world/server.h index 7d6a0b320..3ffa1c35f 100644 --- a/code/framework/src/world/server.h +++ b/code/framework/src/world/server.h @@ -11,21 +11,6 @@ #include "engine.h" #include -#include - -// Broadcast an RPC payload from the server to everyone except one system (typically the originating -// client). Entity identity, if any, is carried inside the payload (a NetworkID field) — there is no -// separate game-RPC concept. For plain broadcast or targeted sends use FW_BROADCAST_RPC / -// FW_SEND_RPC_TO from engine.h. -#define FW_SERVER_BROADCAST_RPC_EXCEPT(rpc, guid, ...) \ - do { \ - auto s = rpc {}; \ - s.FromParameters(__VA_ARGS__); \ - auto __net = static_cast(Framework::CoreModules::GetNetworkPeer()); \ - if (__net) { \ - __net->BroadcastRPCExcept(s, guid); \ - } \ - } while (0) namespace Framework::World { class ServerEngine final : public Engine { @@ -39,8 +24,8 @@ namespace Framework::World { void Shutdown() override; void Update() override; - // Native entity lifecycle. CreateEntity constructs a registered entity type and starts - // replicating it; the caller fills in its state and (for players) registers it as a viewer. + // CreateEntity constructs a registered entity type and starts replicating it; the caller + // fills in its state and (for players) registers it as a viewer on the ReplicationManager. Replication::NetworkEntity *CreateEntity(uint32_t typeId) const; void RemoveEntity(Replication::NetworkEntity *entity) const; diff --git a/code/framework/src/world/types/player.hpp b/code/framework/src/world/types/player.hpp index a5aedc014..563c928bb 100644 --- a/code/framework/src/world/types/player.hpp +++ b/code/framework/src/world/types/player.hpp @@ -15,11 +15,10 @@ namespace Framework::World::Archetypes { namespace Replication = Framework::Networking::Replication; - // Configures a native entity as a player's avatar: it owns itself and (on the server) acts as the + // Configures an entity as a player's avatar: it owns itself and (on the server) acts as the // connection's viewer — its position/streamRange drive that client's interest set. The caller - // must still register it with the ReplicationManager as the viewer for the player's GUID - // (ReplicationManager::SetViewer). Player metadata such as nickname or hardware id is no longer - // tracked here; carry it on your game's player NetworkEntity subclass. + // registers it as the viewer for the player's GUID via ReplicationManager::SetViewer. Player + // metadata (nickname, hardware id) belongs on the game's player NetworkEntity subclass. class PlayerFactory { public: void SetupClient(Replication::NetworkEntity *entity, uint64_t guid) { diff --git a/code/framework/src/world/types/streaming.hpp b/code/framework/src/world/types/streaming.hpp index 399721f5b..35aff9661 100644 --- a/code/framework/src/world/types/streaming.hpp +++ b/code/framework/src/world/types/streaming.hpp @@ -15,8 +15,7 @@ namespace Framework::World::Archetypes { namespace Replication = Framework::Networking::Replication; - // Configures a freshly created native entity for streaming. With native replication most of the - // old per-entity streaming state is gone; this just stamps ownership. + // Stamps ownership on a streamed entity. class StreamingFactory { public: void SetupServer(Replication::NetworkEntity *entity, uint64_t guid) { From 11b28fec0cb84d11a0978c5542fdc6bf091c88ee Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:13:34 +0200 Subject: [PATCH 06/48] World: replicate at the configured tick rate ReplicaManager3 ran at its default 30ms autoserialize interval while the server advertised ServerConfig::tickInterval (60Hz default) to clients. Apply the configured rate via SetAutoSerializeInterval: the server uses cfg.tickInterval, the client uses the rate it receives at OnConnect. Drop the now write-only _cfg member. @ --- code/framework/src/world/client.cpp | 7 ++++--- code/framework/src/world/server.cpp | 11 +++++++++-- code/framework/src/world/server.h | 3 --- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/code/framework/src/world/client.cpp b/code/framework/src/world/client.cpp index f9234a8ae..61cdcc202 100644 --- a/code/framework/src/world/client.cpp +++ b/code/framework/src/world/client.cpp @@ -22,10 +22,11 @@ namespace Framework::World { } void ClientEngine::OnConnect(Networking::NetworkPeer *peer, float tickInterval) { - (void)tickInterval; _networkPeer = peer; - // Nothing else to wire: ReplicaManager3 constructs/serializes/destroys entities natively. - // Owned entities serialize upstream automatically via NetworkEntity::QuerySerialization. + // Serialize owned entities upstream at the server's tick rate (tickInterval is in seconds). + if (auto *replication = GetReplication()) { + replication->SetAutoSerializeInterval(static_cast(tickInterval * 1000.0f)); + } } void ClientEngine::OnDisconnect() { diff --git a/code/framework/src/world/server.cpp b/code/framework/src/world/server.cpp index 0faef1213..ebedd595c 100644 --- a/code/framework/src/world/server.cpp +++ b/code/framework/src/world/server.cpp @@ -10,10 +10,17 @@ namespace Framework::World { WorldError ServerEngine::Init(Framework::Networking::NetworkPeer *networkPeer, ServerConfig cfg) { - _cfg = cfg; // Relevance, ownership and serialization are handled by ReplicaManager3 (GridSectorizer // interest + per-entity QuerySerialization). - return Engine::Init(networkPeer); + const WorldError err = Engine::Init(networkPeer); + if (err != WorldError::WORLD_NONE) { + return err; + } + // Replicate entity updates at the configured tick rate (tickInterval is in seconds). + if (auto *replication = GetReplication()) { + replication->SetAutoSerializeInterval(static_cast(cfg.tickInterval * 1000.0f)); + } + return WorldError::WORLD_NONE; } void ServerEngine::Shutdown() { diff --git a/code/framework/src/world/server.h b/code/framework/src/world/server.h index 3ffa1c35f..93bea1e52 100644 --- a/code/framework/src/world/server.h +++ b/code/framework/src/world/server.h @@ -31,8 +31,5 @@ namespace Framework::World { void SetOwner(Replication::NetworkEntity *entity, uint64_t guid) const; uint64_t GetOwner(Replication::NetworkEntity *entity) const; - - private: - ServerConfig _cfg {}; }; } // namespace Framework::World From 99de5d6463c25285f29b1570d0e9cc9e3b97642e Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Mon, 1 Jun 2026 23:08:18 +0200 Subject: [PATCH 07/48] Networking: expose SignalExcept as the public relay primitive Make NetworkServer::SignalExcept public so games can relay a raw RPC4 bitstream to all systems except the originator (the server-authoritative event relay), and drop the unused typed BroadcastRPCExcept wrapper. --- code/framework/src/networking/network_server.h | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index 161c8c547..bea0f8d3a 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -29,10 +29,6 @@ namespace Framework::Networking { Messages::DisconnectPacketCallback _onPlayerDisconnectCallback; MafiaNet::FileListTransfer _fileListTransfer; - // Signal a serialized RPC payload to every connected system except one, by targeting each - // connection individually (RPC4::Signal has no exclusion parameter). - void SignalExcept(const char *identifier, MafiaNet::BitStream &bs, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED); - public: NetworkServer(): NetworkPeer() {} @@ -41,13 +37,10 @@ namespace Framework::Networking { bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) override; - // Send an RPC payload to everyone except one system (typically the originator). - template - void BroadcastRPCExcept(T &payload, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) { - MafiaNet::BitStream bs; - payload.Serialize(&bs, true); - SignalExcept(T::kIdentifier, bs, excludeGUID, priority, reliability); - } + // Signal an RPC to every connected system except one (typically the originator) — the + // server-authoritative relay primitive, since RPC4::Signal has no exclusion parameter. The + // bitstream holds the already-written RPC arguments. + void SignalExcept(const char *identifier, MafiaNet::BitStream &bs, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED); int GetPing(MafiaNet::RakNetGUID guid) const; From 21702b83a97ab0f194980b7d3e74343f7be8b356 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 12:21:36 +0200 Subject: [PATCH 08/48] Scripting: add reusable JS property-registration helpers Add scripting/builtins/property.h with RegisterProperty / RegisterReadonlyProperty (scalars + strings) and RegisterObjectProperty / RegisterReadonlyObjectProperty (v8pp-wrapped values like Color/Vector3). The getter/setter are template parameters so V8's accessor callbacks stay non-capturing, replacing the per-class boilerplate (and macros) that builtins were each duplicating. --- .../src/scripting/builtins/property.h | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 code/framework/src/scripting/builtins/property.h diff --git a/code/framework/src/scripting/builtins/property.h b/code/framework/src/scripting/builtins/property.h new file mode 100644 index 000000000..6f06775d0 --- /dev/null +++ b/code/framework/src/scripting/builtins/property.h @@ -0,0 +1,148 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include +#include +#include + +#include +#include + +namespace Framework::Scripting::Builtins { + // Helpers to register JS accessor properties on a v8pp-wrapped class from plain getter/setter + // member functions. V8 accessor callbacks must be non-capturing function pointers, so the + // getter/setter are passed as template parameters (compile-time constants) rather than captured. + // + // RegisterProperty(isolate, proto, "x"); // scalar/string + // RegisterReadonlyProperty(isolate, proto, "x"); + // RegisterObjectProperty(...); // wrapped value + // RegisterReadonlyObjectProperty(...); + + namespace detail { + template + struct MemberReturn; + template + struct MemberReturn { + using type = R; + }; + template + struct MemberReturn { + using type = R; + }; + + template + struct MemberArg; + template + struct MemberArg { + using type = A; + }; + + // Push a scalar/string value onto the V8 return slot. + template + inline void Return(const v8::PropertyCallbackInfo &info, T &&value) { + using V = std::decay_t; + if constexpr (std::is_same_v) { + info.GetReturnValue().Set(v8pp::to_v8(info.GetIsolate(), value)); + } + else { + info.GetReturnValue().Set(value); + } + } + + // Apply a JS value to a scalar/string setter, ignoring mismatched types (as before). + template + inline void Apply(v8::Isolate *isolate, v8::Local value, Fn &&apply) { + using A = std::decay_t; + auto ctx = isolate->GetCurrentContext(); + if constexpr (std::is_same_v) { + if (value->IsBoolean()) apply(value->BooleanValue(isolate)); + } + else if constexpr (std::is_same_v) { + if (value->IsString()) { + v8::String::Utf8Value str(isolate, value); + apply(std::string(*str ? *str : "")); + } + } + else if constexpr (std::is_floating_point_v) { + if (value->IsNumber()) apply(static_cast(value->NumberValue(ctx).FromMaybe(0.0))); + } + else if constexpr (std::is_integral_v) { + if (value->IsInt32()) apply(static_cast(value->Int32Value(ctx).FromMaybe(0))); + } + } + } // namespace detail + + // Read/write scalar or string property. + template + void RegisterProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { + proto->SetNativeDataProperty( + v8pp::to_v8(isolate, name).As(), + [](v8::Local, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) detail::Return(info, (self->*Getter)()); + }, + [](v8::Local, v8::Local value, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (!self) return; + using Arg = typename detail::MemberArg::type; + detail::Apply(info.GetIsolate(), value, [&](auto &&v) { + (self->*Setter)(std::forward(v)); + }); + }); + } + + // Read-only scalar or string property. + template + void RegisterReadonlyProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { + proto->SetNativeDataProperty( + v8pp::to_v8(isolate, name).As(), + [](v8::Local, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) detail::Return(info, (self->*Getter)()); + }); + } + + // Read/write property whose value is itself a v8pp-wrapped class returned/taken by value + // (e.g. Color, Vector3). The value type is deduced from the getter; its result is copied into a + // fresh JS-owned object. + template + void RegisterObjectProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { + using Value = std::decay_t::type>; + proto->SetNativeDataProperty( + v8pp::to_v8(isolate, name).As(), + [](v8::Local, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) { + auto &cls = Value::GetClass(info.GetIsolate()); + info.GetReturnValue().Set(cls.import_external(info.GetIsolate(), new Value((self->*Getter)()))); + } + }, + [](v8::Local, v8::Local value, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + auto *val = v8pp::class_::unwrap_object(info.GetIsolate(), value); + if (self && val) (self->*Setter)(*val); + }); + } + + // Read-only wrapped-value property (e.g. Vector3). The value type is deduced from the getter. + template + void RegisterReadonlyObjectProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { + using Value = std::decay_t::type>; + proto->SetNativeDataProperty( + v8pp::to_v8(isolate, name).As(), + [](v8::Local, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) { + auto &cls = Value::GetClass(info.GetIsolate()); + info.GetReturnValue().Set(cls.import_external(info.GetIsolate(), new Value((self->*Getter)()))); + } + }); + } +} // namespace Framework::Scripting::Builtins From f98369be7492f9f6a3bb594fceb3e772dc291821 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:26:55 +0200 Subject: [PATCH 09/48] Networking: built-in server-authoritative transform forcing The owner is authoritative over a replicated entity's transform and the server withholds serialize updates to it, so the server cannot relocate an owned entity (teleport) through normal replication. Add a built-in mechanism: - NetworkEntity::ForceTransform() (server) pushes the entity's current position/rotation to its owner via a built-in Framework::ForceTransform RPC4 call; no-op for unowned entities. - NetworkEntity::OnTransformForced() (client) is invoked after the framework applies the received transform, so games apply it to their engine (teleport, world preload, ...). ReplicationManager::Init takes the RPC4 and registers the handler; it exposes ForceTransform(entity). --- .../src/networking/network_client.cpp | 2 +- .../src/networking/network_server.cpp | 2 +- .../networking/replication/network_entity.cpp | 6 +++ .../networking/replication/network_entity.h | 10 ++++ .../replication/replication_manager.cpp | 47 ++++++++++++++++++- .../replication/replication_manager.h | 8 +++- 6 files changed, 71 insertions(+), 4 deletions(-) diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 0761330ca..a1bdcb870 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -32,7 +32,7 @@ namespace Framework::Networking { _peer->AttachPlugin(&_assetStreamer); // Run replication as a client: receive constructions and serialize owned entities upstream. - _replicationManager->Init(_peer, &_networkIDManager, false); + _replicationManager->Init(_peer, &_networkIDManager, &_rpc, false); _initialized = true; return NetworkPeerError::NETWORK_PEER_NONE; diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index c5d539f68..0bdb1dca4 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -35,7 +35,7 @@ namespace Framework::Networking { _peer->AttachPlugin(&_assetStreamer); // Run replication as the authoritative server. - _replicationManager->Init(_peer, &_networkIDManager, true); + _replicationManager->Init(_peer, &_networkIDManager, &_rpc, true); _initialized = true; return NetworkPeerError::NETWORK_PEER_NONE; diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 72f6146b5..f5e359562 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -90,6 +90,12 @@ namespace Framework::Networking::Replication { delete this; } + void NetworkEntity::ForceTransform() { + if (auto *manager = static_cast(replicaManager)) { + manager->ForceTransform(this); + } + } + // --- Per-tick delta serialization (VariableDeltaSerializer) --- void NetworkEntity::OnUserReplicaPreSerializeTick() { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index e43a57f6e..8b167f71a 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -80,6 +80,16 @@ namespace Framework::Networking::Replication { // Called once on the client after construction, e.g. to request the backing game object. virtual void OnConstructed() {} + // Called on the owning client after the server forces a new transform on this entity (its + // position/rotation have already been applied). Override to apply it to the game world, e.g. + // teleport the backing object and preload the surrounding world. + virtual void OnTransformForced() {} + + // Server: push this entity's current position/rotation to its owner. The owner is otherwise + // authoritative over its own transform, so this is how the server relocates an owned entity + // (a teleport). No-op for unowned (server-owned) entities, which replicate normally. + void ForceTransform(); + // --- Replica3 implementation --- void WriteAllocationID(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::BitStream *allocationIdBitstream) const override; void SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *destinationConnection) override; diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index d710ad0c6..c6f912d77 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -21,6 +21,32 @@ namespace Framework::Networking::Replication { // Half-extent of a point entity's bounding box in the spatial index. GridSectorizer requires // min < max (it asserts otherwise), so a point is inserted as a tiny box around its position. constexpr float kPointEpsilon = 0.01f; + + // Built-in server->owner teleport RPC (see NetworkEntity::ForceTransform). Wire: id/pos/rot. + constexpr const char *kForceTransformId = "Framework::ForceTransform"; + + // The local manager, so the (non-capturing) RPC handler can resolve entities. One per peer. + ReplicationManager *g_manager = nullptr; + + void OnForceTransform(MafiaNet::BitStream *bs, MafiaNet::Packet *) { + if (!g_manager) { + return; + } + MafiaNet::NetworkID networkId; + glm::vec3 position {}; + glm::quat rotation {}; + bs->Read(networkId); + bs->Read(position); + bs->Read(rotation); + + auto *entity = g_manager->GetEntityByNetworkID(networkId); + if (!entity) { + return; + } + entity->position = position; + entity->rotation = rotation; + entity->OnTransformForced(); + } } // namespace ReplicationManager::ReplicationManager() = default; @@ -32,11 +58,30 @@ namespace Framework::Networking::Replication { _gridReady = false; // re-initialised on next Tick() } - void ReplicationManager::Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, bool isServer) { + void ReplicationManager::Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, MafiaNet::RPC4 *rpc, bool isServer) { _isServer = isServer; _myGUID = peer->GetMyGUID().g; + _rpc = rpc; SetNetworkIDManager(networkIDManager); peer->AttachPlugin(this); + + // The owning client applies forced transforms (server-sent teleports). + g_manager = this; + if (_rpc) { + _rpc->RegisterFunction(kForceTransformId, &OnForceTransform); + } + } + + void ReplicationManager::ForceTransform(NetworkEntity *entity) { + if (!entity || !_rpc || entity->ownerGUID == 0xFFFFFFFFFFFFFFFF) { + return; + } + MafiaNet::BitStream bs; + MafiaNet::NetworkID networkId = entity->GetNetworkID(); + bs.Write(networkId); + bs.Write(entity->position); + bs.Write(entity->rotation); + _rpc->Signal(kForceTransformId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(entity->ownerGUID), false, false); } NetworkEntity *ReplicationManager::CreateEntity(uint32_t typeId) { diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index c75dbe032..bea7d2e6e 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -31,7 +32,11 @@ namespace Framework::Networking::Replication { public: ReplicationManager(); - void Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, bool isServer); + void Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, MafiaNet::RPC4 *rpc, bool isServer); + + // Server: push the entity's current transform to its owner as a teleport (see + // NetworkEntity::ForceTransform / OnTransformForced). No-op for unowned entities. + void ForceTransform(NetworkEntity *entity); bool IsServer() const { return _isServer; @@ -78,6 +83,7 @@ namespace Framework::Networking::Replication { float _gridCellSize = 100.0f; float _gridMin = -10000.0f; float _gridMax = 10000.0f; + MafiaNet::RPC4 *_rpc = nullptr; GridSectorizer _grid; std::unordered_map _viewers; }; From 6ebfe20bde249863b2a2588cdde4c28dc8759be5 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:18:45 +0200 Subject: [PATCH 10/48] Networking: server state override, JS-safe IDs, RPC4 slots Generalize the transform-only ForceTransform into entity-defined forced state: WriteForcedState/ReadForcedState/OnStateForced and ForceState, so the server can override any owned entity (the server always has the last word) while the owner stays authoritative for its own streaming. Assign small sequential NetworkIDs on the server instead of RakNet's random 64-bit ones, which exceed JavaScript's 2^53 exact-integer range and corrupt entity ids when scripts read them. Register RPC handlers as RPC4 slots so Signal() actually dispatches them; RegisterFunction handlers are only reached by Call(). --- code/framework/src/networking/network_peer.h | 5 +-- .../networking/replication/network_entity.cpp | 14 ++++++-- .../networking/replication/network_entity.h | 23 ++++++++----- .../replication/replication_manager.cpp | 34 ++++++++++--------- .../replication/replication_manager.h | 10 ++++-- 5 files changed, 54 insertions(+), 32 deletions(-) diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index d8910f43e..54809bd6e 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -86,10 +86,11 @@ namespace Framework::Networking { } // Register a handler for RPC payload type T (see networking/rpc/rpc.h). The handler is a - // plain function; decode the payload inside it with RPC::Read. + // plain function; decode the payload inside it with RPC::Read. Registered as an RPC4 slot + // because we dispatch via Signal() (RegisterFunction handlers are only reached by Call()). template void RegisterRPC(void (*handler)(MafiaNet::BitStream *, MafiaNet::Packet *)) { - _rpc.RegisterFunction(T::kIdentifier, handler); + _rpc.RegisterSlot(T::kIdentifier, handler, 0); } // Send an RPC payload to every connected system. diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index f5e359562..3ad1e440f 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -90,9 +90,19 @@ namespace Framework::Networking::Replication { delete this; } - void NetworkEntity::ForceTransform() { + void NetworkEntity::WriteForcedState(MafiaNet::BitStream *bs) const { + bs->Write(position); + bs->Write(rotation); + } + + void NetworkEntity::ReadForcedState(MafiaNet::BitStream *bs) { + bs->Read(position); + bs->Read(rotation); + } + + void NetworkEntity::ForceState() { if (auto *manager = static_cast(replicaManager)) { - manager->ForceTransform(this); + manager->ForceState(this); } } diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 8b167f71a..13f73b393 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -80,15 +80,20 @@ namespace Framework::Networking::Replication { // Called once on the client after construction, e.g. to request the backing game object. virtual void OnConstructed() {} - // Called on the owning client after the server forces a new transform on this entity (its - // position/rotation have already been applied). Override to apply it to the game world, e.g. - // teleport the backing object and preload the surrounding world. - virtual void OnTransformForced() {} - - // Server: push this entity's current position/rotation to its owner. The owner is otherwise - // authoritative over its own transform, so this is how the server relocates an owned entity - // (a teleport). No-op for unowned (server-owned) entities, which replicate normally. - void ForceTransform(); + // The server-authoritative state pushed to the owner by ForceState (the owner is otherwise + // authoritative over its own updates, and the server withholds serialize to it). Default + // carries the transform; override to send additional state, e.g. a vehicle's engine/config. + // Must read/write symmetrically. + virtual void WriteForcedState(MafiaNet::BitStream *bs) const; + virtual void ReadForcedState(MafiaNet::BitStream *bs); + + // Called on the owning client after ReadForcedState has applied the forced fields. Override + // to push them into the game (teleport and preload the world, set the engine, ...). + virtual void OnStateForced() {} + + // Server: push this entity's forced state to its owner. No-op for unowned (server-owned) + // entities, which replicate to everyone normally. + void ForceState(); // --- Replica3 implementation --- void WriteAllocationID(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::BitStream *allocationIdBitstream) const override; diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index c6f912d77..2c8d3fd4e 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -22,30 +22,26 @@ namespace Framework::Networking::Replication { // min < max (it asserts otherwise), so a point is inserted as a tiny box around its position. constexpr float kPointEpsilon = 0.01f; - // Built-in server->owner teleport RPC (see NetworkEntity::ForceTransform). Wire: id/pos/rot. - constexpr const char *kForceTransformId = "Framework::ForceTransform"; + // Built-in server->owner state push (see NetworkEntity::ForceState). Wire: id, then the + // entity's WriteForcedState payload. + constexpr const char *kForceStateId = "Framework::ForceState"; // The local manager, so the (non-capturing) RPC handler can resolve entities. One per peer. ReplicationManager *g_manager = nullptr; - void OnForceTransform(MafiaNet::BitStream *bs, MafiaNet::Packet *) { + void OnForceState(MafiaNet::BitStream *bs, MafiaNet::Packet *) { if (!g_manager) { return; } MafiaNet::NetworkID networkId; - glm::vec3 position {}; - glm::quat rotation {}; bs->Read(networkId); - bs->Read(position); - bs->Read(rotation); auto *entity = g_manager->GetEntityByNetworkID(networkId); if (!entity) { return; } - entity->position = position; - entity->rotation = rotation; - entity->OnTransformForced(); + entity->ReadForcedState(bs); + entity->OnStateForced(); } } // namespace @@ -65,23 +61,23 @@ namespace Framework::Networking::Replication { SetNetworkIDManager(networkIDManager); peer->AttachPlugin(this); - // The owning client applies forced transforms (server-sent teleports). + // The owning client applies forced state pushed by the server (teleports, engine, ...). g_manager = this; if (_rpc) { - _rpc->RegisterFunction(kForceTransformId, &OnForceTransform); + // Slot, not function: ForceState is delivered with Signal() (see ForceState below). + _rpc->RegisterSlot(kForceStateId, &OnForceState, 0); } } - void ReplicationManager::ForceTransform(NetworkEntity *entity) { + void ReplicationManager::ForceState(NetworkEntity *entity) { if (!entity || !_rpc || entity->ownerGUID == 0xFFFFFFFFFFFFFFFF) { return; } MafiaNet::BitStream bs; MafiaNet::NetworkID networkId = entity->GetNetworkID(); bs.Write(networkId); - bs.Write(entity->position); - bs.Write(entity->rotation); - _rpc->Signal(kForceTransformId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(entity->ownerGUID), false, false); + entity->WriteForcedState(&bs); + _rpc->Signal(kForceStateId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(entity->ownerGUID), false, false); } NetworkEntity *ReplicationManager::CreateEntity(uint32_t typeId) { @@ -89,6 +85,12 @@ namespace Framework::Networking::Replication { if (!entity) { return nullptr; } + // Assign a small, sequential id BEFORE Reference(): the NetworkIDManager then tracks the + // entity under this id instead of minting a random 64-bit one (its peer-to-peer scheme). Those + // random ids overflow JavaScript's 2^53 exact-integer range, so a script reading an entity id + // gets a rounded value that no longer resolves — the same reason MTA:SA keeps element ids + // small. Clients adopt this id via the construction snapshot, so both sides agree. + entity->SetNetworkID(++_nextNetworkId); Reference(entity); return entity; } diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index bea7d2e6e..e91d17bd2 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -34,9 +34,10 @@ namespace Framework::Networking::Replication { void Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, MafiaNet::RPC4 *rpc, bool isServer); - // Server: push the entity's current transform to its owner as a teleport (see - // NetworkEntity::ForceTransform / OnTransformForced). No-op for unowned entities. - void ForceTransform(NetworkEntity *entity); + // Server: push the entity's forced state to its owner — the server's authoritative override + // of an owned entity (see NetworkEntity::ForceState / OnStateForced). No-op for unowned + // entities, which already replicate to everyone. + void ForceState(NetworkEntity *entity); bool IsServer() const { return _isServer; @@ -79,6 +80,9 @@ namespace Framework::Networking::Replication { private: bool _isServer = false; uint64_t _myGUID = 0xFFFFFFFFFFFFFFFF; + // Server-side monotonic NetworkID allocator. Starts at 1 (0 reads as "none" in game code) and + // stays well within JavaScript's safe-integer range so scripting can hold ids as plain numbers. + uint64_t _nextNetworkId = 0; bool _gridReady = false; float _gridCellSize = 100.0f; float _gridMin = -10000.0f; From 8512703f89077051ff284816e661e3c937f7ded5 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:18:45 +0200 Subject: [PATCH 11/48] Scripting: reusable Entity builtin, accessor-property setters Add header-only Framework::Scripting::Builtins::Entity, a reusable replicated-entity scripting handle (NetworkID resolved via the world engine, with a server-authoritative position/rotation routed through ForceState) that mods can derive from. Register read/write properties with SetAccessorProperty instead of SetNativeDataProperty: a native-data-property setter installed on a prototype is never invoked when a script assigns to the property on an instance, so the write was silently dropped. --- .../framework/src/scripting/builtins/entity.h | 207 ++++++++++++++++++ .../src/scripting/builtins/property.h | 67 +++--- 2 files changed, 243 insertions(+), 31 deletions(-) create mode 100644 code/framework/src/scripting/builtins/entity.h diff --git a/code/framework/src/scripting/builtins/entity.h b/code/framework/src/scripting/builtins/entity.h new file mode 100644 index 000000000..39ea06291 --- /dev/null +++ b/code/framework/src/scripting/builtins/entity.h @@ -0,0 +1,207 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "quaternion.h" +#include "vector3.h" + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace Framework::Scripting::Builtins { + // Base scripting handle for a replicated entity, reusable across mods. Wraps the entity's + // NetworkID and resolves the live NetworkEntity on demand through the world engine, so a stale JS + // handle to a destroyed entity resolves to null instead of dangling. Exposes the common transform + // (position/rotation); writing it goes through NetworkEntity::ForceState, so the server's value is + // authoritative even over an entity a client owns. Mods derive their own handles (player, vehicle) + // via v8pp inherit() and add their game-specific properties. + // + // Header-only (like property.h) so it compiles against whichever V8 the including target links + // (libnode on the server, standalone V8 on the client). + class Entity { + public: + Entity(uint64_t networkId): _id(networkId) { + if (!Resolve()) { + throw std::runtime_error(fmt::format("Entity handle '{}' is not valid!", networkId)); + } + } + virtual ~Entity() = default; + + uint64_t GetId() const { + return _id; + } + + Networking::Replication::NetworkEntity *GetHandle() const { + return Resolve(); + } + + Vector3 GetPosition() const { + if (auto *e = Resolve()) { + return Vector3(e->position.x, e->position.y, e->position.z); + } + return Vector3(0, 0, 0); + } + + void SetPosition(const Vector3 &pos) { + if (auto *e = Resolve()) { + e->position = pos.vec(); + e->ForceState(); + } + } + + Vector3 GetRotation() const { + if (auto *e = Resolve()) { + glm::vec3 euler = glm::eulerAngles(e->rotation); + return Vector3(glm::degrees(euler.x), glm::degrees(euler.y), glm::degrees(euler.z)); + } + return Vector3(0, 0, 0); + } + + void SetRotationFromEuler(const Vector3 &rot) { + if (auto *e = Resolve()) { + glm::vec3 radians(glm::radians(rot.vec().x), glm::radians(rot.vec().y), glm::radians(rot.vec().z)); + e->rotation = glm::quat(radians); + e->ForceState(); + } + } + + void SetRotationFromQuaternion(const Quaternion &quat) { + if (auto *e = Resolve()) { + e->rotation = quat.quat(); + e->ForceState(); + } + } + + std::string GetModelName() const { + if (auto *e = Resolve()) { + return e->modelName; + } + return ""; + } + + virtual std::string ToString() const { + std::ostringstream ss; + ss << "Entity{ id: " << _id << " }"; + return ss.str(); + } + + static v8pp::class_ &GetClass(v8::Isolate *isolate) { + auto it = _classes.find(isolate); + if (it != _classes.end()) { + return *it->second; + } + + auto &cls = _classes[isolate]; + cls = std::make_unique>(isolate); + cls->auto_wrap_objects(true); + cls->ctor() + .function("toString", &Entity::ToString); + + auto protoTemplate = cls->class_function_template()->PrototypeTemplate(); + + // Read-only property: id + protoTemplate->SetNativeDataProperty( + v8pp::to_v8(isolate, "id").As(), + [](v8::Local, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) info.GetReturnValue().Set(static_cast(self->GetId())); + }); + + // Read-only property: modelName + protoTemplate->SetNativeDataProperty( + v8pp::to_v8(isolate, "modelName").As(), + [](v8::Local, const v8::PropertyCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) info.GetReturnValue().Set(v8pp::to_v8(info.GetIsolate(), self->GetModelName())); + }); + + // Property: position (Vector3). Accessor pair (not SetNativeDataProperty) so the setter + // fires when a script assigns through an instance whose accessor lives on the prototype. + { + auto positionGetter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) { + auto pos = self->GetPosition(); + auto &vecCls = Vector3::GetClass(info.GetIsolate()); + info.GetReturnValue().Set(vecCls.import_external(info.GetIsolate(), new Vector3(pos))); + } + }); + auto positionSetter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (!self || info.Length() < 1) return; + auto *vec = v8pp::class_::unwrap_object(info.GetIsolate(), info[0]); + if (vec) self->SetPosition(*vec); + }); + protoTemplate->SetAccessorProperty(v8pp::to_v8(isolate, "position").As(), positionGetter, positionSetter); + } + + // Property: rotation (accepts both Vector3 euler degrees and Quaternion). + { + auto rotationGetter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) { + auto rot = self->GetRotation(); + auto &vecCls = Vector3::GetClass(info.GetIsolate()); + info.GetReturnValue().Set(vecCls.import_external(info.GetIsolate(), new Vector3(rot))); + } + }); + auto rotationSetter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (!self || info.Length() < 1) return; + + auto *vec = v8pp::class_::unwrap_object(info.GetIsolate(), info[0]); + if (vec) { + self->SetRotationFromEuler(*vec); + return; + } + auto *quat = v8pp::class_::unwrap_object(info.GetIsolate(), info[0]); + if (quat) { + self->SetRotationFromQuaternion(*quat); + return; + } + info.GetIsolate()->ThrowException(v8::Exception::TypeError( + v8pp::to_v8(info.GetIsolate(), "rotation must be a Vector3 (euler degrees) or Quaternion"))); + }); + protoTemplate->SetAccessorProperty(v8pp::to_v8(isolate, "rotation").As(), rotationGetter, rotationSetter); + } + + return *cls; + } + + static void Register(v8::Isolate *isolate, v8::Local global) { + v8pp::class_ &cls = GetClass(isolate); + auto ctx = isolate->GetCurrentContext(); + global->Set(ctx, v8pp::to_v8(isolate, "Entity"), cls.js_function_template()->GetFunction(ctx).ToLocalChecked()).Check(); + } + + protected: + Networking::Replication::NetworkEntity *Resolve() const { + auto *world = CoreModules::GetWorldEngine(); + return world ? world->GetEntityByNetworkID(_id) : nullptr; + } + + uint64_t _id = 0; + inline static std::unordered_map>> _classes; + }; +} // namespace Framework::Scripting::Builtins diff --git a/code/framework/src/scripting/builtins/property.h b/code/framework/src/scripting/builtins/property.h index 6f06775d0..86a6b66dc 100644 --- a/code/framework/src/scripting/builtins/property.h +++ b/code/framework/src/scripting/builtins/property.h @@ -44,9 +44,10 @@ namespace Framework::Scripting::Builtins { using type = A; }; - // Push a scalar/string value onto the V8 return slot. - template - inline void Return(const v8::PropertyCallbackInfo &info, T &&value) { + // Push a scalar/string value onto the V8 return slot. Generic over the callback-info type so + // it serves both property accessors and FunctionTemplate-based accessors. + template + inline void Return(const Info &info, T &&value) { using V = std::decay_t; if constexpr (std::is_same_v) { info.GetReturnValue().Set(v8pp::to_v8(info.GetIsolate(), value)); @@ -79,23 +80,25 @@ namespace Framework::Scripting::Builtins { } } // namespace detail - // Read/write scalar or string property. + // Read/write scalar or string property. Uses SetAccessorProperty (a real getter/setter accessor + // pair) rather than SetNativeDataProperty: a native-data-property setter installed on a prototype + // is NOT invoked when a script assigns to the property on an instance, so the write is silently + // dropped. The accessor-property setter fires correctly through the prototype chain. template void RegisterProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { - proto->SetNativeDataProperty( - v8pp::to_v8(isolate, name).As(), - [](v8::Local, const v8::PropertyCallbackInfo &info) { - auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); - if (self) detail::Return(info, (self->*Getter)()); - }, - [](v8::Local, v8::Local value, const v8::PropertyCallbackInfo &info) { - auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); - if (!self) return; - using Arg = typename detail::MemberArg::type; - detail::Apply(info.GetIsolate(), value, [&](auto &&v) { - (self->*Setter)(std::forward(v)); - }); + auto getter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) detail::Return(info, (self->*Getter)()); + }); + auto setter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (!self || info.Length() < 1) return; + using Arg = typename detail::MemberArg::type; + detail::Apply(info.GetIsolate(), info[0], [&](auto &&v) { + (self->*Setter)(std::forward(v)); }); + }); + proto->SetAccessorProperty(v8pp::to_v8(isolate, name).As(), getter, setter); } // Read-only scalar or string property. @@ -115,20 +118,22 @@ namespace Framework::Scripting::Builtins { template void RegisterObjectProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { using Value = std::decay_t::type>; - proto->SetNativeDataProperty( - v8pp::to_v8(isolate, name).As(), - [](v8::Local, const v8::PropertyCallbackInfo &info) { - auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); - if (self) { - auto &cls = Value::GetClass(info.GetIsolate()); - info.GetReturnValue().Set(cls.import_external(info.GetIsolate(), new Value((self->*Getter)()))); - } - }, - [](v8::Local, v8::Local value, const v8::PropertyCallbackInfo &info) { - auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); - auto *val = v8pp::class_::unwrap_object(info.GetIsolate(), value); - if (self && val) (self->*Setter)(*val); - }); + // SetAccessorProperty for the same reason as RegisterProperty: a prototype-installed + // native-data-property setter never fires on instance assignment. + auto getter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (self) { + auto &cls = Value::GetClass(info.GetIsolate()); + info.GetReturnValue().Set(cls.import_external(info.GetIsolate(), new Value((self->*Getter)()))); + } + }); + auto setter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { + auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); + if (!self || info.Length() < 1) return; + auto *val = v8pp::class_::unwrap_object(info.GetIsolate(), info[0]); + if (val) (self->*Setter)(*val); + }); + proto->SetAccessorProperty(v8pp::to_v8(isolate, name).As(), getter, setter); } // Read-only wrapped-value property (e.g. Vector3). The value type is deduced from the getter. From 6e9c41b48471de52f30d1e6fc179cb506123d4d2 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:37:44 +0200 Subject: [PATCH 12/48] Networking: notify the new owner on ownership change Add NetworkEntity::SetOwner / ReplicationManager::SetOwner: set the owner and Signal a built-in grant RPC straight to the new owner. The server withholds serialize to an entity's owner, so the grant cannot ride normal replication; other peers and a revoked previous owner still learn it through serialize, and the Deserialize authority gate rejects stale-owner uploads during the handover. ServerEngine::SetOwner routes through it. Lets a client become authoritative for an entity it gains after construction (e.g. a vehicle it drives). --- .../networking/replication/network_entity.cpp | 9 ++++ .../networking/replication/network_entity.h | 6 +++ .../replication/replication_manager.cpp | 44 ++++++++++++++++--- .../replication/replication_manager.h | 5 +++ code/framework/src/world/server.cpp | 4 +- 5 files changed, 61 insertions(+), 7 deletions(-) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 3ad1e440f..c8ad74eb9 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -106,6 +106,15 @@ namespace Framework::Networking::Replication { } } + void NetworkEntity::SetOwner(uint64_t guid) { + if (auto *manager = static_cast(replicaManager)) { + manager->SetOwner(this, guid); + } + else { + ownerGUID = guid; + } + } + // --- Per-tick delta serialization (VariableDeltaSerializer) --- void NetworkEntity::OnUserReplicaPreSerializeTick() { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 13f73b393..5338cfea5 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -95,6 +95,12 @@ namespace Framework::Networking::Replication { // entities, which replicate to everyone normally. void ForceState(); + // Server: change this entity's owner. The new owner is told directly (the server withholds + // serialize to an owner, so it would otherwise never learn it gained authority); other peers + // and a revoked previous owner pick up the change through normal serialization. Pass + // UNASSIGNED_RAKNET_GUID.g to return ownership to the server. + void SetOwner(uint64_t guid); + // --- Replica3 implementation --- void WriteAllocationID(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::BitStream *allocationIdBitstream) const override; void SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *destinationConnection) override; diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index 2c8d3fd4e..f82d2f319 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -26,6 +26,9 @@ namespace Framework::Networking::Replication { // entity's WriteForcedState payload. constexpr const char *kForceStateId = "Framework::ForceState"; + // Built-in server->owner ownership grant (see NetworkEntity::SetOwner). Wire: id, ownerGUID. + constexpr const char *kSetOwnerId = "Framework::SetOwner"; + // The local manager, so the (non-capturing) RPC handler can resolve entities. One per peer. ReplicationManager *g_manager = nullptr; @@ -43,6 +46,20 @@ namespace Framework::Networking::Replication { entity->ReadForcedState(bs); entity->OnStateForced(); } + + void OnSetOwner(MafiaNet::BitStream *bs, MafiaNet::Packet *) { + if (!g_manager) { + return; + } + MafiaNet::NetworkID networkId; + uint64_t ownerGUID = 0; + bs->Read(networkId); + bs->Read(ownerGUID); + + if (auto *entity = g_manager->GetEntityByNetworkID(networkId)) { + entity->ownerGUID = ownerGUID; + } + } } // namespace ReplicationManager::ReplicationManager() = default; @@ -64,8 +81,8 @@ namespace Framework::Networking::Replication { // The owning client applies forced state pushed by the server (teleports, engine, ...). g_manager = this; if (_rpc) { - // Slot, not function: ForceState is delivered with Signal() (see ForceState below). _rpc->RegisterSlot(kForceStateId, &OnForceState, 0); + _rpc->RegisterSlot(kSetOwnerId, &OnSetOwner, 0); } } @@ -80,16 +97,31 @@ namespace Framework::Networking::Replication { _rpc->Signal(kForceStateId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(entity->ownerGUID), false, false); } + void ReplicationManager::SetOwner(NetworkEntity *entity, uint64_t guid) { + if (!entity) { + return; + } + entity->ownerGUID = guid; + // The new owner is otherwise blind to the change: the server withholds serialize to whoever + // owns an entity, so it would never receive the updated ownerGUID. Tell it directly. Other + // peers, and any previous owner that just lost authority, learn it through normal serialize. + if (_rpc && _isServer && guid != 0xFFFFFFFFFFFFFFFF) { + MafiaNet::BitStream bs; + MafiaNet::NetworkID networkId = entity->GetNetworkID(); + bs.Write(networkId); + bs.Write(guid); + _rpc->Signal(kSetOwnerId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(guid), false, false); + } + } + NetworkEntity *ReplicationManager::CreateEntity(uint32_t typeId) { NetworkEntity *entity = EntityFactory::Get().Create(typeId); if (!entity) { return nullptr; } - // Assign a small, sequential id BEFORE Reference(): the NetworkIDManager then tracks the - // entity under this id instead of minting a random 64-bit one (its peer-to-peer scheme). Those - // random ids overflow JavaScript's 2^53 exact-integer range, so a script reading an entity id - // gets a rounded value that no longer resolves — the same reason MTA:SA keeps element ids - // small. Clients adopt this id via the construction snapshot, so both sides agree. + // Assign a small, sequential id before Reference() so the NetworkIDManager tracks the entity + // under it. Ids must stay within JavaScript's 2^53 exact-integer range so scripts can hold + // them as plain numbers. Clients adopt this id via the construction snapshot. entity->SetNetworkID(++_nextNetworkId); Reference(entity); return entity; diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index e91d17bd2..975fa667f 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -39,6 +39,11 @@ namespace Framework::Networking::Replication { // entities, which already replicate to everyone. void ForceState(NetworkEntity *entity); + // Server: change an entity's owner and notify the new owner directly (see + // NetworkEntity::SetOwner). Needed because serialize to an owner is withheld, so the grant + // can't ride normal replication. + void SetOwner(NetworkEntity *entity, uint64_t guid); + bool IsServer() const { return _isServer; } diff --git a/code/framework/src/world/server.cpp b/code/framework/src/world/server.cpp index ebedd595c..5b3dc13c1 100644 --- a/code/framework/src/world/server.cpp +++ b/code/framework/src/world/server.cpp @@ -44,7 +44,9 @@ namespace Framework::World { void ServerEngine::SetOwner(Replication::NetworkEntity *entity, uint64_t guid) const { if (entity) { - entity->ownerGUID = guid; + // Routes through the entity so the new owner is notified directly (serialize to an owner + // is withheld); see NetworkEntity::SetOwner. + entity->SetOwner(guid); } } From db848a0b6022d21c840a321e74fd22f958f101b1 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:37:44 +0200 Subject: [PATCH 13/48] Framework: drop changelog-style comments Describe what the scripting/networking helpers do instead of justifying them against the previous or alternative API. --- code/framework/src/networking/network_peer.h | 4 ++-- code/framework/src/scripting/builtins/entity.h | 8 ++++---- code/framework/src/scripting/builtins/property.h | 8 ++------ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index 54809bd6e..ef6c50e18 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -86,8 +86,8 @@ namespace Framework::Networking { } // Register a handler for RPC payload type T (see networking/rpc/rpc.h). The handler is a - // plain function; decode the payload inside it with RPC::Read. Registered as an RPC4 slot - // because we dispatch via Signal() (RegisterFunction handlers are only reached by Call()). + // plain function; decode the payload inside it with RPC::Read. Registered as an RPC4 slot, + // matching the Signal() send below. template void RegisterRPC(void (*handler)(MafiaNet::BitStream *, MafiaNet::Packet *)) { _rpc.RegisterSlot(T::kIdentifier, handler, 0); diff --git a/code/framework/src/scripting/builtins/entity.h b/code/framework/src/scripting/builtins/entity.h index 39ea06291..b85c4f541 100644 --- a/code/framework/src/scripting/builtins/entity.h +++ b/code/framework/src/scripting/builtins/entity.h @@ -37,8 +37,8 @@ namespace Framework::Scripting::Builtins { // authoritative even over an entity a client owns. Mods derive their own handles (player, vehicle) // via v8pp inherit() and add their game-specific properties. // - // Header-only (like property.h) so it compiles against whichever V8 the including target links - // (libnode on the server, standalone V8 on the client). + // Header-only so it compiles against whichever V8 the including target links (libnode on the + // server, standalone V8 on the client). class Entity { public: Entity(uint64_t networkId): _id(networkId) { @@ -136,8 +136,8 @@ namespace Framework::Scripting::Builtins { if (self) info.GetReturnValue().Set(v8pp::to_v8(info.GetIsolate(), self->GetModelName())); }); - // Property: position (Vector3). Accessor pair (not SetNativeDataProperty) so the setter - // fires when a script assigns through an instance whose accessor lives on the prototype. + // Property: position (Vector3). An accessor pair so the setter fires when a script + // assigns to it through the prototype chain. { auto positionGetter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); diff --git a/code/framework/src/scripting/builtins/property.h b/code/framework/src/scripting/builtins/property.h index 86a6b66dc..660ea8095 100644 --- a/code/framework/src/scripting/builtins/property.h +++ b/code/framework/src/scripting/builtins/property.h @@ -80,10 +80,8 @@ namespace Framework::Scripting::Builtins { } } // namespace detail - // Read/write scalar or string property. Uses SetAccessorProperty (a real getter/setter accessor - // pair) rather than SetNativeDataProperty: a native-data-property setter installed on a prototype - // is NOT invoked when a script assigns to the property on an instance, so the write is silently - // dropped. The accessor-property setter fires correctly through the prototype chain. + // Read/write scalar or string property. Installed as an accessor pair so the setter fires when a + // script assigns to the property through the prototype chain. template void RegisterProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { auto getter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { @@ -118,8 +116,6 @@ namespace Framework::Scripting::Builtins { template void RegisterObjectProperty(v8::Isolate *isolate, v8::Local proto, const char *name) { using Value = std::decay_t::type>; - // SetAccessorProperty for the same reason as RegisterProperty: a prototype-installed - // native-data-property setter never fires on instance assignment. auto getter = v8::FunctionTemplate::New(isolate, [](const v8::FunctionCallbackInfo &info) { auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); if (self) { From d2d122ef81dc3c48b8f13d5d5ef2e927d9dcc9ee Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:11:59 +0200 Subject: [PATCH 14/48] Chat: hoist chat transport and scripting API to the framework Provide a reusable chat feature shared by all mods: a ChatMessage RPC payload, a global JS Chat builtin (sendToAll / sendToPlayer over the base Entity handle), server-side receive/parse/dispatch exposed via chat callbacks, and client-side send plus a received-message callback. Mods keep only their own UI and a thin bridge from the chat callbacks to their scripting events. @ --- .../src/integrations/client/instance.cpp | 29 +++++++ .../src/integrations/client/instance.h | 17 +++++ .../src/integrations/server/instance.cpp | 66 ++++++++++++++++ .../src/integrations/server/instance.h | 19 +++++ .../integrations/server/scripting/module.cpp | 5 ++ .../src/networking/rpc/chat_message.h | 37 +++++++++ code/framework/src/scripting/builtins/chat.h | 76 +++++++++++++++++++ 7 files changed, 249 insertions(+) create mode 100644 code/framework/src/networking/rpc/chat_message.h create mode 100644 code/framework/src/scripting/builtins/chat.h diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 7b48594c9..6208aa6dc 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -19,6 +19,7 @@ #include "integrations/shared/rpc/emit_lua_event.h" #include "networking/rpc/rpc.h" +#include "networking/rpc/chat_message.h" #include "../shared/modules/mod.hpp" @@ -106,6 +107,18 @@ namespace Framework::Integrations::Client { resourceManager->GetEvents().EmitReserved(isolate, context, eventName, args); } + + // The single client Instance, reachable from the plain RPC chat handler. + Instance *g_chatClientInstance = nullptr; + + void OnChatMessageRPC(MafiaNet::BitStream *bs, MafiaNet::Packet *packet) { + (void)packet; + if (!g_chatClientInstance) { + return; + } + const auto payload = Framework::Networking::RPC::Read(bs); + g_chatClientInstance->DispatchReceivedChat(payload.text); + } } // namespace bool AssetDownloadFileProgress::OnFile(MafiaNet::FileListTransferCBInterface::OnFileStruct *onFileStruct) { @@ -440,9 +453,25 @@ namespace Framework::Integrations::Client { net->RegisterRPC(&OnEmitLuaEvent); + // Chat lines from the server are forwarded to the mod's UI via the received callback. + g_chatClientInstance = this; + net->RegisterRPC(&OnChatMessageRPC); + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Networking messages registered"); } + void Instance::SendChatMessage(const std::string &text) { + if (text.empty()) { + return; + } + const auto net = GetNetworkingEngine()->GetNetworkClient(); + if (!net) { + return; + } + Framework::Networking::RPC::ChatMessage payload {text}; + net->BroadcastRPC(payload); + } + void Instance::DownloadsAssetsFromConnectedServer() { const auto net = GetNetworkingEngine()->GetNetworkClient(); diff --git a/code/framework/src/integrations/client/instance.h b/code/framework/src/integrations/client/instance.h index 7a6f3a0d6..f51b67cb8 100644 --- a/code/framework/src/integrations/client/instance.h +++ b/code/framework/src/integrations/client/instance.h @@ -40,6 +40,8 @@ namespace Framework::Integrations::Client { using NetworkConnectionFinalizedCallback = fu2::function; using NetworkConnectionClosedCallback = fu2::function; using AssetsDownloadFinishedCallback = fu2::function; + // Fired when the server sends a chat line to display. + using NetworkChatMessageCallback = fu2::function; class Instance; @@ -108,6 +110,7 @@ namespace Framework::Integrations::Client { NetworkConnectionFinalizedCallback _onConnectionFinalized; NetworkConnectionClosedCallback _onConnectionClosed; AssetsDownloadFinishedCallback _onAssetsDownloadFinished; + NetworkChatMessageCallback _onChatMessageReceived; // Entity factories std::unique_ptr _playerFactory; @@ -175,6 +178,20 @@ namespace Framework::Integrations::Client { _onAssetsDownloadFinished = std::move(cb); } + void SetOnChatMessageReceivedCallback(NetworkChatMessageCallback cb) { + _onChatMessageReceived = std::move(cb); + } + + // Invoked by the chat RPC handler with a line received from the server. + void DispatchReceivedChat(const std::string &text) const { + if (_onChatMessageReceived) { + _onChatMessageReceived(text); + } + } + + // Send a chat line to the server (the local player's outgoing text). + void SendChatMessage(const std::string &text); + Networking::Engine *GetNetworkingEngine() const { return _networkingEngine.get(); } diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 4c1807186..7d34973c7 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -10,10 +10,15 @@ #include #include +#include #include "core_modules.h" #include "world/server.h" +#include "networking/replication/network_entity.h" +#include "networking/replication/replication_manager.h" +#include "networking/rpc/chat_message.h" + #include "networking/messages/client_connection_finalized.h" #include "networking/messages/client_handshake.h" #include "networking/messages/client_initialise_player.h" @@ -33,6 +38,31 @@ #include namespace Framework::Integrations::Server { + namespace { + // RPC4 dispatches to plain functions; the single server Instance is reachable here so the + // chat handler can resolve the sender and forward to the instance callbacks. + const Instance *g_chatInstance = nullptr; + + void OnChatMessageRPC(MafiaNet::BitStream *bs, MafiaNet::Packet *packet) { + if (!g_chatInstance) { + return; + } + const auto payload = Framework::Networking::RPC::Read(bs); + if (payload.text.empty()) { + return; + } + // Resolve the sender from its connection's viewer entity. + auto *engine = g_chatInstance->GetNetworkingEngine(); + auto *server = engine ? engine->GetNetworkServer() : nullptr; + auto *repl = server ? server->GetReplicationManager() : nullptr; + auto *sender = repl ? repl->GetViewer(packet->guid.g) : nullptr; + if (!sender) { + return; + } + g_chatInstance->HandleIncomingChat(sender->GetNetworkID(), payload.text); + } + } // namespace + Instance::Instance(): _shuttingDown(false) { _networkingEngine = std::make_unique(); _webServer = std::make_unique(); @@ -350,6 +380,11 @@ namespace Framework::Integrations::Server { (void)stub; }); + // Incoming chat from clients. Sender resolution + command parsing happen in the handler; + // the mod observes via SetOnChatMessageCallback / SetOnChatCommandCallback. + g_chatInstance = this; + net->RegisterRPC(&OnChatMessageRPC); + // Note: Client-to-server events are handled through the JS Events system // The client can emit events via Framework.events.emitToServer() which uses // the networking messages system to send events to the server @@ -357,6 +392,37 @@ namespace Framework::Integrations::Server { Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Networking messages registered"); } + void Instance::HandleIncomingChat(uint64_t senderNetworkId, const std::string &text) const { + if (text.empty()) { + return; + } + if (text[0] == '/') { + std::string command, argsPart; + const auto space = text.find(' '); + if (space != std::string::npos) { + command = text.substr(1, space - 1); + argsPart = text.substr(space + 1); + } + else { + command = text.substr(1); + } + std::vector args; + std::string arg; + std::istringstream iss(argsPart); + while (iss >> arg) { + args.push_back(arg); + } + if (_onChatCommandCallback) { + _onChatCommandCallback(senderNetworkId, text, command, args); + } + } + else { + if (_onChatMessageCallback) { + _onChatMessageCallback(senderNetworkId, text); + } + } + } + void Instance::InitAssetStreamer() { Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Setting up asset streamer..."); const auto net = GetNetworkingEngine()->GetNetworkServer(); diff --git a/code/framework/src/integrations/server/instance.h b/code/framework/src/integrations/server/instance.h index 3965580c1..fad00f8af 100644 --- a/code/framework/src/integrations/server/instance.h +++ b/code/framework/src/integrations/server/instance.h @@ -35,6 +35,7 @@ #include #include #include +#include namespace Framework::Integrations::Server { struct InstanceOptions { @@ -84,6 +85,11 @@ namespace Framework::Integrations::Server { // Invoked with the connecting player's GUID; the game creates and owns the player's entity. using OnPlayerConnectionCallback = fu2::function; + // Chat. The sender is resolved to its viewer entity's NetworkID; command lines ("/...") are + // pre-parsed into a command name and whitespace-separated arguments. + using OnChatMessageCallback = fu2::function; + using OnChatCommandCallback = fu2::function &args) const>; + class Instance : public Framework::Lifecycle { private: std::atomic _shuttingDown; @@ -121,6 +127,8 @@ namespace Framework::Integrations::Server { // callbacks OnPlayerConnectionCallback _onPlayerConnectCallback; OnPlayerConnectionCallback _onPlayerDisconnectCallback; + OnChatMessageCallback _onChatMessageCallback; + OnChatCommandCallback _onChatCommandCallback; public: Instance(); @@ -155,6 +163,17 @@ namespace Framework::Integrations::Server { _onPlayerDisconnectCallback = std::move(onPlayerDisconnectCallback); } + void SetOnChatMessageCallback(OnChatMessageCallback cb) { + _onChatMessageCallback = std::move(cb); + } + + void SetOnChatCommandCallback(OnChatCommandCallback cb) { + _onChatCommandCallback = std::move(cb); + } + + // Parse a received chat line and dispatch it to the chat callbacks above. + void HandleIncomingChat(uint64_t senderNetworkId, const std::string &text) const; + InstanceOptions &GetOptions() { return _opts; } diff --git a/code/framework/src/integrations/server/scripting/module.cpp b/code/framework/src/integrations/server/scripting/module.cpp index 5054389fb..a80b46747 100644 --- a/code/framework/src/integrations/server/scripting/module.cpp +++ b/code/framework/src/integrations/server/scripting/module.cpp @@ -11,6 +11,8 @@ #include #include +#include +#include #include #include #include @@ -137,6 +139,9 @@ namespace Framework::Integrations::Server::Scripting { // Register environment info Framework::Scripting::Environment::Register(isolate, context, coreObj, false); + // Register the chat API on the global object (Chat.sendToAll / Chat.sendToPlayer) + Framework::Scripting::Builtins::Chat::Register(isolate, global); + Logging::GetLogger(FRAMEWORK_INNER_SCRIPTING)->debug("Registered Framework JS bindings"); } diff --git a/code/framework/src/networking/rpc/chat_message.h b/code/framework/src/networking/rpc/chat_message.h new file mode 100644 index 000000000..039568374 --- /dev/null +++ b/code/framework/src/networking/rpc/chat_message.h @@ -0,0 +1,37 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "rpc.h" + +#include + +#include + +namespace Framework::Networking::RPC { + // A chat line. Client->server carries a player's outgoing text (the server resolves the sender + // from the connection); server->client carries a line to display. Lines starting with '/' are + // parsed into a command and arguments on the server. + struct ChatMessage { + static constexpr const char *kIdentifier = "Framework::ChatMessage"; + + std::string text; + + void Serialize(MafiaNet::BitStream *bs, bool write) { + if (write) { + bs->Write(MafiaNet::RakString(text.c_str())); + } + else { + MafiaNet::RakString raw; + bs->Read(raw); + text = raw.C_String(); + } + } + }; +} // namespace Framework::Networking::RPC diff --git a/code/framework/src/scripting/builtins/chat.h b/code/framework/src/scripting/builtins/chat.h new file mode 100644 index 000000000..7c6070a2a --- /dev/null +++ b/code/framework/src/scripting/builtins/chat.h @@ -0,0 +1,76 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "entity.h" + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include + +namespace Framework::Scripting::Builtins { + // Server-side chat API exposed to scripts as the global `Chat`. Reusable across mods: it sends + // the framework ChatMessage RPC and targets players through the base Entity handle (a mod's own + // Player/Human handle resolves to Entity via v8pp inheritance), so it needs no game-specific type. + class Chat { + public: + static void SendToAll(std::string message) { + Send(message, MafiaNet::UNASSIGNED_RAKNET_GUID, true); + } + + // The argument is any replicated entity handle; the message is delivered to that entity's + // owning connection (typically a player's avatar). + static void SendToPlayer(Entity *entity, std::string message) { + if (!entity) { + return; + } + auto *handle = entity->GetHandle(); + if (!handle) { + return; + } + Send(message, MafiaNet::RakNetGUID(handle->ownerGUID), false); + } + + static void Register(v8::Isolate *isolate, v8::Local global) { + if (!isolate || global.IsEmpty()) { + return; + } + v8pp::module chatModule(isolate); + chatModule.function("sendToAll", &Chat::SendToAll); + chatModule.function("sendToPlayer", &Chat::SendToPlayer); + + auto ctx = isolate->GetCurrentContext(); + global->Set(ctx, v8pp::to_v8(isolate, "Chat"), chatModule.new_instance()).Check(); + } + + private: + static void Send(const std::string &message, MafiaNet::RakNetGUID target, bool broadcast) { + auto *net = CoreModules::GetNetworkPeer(); + if (!net) { + return; + } + Networking::RPC::ChatMessage payload {message}; + if (broadcast) { + net->BroadcastRPC(payload); + } + else { + net->SendRPC(payload, target); + } + } + }; +} // namespace Framework::Scripting::Builtins From da0e344bcdcda157fcfd5a6604fb8374d56758e9 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 20:08:40 +0200 Subject: [PATCH 15/48] Networking: route RPC handlers through RPC4 context MafiaNet v0.6.0 adds a per-registration void* context to RegisterSlot, so handlers no longer need a file-static instance pointer to find their owner. RegisterRPC now takes a decoded-payload callable, keeps it alive for the peer's lifetime, and dispatches it via a single trampoline that recovers the handler from the slot context. The replication and chat handlers capture their instance directly; the g_manager, g_chatInstance and g_chatClientInstance globals are gone. --- .../src/integrations/client/instance.cpp | 20 ++------- .../src/integrations/server/instance.cpp | 44 +++++++------------ code/framework/src/networking/network_peer.h | 29 +++++++++--- .../replication/replication_manager.cpp | 24 +++++----- 4 files changed, 56 insertions(+), 61 deletions(-) diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 6208aa6dc..195525469 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -49,9 +49,8 @@ namespace Framework::Integrations::Client { namespace { // Handler for server-emitted scripting events; reaches the scripting engine through the // CoreModules singleton. - void OnEmitLuaEvent(MafiaNet::BitStream *userData, MafiaNet::Packet *packet) { + void OnEmitLuaEvent(const Shared::RPC::EmitLuaEvent &rpc, MafiaNet::Packet *packet) { (void)packet; - const auto rpc = Framework::Networking::RPC::Read(userData); const auto eventName = rpc.GetEventName(); if (eventName.empty()) { return; @@ -107,18 +106,6 @@ namespace Framework::Integrations::Client { resourceManager->GetEvents().EmitReserved(isolate, context, eventName, args); } - - // The single client Instance, reachable from the plain RPC chat handler. - Instance *g_chatClientInstance = nullptr; - - void OnChatMessageRPC(MafiaNet::BitStream *bs, MafiaNet::Packet *packet) { - (void)packet; - if (!g_chatClientInstance) { - return; - } - const auto payload = Framework::Networking::RPC::Read(bs); - g_chatClientInstance->DispatchReceivedChat(payload.text); - } } // namespace bool AssetDownloadFileProgress::OnFile(MafiaNet::FileListTransferCBInterface::OnFileStruct *onFileStruct) { @@ -454,8 +441,9 @@ namespace Framework::Integrations::Client { net->RegisterRPC(&OnEmitLuaEvent); // Chat lines from the server are forwarded to the mod's UI via the received callback. - g_chatClientInstance = this; - net->RegisterRPC(&OnChatMessageRPC); + net->RegisterRPC([this](const Framework::Networking::RPC::ChatMessage &payload, MafiaNet::Packet *) { + DispatchReceivedChat(payload.text); + }); Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Networking messages registered"); } diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 7d34973c7..790f64d5b 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -38,30 +38,6 @@ #include namespace Framework::Integrations::Server { - namespace { - // RPC4 dispatches to plain functions; the single server Instance is reachable here so the - // chat handler can resolve the sender and forward to the instance callbacks. - const Instance *g_chatInstance = nullptr; - - void OnChatMessageRPC(MafiaNet::BitStream *bs, MafiaNet::Packet *packet) { - if (!g_chatInstance) { - return; - } - const auto payload = Framework::Networking::RPC::Read(bs); - if (payload.text.empty()) { - return; - } - // Resolve the sender from its connection's viewer entity. - auto *engine = g_chatInstance->GetNetworkingEngine(); - auto *server = engine ? engine->GetNetworkServer() : nullptr; - auto *repl = server ? server->GetReplicationManager() : nullptr; - auto *sender = repl ? repl->GetViewer(packet->guid.g) : nullptr; - if (!sender) { - return; - } - g_chatInstance->HandleIncomingChat(sender->GetNetworkID(), payload.text); - } - } // namespace Instance::Instance(): _shuttingDown(false) { _networkingEngine = std::make_unique(); @@ -380,10 +356,22 @@ namespace Framework::Integrations::Server { (void)stub; }); - // Incoming chat from clients. Sender resolution + command parsing happen in the handler; - // the mod observes via SetOnChatMessageCallback / SetOnChatCommandCallback. - g_chatInstance = this; - net->RegisterRPC(&OnChatMessageRPC); + // Incoming chat from clients. Sender resolution + command parsing happen here; the mod + // observes via SetOnChatMessageCallback / SetOnChatCommandCallback. + net->RegisterRPC([this](const Framework::Networking::RPC::ChatMessage &payload, MafiaNet::Packet *packet) { + if (payload.text.empty()) { + return; + } + // Resolve the sender from its connection's viewer entity. + auto *engine = GetNetworkingEngine(); + auto *server = engine ? engine->GetNetworkServer() : nullptr; + auto *repl = server ? server->GetReplicationManager() : nullptr; + auto *sender = repl ? repl->GetViewer(packet->guid.g) : nullptr; + if (!sender) { + return; + } + HandleIncomingChat(sender->GetNetworkID(), payload.text); + }); // Note: Client-to-server events are handled through the JS Events system // The client can emit events via Framework.events.emitToServer() which uses diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index ef6c50e18..cc327872d 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -9,6 +9,7 @@ #pragma once #include "messages/messages.h" +#include "rpc/rpc.h" #include #include @@ -49,6 +50,18 @@ namespace Framework::Networking { // Owns the replicated entity world. The concrete peer's Init() attaches it and sets its role. std::unique_ptr _replicationManager; + // Decoded RPC handlers registered via RegisterRPC. Each is kept alive here for the peer's + // lifetime; its address is the context RPC4 hands back to DispatchRPC, so handlers can capture. + using RPCSlot = fu2::function; + std::vector> _rpcHandlers; + + static void DispatchRPC(MafiaNet::BitStream *bs, MafiaNet::Packet *packet, void *context) { + auto *slot = static_cast(context); + if (slot && *slot) { + (*slot)(bs, packet); + } + } + public: NetworkPeer(); ~NetworkPeer(); @@ -85,12 +98,18 @@ namespace Framework::Networking { }; } - // Register a handler for RPC payload type T (see networking/rpc/rpc.h). The handler is a - // plain function; decode the payload inside it with RPC::Read. Registered as an RPC4 slot, - // matching the Signal() send below. + // Register a handler for RPC payload type T (see networking/rpc/rpc.h). The handler receives + // the already-decoded payload and the raw packet, and may capture (e.g. the owning instance). + // The callable is stored for the peer's lifetime and reached through RPC4's per-slot context, + // so no file-static handler pointers are needed. Matches the Signal() send below. template - void RegisterRPC(void (*handler)(MafiaNet::BitStream *, MafiaNet::Packet *)) { - _rpc.RegisterSlot(T::kIdentifier, handler, 0); + void RegisterRPC(fu2::function handler) { + auto slot = std::make_unique([cb = std::move(handler)](MafiaNet::BitStream *bs, MafiaNet::Packet *packet) { + cb(RPC::Read(bs), packet); + }); + void *context = slot.get(); + _rpcHandlers.push_back(std::move(slot)); + _rpc.RegisterSlot(T::kIdentifier, &NetworkPeer::DispatchRPC, context, 0); } // Send an RPC payload to every connected system. diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index f82d2f319..2fd49ec93 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -29,17 +29,17 @@ namespace Framework::Networking::Replication { // Built-in server->owner ownership grant (see NetworkEntity::SetOwner). Wire: id, ownerGUID. constexpr const char *kSetOwnerId = "Framework::SetOwner"; - // The local manager, so the (non-capturing) RPC handler can resolve entities. One per peer. - ReplicationManager *g_manager = nullptr; - - void OnForceState(MafiaNet::BitStream *bs, MafiaNet::Packet *) { - if (!g_manager) { + // RPC4 hands each slot its registration context back; we pass the owning manager so the + // handler can resolve entities without a global. + void OnForceState(MafiaNet::BitStream *bs, MafiaNet::Packet *, void *context) { + auto *manager = static_cast(context); + if (!manager) { return; } MafiaNet::NetworkID networkId; bs->Read(networkId); - auto *entity = g_manager->GetEntityByNetworkID(networkId); + auto *entity = manager->GetEntityByNetworkID(networkId); if (!entity) { return; } @@ -47,8 +47,9 @@ namespace Framework::Networking::Replication { entity->OnStateForced(); } - void OnSetOwner(MafiaNet::BitStream *bs, MafiaNet::Packet *) { - if (!g_manager) { + void OnSetOwner(MafiaNet::BitStream *bs, MafiaNet::Packet *, void *context) { + auto *manager = static_cast(context); + if (!manager) { return; } MafiaNet::NetworkID networkId; @@ -56,7 +57,7 @@ namespace Framework::Networking::Replication { bs->Read(networkId); bs->Read(ownerGUID); - if (auto *entity = g_manager->GetEntityByNetworkID(networkId)) { + if (auto *entity = manager->GetEntityByNetworkID(networkId)) { entity->ownerGUID = ownerGUID; } } @@ -79,10 +80,9 @@ namespace Framework::Networking::Replication { peer->AttachPlugin(this); // The owning client applies forced state pushed by the server (teleports, engine, ...). - g_manager = this; if (_rpc) { - _rpc->RegisterSlot(kForceStateId, &OnForceState, 0); - _rpc->RegisterSlot(kSetOwnerId, &OnSetOwner, 0); + _rpc->RegisterSlot(kForceStateId, &OnForceState, this, 0); + _rpc->RegisterSlot(kSetOwnerId, &OnSetOwner, this, 0); } } From 40e88c9bcf366209724ab915412028cdfe8fddd5 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 20:18:33 +0200 Subject: [PATCH 16/48] Networking: use native broadcast exclusion, drop dead const_cast SignalExcept iterated the connection list to skip the sender; RPC4 Signal already treats the system identifier as the peer to exclude when broadcasting, so one call does it. Also drops a const_cast on the already-const GetReplicaCount in ForEachEntity (the one on the non-const GetReplicaAtIndex stays until MafiaNet const-qualifies it). --- code/framework/src/networking/network_server.cpp | 15 +++------------ .../replication/replication_manager.cpp | 4 +++- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index 0bdb1dca4..817e21c5a 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -85,17 +85,8 @@ namespace Framework::Networking { return _peer->GetAveragePing(guid); } void NetworkServer::SignalExcept(const char *identifier, MafiaNet::BitStream &bs, MafiaNet::RakNetGUID excludeGUID, PacketPriority priority, PacketReliability reliability) { - auto *replication = GetReplicationManager(); - if (!replication) { - return; - } - const unsigned count = replication->GetConnectionCount(); - for (unsigned i = 0; i < count; ++i) { - auto *connection = replication->GetConnectionAtIndex(i); - if (!connection || connection->GetRakNetGUID().g == excludeGUID.g) { - continue; - } - _rpc.Signal(identifier, &bs, priority, reliability, 0, connection->GetRakNetGUID(), false, false); - } + // When broadcasting, the system identifier is the peer to exclude, so a single Signal reaches + // everyone but the sender. + _rpc.Signal(identifier, &bs, priority, reliability, 0, excludeGUID, true, false); } } // namespace Framework::Networking diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index 2fd49ec93..856b131d2 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -150,8 +150,10 @@ namespace Framework::Networking::Replication { } void ReplicationManager::ForEachEntity(const fu2::function &fn) const { - const unsigned count = const_cast(this)->GetReplicaCount(); + const unsigned count = GetReplicaCount(); for (unsigned i = 0; i < count; ++i) { + // GetReplicaAtIndex is non-const in ReplicaManager3 (unlike GetReplicaCount), so the + // const_cast is unavoidable here until that is fixed upstream. auto *entity = static_cast(const_cast(this)->GetReplicaAtIndex(i)); if (entity) { fn(entity); From 843a92937bf36969f9f16d8d631133ecf059e99d Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 20:53:09 +0200 Subject: [PATCH 17/48] Networking: drop const_cast on GetReplicaAtIndex MafiaNet v0.6.1 const-qualifies ReplicaManager3::GetReplicaAtIndex, so ForEachEntity can iterate replicas without casting away const. --- .../src/networking/replication/replication_manager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index 856b131d2..046f0cfb4 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -152,9 +152,7 @@ namespace Framework::Networking::Replication { void ReplicationManager::ForEachEntity(const fu2::function &fn) const { const unsigned count = GetReplicaCount(); for (unsigned i = 0; i < count; ++i) { - // GetReplicaAtIndex is non-const in ReplicaManager3 (unlike GetReplicaCount), so the - // const_cast is unavoidable here until that is fixed upstream. - auto *entity = static_cast(const_cast(this)->GetReplicaAtIndex(i)); + auto *entity = static_cast(GetReplicaAtIndex(i)); if (entity) { fn(entity); } From 1a7955ef441d397db1f7466af36debbfa6aba3d5 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 22:36:39 +0200 Subject: [PATCH 18/48] Networking: serialize ChatMessage via native std::string MafiaNet's BitStream has first-class std::string Write/Read overloads using the same length-prefixed wire format as RakString, so the manual write/read branch collapses to a single symmetric Serialize call. Wire format is unchanged. --- code/framework/src/networking/rpc/chat_message.h | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/code/framework/src/networking/rpc/chat_message.h b/code/framework/src/networking/rpc/chat_message.h index 039568374..a7c592b93 100644 --- a/code/framework/src/networking/rpc/chat_message.h +++ b/code/framework/src/networking/rpc/chat_message.h @@ -10,8 +10,6 @@ #include "rpc.h" -#include - #include namespace Framework::Networking::RPC { @@ -24,14 +22,9 @@ namespace Framework::Networking::RPC { std::string text; void Serialize(MafiaNet::BitStream *bs, bool write) { - if (write) { - bs->Write(MafiaNet::RakString(text.c_str())); - } - else { - MafiaNet::RakString raw; - bs->Read(raw); - text = raw.C_String(); - } + // std::string is a first-class wire type in MafiaNet (length-prefixed, same format as + // RakString), so this stays a single symmetric line. + bs->Serialize(write, text); } }; } // namespace Framework::Networking::RPC From fb22bfded095617eb56649e60ee741a52827de4f Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Tue, 2 Jun 2026 23:05:10 +0200 Subject: [PATCH 19/48] Networking: Remove unused properties --- .../src/networking/replication/network_entity.cpp | 8 -------- .../src/networking/replication/network_entity.h | 9 +++------ code/framework/src/networking/rpc/chat_message.h | 2 -- 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index c8ad74eb9..06a2ce729 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -36,10 +36,6 @@ namespace Framework::Networking::Replication { bs->Write(velocity); bs->Write(rotation); bs->Write(virtualWorld); - bs->Write(alwaysVisible); - bs->Write(isVisible); - bs->Write(isViewer); - bs->Write(streamRange); bs->Write(modelHash); bs->Write(scale); bs->Write(MafiaNet::RakString(modelName.c_str())); @@ -57,10 +53,6 @@ namespace Framework::Networking::Replication { bs->Read(velocity); bs->Read(rotation); bs->Read(virtualWorld); - bs->Read(alwaysVisible); - bs->Read(isVisible); - bs->Read(isViewer); - bs->Read(streamRange); bs->Read(modelHash); bs->Read(scale); MafiaNet::RakString name; diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 5338cfea5..31b8b087d 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -45,16 +45,13 @@ namespace Framework::Networking::Replication { uint64_t modelHash = 0; std::string modelName; - // --- Authority / streaming metadata (server-authoritative) --- + // --- Server-only streaming metadata (not replicated) --- uint64_t ownerGUID = 0xFFFFFFFFFFFFFFFF; // UNASSIGNED_RAKNET_GUID.g int virtualWorld = 0; bool alwaysVisible = false; bool isVisible = true; - - // A viewer is an entity a connection "looks through" (a player's avatar). Its position and - // streamRange drive that connection's interest set. - bool isViewer = false; - float streamRange = 100.0f; + bool isViewer = false; + float streamRange = 100.0f; // Set by the EntityFactory on construction; identifies the concrete type over the wire. uint32_t typeId = 0; diff --git a/code/framework/src/networking/rpc/chat_message.h b/code/framework/src/networking/rpc/chat_message.h index a7c592b93..677fc034e 100644 --- a/code/framework/src/networking/rpc/chat_message.h +++ b/code/framework/src/networking/rpc/chat_message.h @@ -22,8 +22,6 @@ namespace Framework::Networking::RPC { std::string text; void Serialize(MafiaNet::BitStream *bs, bool write) { - // std::string is a first-class wire type in MafiaNet (length-prefixed, same format as - // RakString), so this stays a single symmetric line. bs->Serialize(write, text); } }; From 250a232bb57d1b37847a9db4ad5db586d376c6f0 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 12:00:59 +0200 Subject: [PATCH 20/48] Networking: adopt native VirtualWorld dimension scoping Derive NetworkEntity from VirtualWorldReplica3 instead of Replica3 so the dimension is owned by the base (Get/SetVirtualWorld) rather than a redundant field. The two topology query overrides become the base's QueryConstructionWithinWorld / QuerySerializationWithinWorld hooks. Streaming now filters with VirtualWorldsCanSee, gaining the VIRTUAL_WORLD_GLOBAL "visible everywhere" sentinel the old equality check could not express. QueryReplicaList syncs the connection's world to its avatar so the construction filter and the base serialize-path filter agree. virtualWorld is dropped from the construction snapshot as server-only streaming metadata. --- .../src/networking/replication/network_entity.cpp | 7 ++----- .../src/networking/replication/network_entity.h | 15 ++++++++++----- .../replication/replication_connection.cpp | 8 ++++++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 06a2ce729..57a073e44 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -35,7 +35,6 @@ namespace Framework::Networking::Replication { bs->Write(position); bs->Write(velocity); bs->Write(rotation); - bs->Write(virtualWorld); bs->Write(modelHash); bs->Write(scale); bs->Write(MafiaNet::RakString(modelName.c_str())); @@ -52,7 +51,6 @@ namespace Framework::Networking::Replication { bs->Read(position); bs->Read(velocity); bs->Read(rotation); - bs->Read(virtualWorld); bs->Read(modelHash); bs->Read(scale); MafiaNet::RakString name; @@ -157,8 +155,7 @@ namespace Framework::Networking::Replication { _vds.EndDeserialize(&ctx); } - MafiaNet::RM3ConstructionState NetworkEntity::QueryConstruction(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *) { - // Unused under QUERY_CONNECTION_FOR_REPLICA_LIST; required by the interface. + MafiaNet::RM3ConstructionState NetworkEntity::QueryConstructionWithinWorld(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *) { return QueryConstruction_ServerConstruction(destinationConnection, IsServerPeer()); } @@ -166,7 +163,7 @@ namespace Framework::Networking::Replication { return QueryRemoteConstruction_ServerConstruction(sourceConnection, IsServerPeer()); } - MafiaNet::RM3QuerySerializationResult NetworkEntity::QuerySerialization(MafiaNet::Connection_RM3 *destinationConnection) { + MafiaNet::RM3QuerySerializationResult NetworkEntity::QuerySerializationWithinWorld(MafiaNet::Connection_RM3 *destinationConnection) { if (IsServerPeer()) { // Relay to everyone except the authoritative owner (no echo back to it). if (destinationConnection->GetRakNetGUID().g == ownerGUID) { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 31b8b087d..89cfc4375 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -32,7 +33,7 @@ namespace Framework::Networking::Replication { // Authority: QuerySerialization is keyed on ownerGUID — the server serializes to everyone except // the owner, the owning client serializes upstream, and Deserialize accepts state only from the // current owner so a stale owner cannot write during a handover. - class NetworkEntity : public MafiaNet::Replica3 { + class NetworkEntity : public MafiaNet::VirtualWorldReplica3 { public: NetworkEntity() = default; ~NetworkEntity() override = default; @@ -45,9 +46,11 @@ namespace Framework::Networking::Replication { uint64_t modelHash = 0; std::string modelName; - // --- Server-only streaming metadata (not replicated) --- + // --- Authority (replicated) --- uint64_t ownerGUID = 0xFFFFFFFFFFFFFFFF; // UNASSIGNED_RAKNET_GUID.g - int virtualWorld = 0; + + // --- Server-only streaming metadata (not replicated) --- + // Dimension lives in the VirtualWorldReplica3 base (Get/SetVirtualWorld). bool alwaysVisible = false; bool isVisible = true; bool isViewer = false; @@ -110,11 +113,13 @@ namespace Framework::Networking::Replication { MafiaNet::RM3SerializationResult Serialize(MafiaNet::SerializeParameters *serializeParameters) override; void Deserialize(MafiaNet::DeserializeParameters *deserializeParameters) override; - MafiaNet::RM3ConstructionState QueryConstruction(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *replicaManager3) override; bool QueryRemoteConstruction(MafiaNet::Connection_RM3 *sourceConnection) override; - MafiaNet::RM3QuerySerializationResult QuerySerialization(MafiaNet::Connection_RM3 *destinationConnection) override; MafiaNet::RM3ActionOnPopConnection QueryActionOnPopConnection(MafiaNet::Connection_RM3 *droppedConnection) const override; + // VirtualWorldReplica3 filters by dimension, then delegates the topology decision to these. + MafiaNet::RM3ConstructionState QueryConstructionWithinWorld(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *replicaManager3) override; + MafiaNet::RM3QuerySerializationResult QuerySerializationWithinWorld(MafiaNet::Connection_RM3 *destinationConnection) override; + private: // True if we are the server peer (read from the owning ReplicationManager). bool IsServerPeer() const; diff --git a/code/framework/src/networking/replication/replication_connection.cpp b/code/framework/src/networking/replication/replication_connection.cpp index c60d76c5a..96553ffd4 100644 --- a/code/framework/src/networking/replication/replication_connection.cpp +++ b/code/framework/src/networking/replication/replication_connection.cpp @@ -39,6 +39,10 @@ namespace Framework::Networking::Replication { return; } + // The observer perceives its avatar's dimension; keep them in sync so the base + // QuerySerialization filter and the construction check below agree. + SetVirtualWorld(viewer->GetVirtualWorld()); + // Spatial interest set around the viewer. std::vector inRange; _manager->QueryRadius(viewer->position, viewer->streamRange, inRange); @@ -46,8 +50,8 @@ namespace Framework::Networking::Replication { _manager->ForEachEntity([&](NetworkEntity *entity) { // The owner DOES receive its own entity (so it has the replica to serialize upstream and // to recognize it as the local player). The server simply withholds serialize *updates* - // to the owner via NetworkEntity::QuerySerialization — construction still flows. - const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || (entity->virtualWorld == viewer->virtualWorld && std::find(inRange.begin(), inRange.end(), entity) != inRange.end())); + // to the owner via NetworkEntity::QuerySerializationWithinWorld — construction still flows. + const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && std::find(inRange.begin(), inRange.end(), entity) != inRange.end())); const bool constructed = HasReplicaConstructed(entity); if (visible && !constructed) { From 31baea21de514e94ac82ce37cb0193004c0d1104 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 12:53:54 +0200 Subject: [PATCH 21/48] Framework: remove flecs from the core Entity replication is fully native (ReplicaManager3 / NetworkEntity) and the scripting Entity builtin wraps NetworkEntity by id, so the flecs world only backed the resource tree -- which duplicated ResourceManager's own std::map registry. Drop flecs entirely from the framework: - Engine: remove the flecs::world, GetWorld(), and the progress() tick; it is now purely the replication facade. - Resource/ResourceManager: drop _rootEntity, OwnedResource, GetRootEntity, DestroyChildEntities, child_of and the flecs::world* ctor params. The existing std::map registry is the tree. - Delete the empty Base/Mod modules, the dead logging/formatters.h, the module import calls and server InitModules(); remove the dead _weatherManager member and stale flecs includes. - Drop flecs_static from the framework link. - Move the resource tests off the flecs::world fixture. Breaking change: Engine no longer exposes an ECS world. MafiaMP is unaffected; other mods migrate later. --- code/framework/CMakeLists.txt | 2 +- .../src/integrations/client/instance.cpp | 6 - .../src/integrations/client/instance.h | 2 - .../integrations/client/scripting/module.cpp | 2 +- .../src/integrations/server/instance.cpp | 13 -- .../src/integrations/server/instance.h | 6 - .../integrations/server/scripting/module.cpp | 2 +- .../src/integrations/shared/modules/mod.hpp | 20 ---- code/framework/src/logging/formatters.h | 48 -------- .../messages/client_initialise_player.h | 2 - .../src/networking/messages/client_kick.h | 2 - .../src/scripting/resource/resource.cpp | 29 +---- .../src/scripting/resource/resource.h | 16 +-- .../scripting/resource/resource_manager.cpp | 11 +- .../src/scripting/resource/resource_manager.h | 8 +- code/framework/src/world/engine.cpp | 10 +- code/framework/src/world/engine.h | 19 +-- code/framework/src/world/modules/base.hpp | 21 ---- code/tests/modules/js_features_ut.h | 21 ++-- code/tests/modules/resource_manager_ut.h | 112 +++--------------- code/tests/modules/resource_ut.h | 74 +++--------- code/tests/modules/timer_context_ut.h | 9 +- 22 files changed, 56 insertions(+), 379 deletions(-) delete mode 100644 code/framework/src/integrations/shared/modules/mod.hpp delete mode 100644 code/framework/src/logging/formatters.h delete mode 100644 code/framework/src/world/modules/base.hpp diff --git a/code/framework/CMakeLists.txt b/code/framework/CMakeLists.txt index b854da288..2e0fa4924 100644 --- a/code/framework/CMakeLists.txt +++ b/code/framework/CMakeLists.txt @@ -206,7 +206,7 @@ macro(link_shared_deps target_name) endif() # Global libraries (v8/v8pp excluded - linked explicitly to scripting targets only) - target_link_libraries(${target_name} MafiaNet glm spdlog cppfs nlohmann_json Sentry httplib OpenSSL::SSL OpenSSL::Crypto Curl flecs_static semver Hash ftl) + target_link_libraries(${target_name} MafiaNet glm spdlog cppfs nlohmann_json Sentry httplib OpenSSL::SSL OpenSSL::Crypto Curl semver Hash ftl) # Required libraries for windows if(WIN32) diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 195525469..d8d87297c 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -21,8 +21,6 @@ #include "networking/rpc/rpc.h" #include "networking/rpc/chat_message.h" -#include "../shared/modules/mod.hpp" - #include "scripting/resource/resource_manager.h" #include "scripting/builtins/events.h" @@ -185,10 +183,6 @@ namespace Framework::Integrations::Client { return ClientError::CLIENT_ENGINES_ERROR; } CoreModules::SetWorldEngine(_worldEngine.get()); - - _worldEngine->GetWorld()->import (); - - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->info("Core ecs modules have been imported!"); } CoreModules::SetWebManager(_webManager.get()); diff --git a/code/framework/src/integrations/client/instance.h b/code/framework/src/integrations/client/instance.h index f51b67cb8..8d85b0eee 100644 --- a/code/framework/src/integrations/client/instance.h +++ b/code/framework/src/integrations/client/instance.h @@ -33,8 +33,6 @@ #include -#include - namespace Framework::Integrations::Client { // Fired once the connection handshake completes, with the server tick rate. using NetworkConnectionFinalizedCallback = fu2::function; diff --git a/code/framework/src/integrations/client/scripting/module.cpp b/code/framework/src/integrations/client/scripting/module.cpp index 19d0e5e78..084132293 100644 --- a/code/framework/src/integrations/client/scripting/module.cpp +++ b/code/framework/src/integrations/client/scripting/module.cpp @@ -89,7 +89,7 @@ namespace Framework::Integrations::Client::Scripting { config.cascadeStopDependents = true; _resourceManager = std::make_unique( - _engine.get(), _world->GetWorld(), config); + _engine.get(), config); // Register Framework SDK bindings for the new ResourceManager RegisterFrameworkBindings(); diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 790f64d5b..98ac38618 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -30,7 +30,6 @@ #include "utils/command_processor.h" #include "utils/path.h" #include "utils/version.h" -#include "../shared/modules/mod.hpp" #include "cxxopts.hpp" #include @@ -134,9 +133,6 @@ namespace Framework::Integrations::Server { // Register the default endpoints InitEndpoints(); - // Register built in modules - InitModules(); - // Initialize default messages InitNetworkingMessages(); @@ -206,15 +202,6 @@ namespace Framework::Integrations::Server { Logging::GetLogger(FRAMEWORK_INNER_HTTP)->debug("All core endpoints have been registered!"); } - void Instance::InitModules() const { - if (_worldEngine) { - const auto world = _worldEngine->GetWorld(); - - world->import (); - } - - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Core ecs modules have been imported!"); - } bool Instance::LoadConfigFromJSON() { const auto configHandle = cppfs::fs::open(_opts.modConfigFile); diff --git a/code/framework/src/integrations/server/instance.h b/code/framework/src/integrations/server/instance.h index fad00f8af..0dbe42f55 100644 --- a/code/framework/src/integrations/server/instance.h +++ b/code/framework/src/integrations/server/instance.h @@ -21,8 +21,6 @@ #include "utils/command_processor.h" #include "world/server.h" -#include - #include "world/types/player.hpp" #include "world/types/streaming.hpp" @@ -107,7 +105,6 @@ namespace Framework::Integrations::Server { std::unique_ptr _commandProcessor; void InitEndpoints(); - void InitModules() const; void InitNetworkingMessages() const; void InitAssetStreamer(); void InitCommandListener(); @@ -117,9 +114,6 @@ namespace Framework::Integrations::Server { // Command handlers void HandleCommand(std::string_view command); - // managers - flecs::entity _weatherManager; - // entity factories std::unique_ptr _playerFactory; std::unique_ptr _streamingFactory; diff --git a/code/framework/src/integrations/server/scripting/module.cpp b/code/framework/src/integrations/server/scripting/module.cpp index a80b46747..fbe34226e 100644 --- a/code/framework/src/integrations/server/scripting/module.cpp +++ b/code/framework/src/integrations/server/scripting/module.cpp @@ -60,7 +60,7 @@ namespace Framework::Integrations::Server::Scripting { config.cascadeStopDependents = true; _resourceManager = std::make_unique( - _nodeEngine.get(), _world->GetWorld(), config); + _nodeEngine.get(), config); // Register Framework SDK bindings RegisterFrameworkBindings(); diff --git a/code/framework/src/integrations/shared/modules/mod.hpp b/code/framework/src/integrations/shared/modules/mod.hpp deleted file mode 100644 index 3aee5e26a..000000000 --- a/code/framework/src/integrations/shared/modules/mod.hpp +++ /dev/null @@ -1,20 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include -#include - -namespace Framework::Integrations::Shared::Modules { - struct Mod { - Mod(flecs::world &world) { - world.module(); - } - }; -} // namespace Framework::Integrations::Shared::Modules diff --git a/code/framework/src/logging/formatters.h b/code/framework/src/logging/formatters.h deleted file mode 100644 index 8fee9a098..000000000 --- a/code/framework/src/logging/formatters.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2024, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "src/world/modules/base.hpp" -#include - -template <> -struct fmt::formatter { - constexpr auto parse(format_parse_context &ctx) { - return ctx.begin(); - } - - template - auto format(const glm::vec3 &t, FormatContext &ctx) { - return fmt::format_to(ctx.out(), "{:.2f}, {:.2f}, {:.2f}", t.x, t.y, t.z); - } -}; - -template <> -struct fmt::formatter { - constexpr auto parse(format_parse_context &ctx) { - return ctx.begin(); - } - - template - auto format(const glm::quat &t, FormatContext &ctx) { - return fmt::format_to(ctx.out(), "{:.2f}, {:.2f}, {:.2f}, {:.2f}", t.x, t.y, t.z, t.w); - } -}; - -template <> -struct fmt::formatter { - constexpr auto parse(format_parse_context &ctx) { - return ctx.begin(); - } - - template - auto format(const Framework::World::Modules::Base::Transform &t, FormatContext &ctx) { - return fmt::format_to(ctx.out(), "Transform(pos=({}), vel=({}), rot=({}), genID={})", t.pos, t.vel, t.rot, t.GetGeneration()); - } -}; diff --git a/code/framework/src/networking/messages/client_initialise_player.h b/code/framework/src/networking/messages/client_initialise_player.h index 47f11b2b8..77526f9da 100644 --- a/code/framework/src/networking/messages/client_initialise_player.h +++ b/code/framework/src/networking/messages/client_initialise_player.h @@ -12,8 +12,6 @@ #include -#include - namespace Framework::Networking::Messages { class ClientInitPlayer final: public IMessage { public: diff --git a/code/framework/src/networking/messages/client_kick.h b/code/framework/src/networking/messages/client_kick.h index 33c51daac..35f8e5a16 100644 --- a/code/framework/src/networking/messages/client_kick.h +++ b/code/framework/src/networking/messages/client_kick.h @@ -12,8 +12,6 @@ #include -#include - namespace Framework::Networking::Messages { class ClientKick final: public IMessage { private: diff --git a/code/framework/src/scripting/resource/resource.cpp b/code/framework/src/scripting/resource/resource.cpp index b1573ae01..b3d08d1e9 100644 --- a/code/framework/src/scripting/resource/resource.cpp +++ b/code/framework/src/scripting/resource/resource.cpp @@ -7,7 +7,6 @@ */ #include "resource.h" -#include "world/engine.h" #include namespace Framework::Scripting { @@ -24,7 +23,7 @@ namespace Framework::Scripting { } } - Resource::Resource(const std::string &path, flecs::world* world) + Resource::Resource(const std::string &path) : _path(path) , _stateTimestamp(std::chrono::system_clock::now()) { // Try to load the manifest @@ -35,16 +34,9 @@ namespace Framework::Scripting { _errorMessage = _manifest.GetError(); _state = ResourceState::Error; } - - _rootEntity = world->entity(_manifest.GetName().c_str()); - _rootEntity.set({this}); } Resource::~Resource() { - if (_rootEntity.is_valid()) { - _rootEntity.destruct(); - } - ClearExports(); } @@ -57,7 +49,6 @@ namespace Framework::Scripting { , _stateTimestamp(other._stateTimestamp) , _loadTimestamp(other._loadTimestamp) , _isolate(other._isolate) - , _rootEntity(other._rootEntity) , _exports(std::move(other._exports)) , _restartAttempts(std::move(other._restartAttempts)) { other._isolate = nullptr; @@ -75,12 +66,10 @@ namespace Framework::Scripting { _stateTimestamp = other._stateTimestamp; _loadTimestamp = other._loadTimestamp; _isolate = other._isolate; - _rootEntity = other._rootEntity; _exports = std::move(other._exports); _restartAttempts = std::move(other._restartAttempts); other._isolate = nullptr; - other._rootEntity = {}; } return *this; } @@ -283,18 +272,6 @@ namespace Framework::Scripting { return it->second.Get(_isolate); } - void Resource::DestroyChildEntities() { - if (!_rootEntity.is_valid()) { - return; - } - - _rootEntity.world().defer_begin(); - _rootEntity.children([&](flecs::entity child) { - child.destruct(); - }); - _rootEntity.world().defer_end(); - } - bool Resource::TransitionTo(ResourceState newState) { if (!IsValidTransition(_state, newState)) { return false; @@ -303,10 +280,6 @@ namespace Framework::Scripting { _state = newState; _stateTimestamp = std::chrono::system_clock::now(); - if (newState == ResourceState::Stopped || newState == ResourceState::Error) { - DestroyChildEntities(); - } - if (newState != ResourceState::Error) { ClearError(); } diff --git a/code/framework/src/scripting/resource/resource.h b/code/framework/src/scripting/resource/resource.h index 6815b9424..9a8e0201a 100644 --- a/code/framework/src/scripting/resource/resource.h +++ b/code/framework/src/scripting/resource/resource.h @@ -11,7 +11,6 @@ #include "package_manifest.h" #include -#include #include #include @@ -57,10 +56,6 @@ namespace Framework::Scripting { class Resource; - struct OwnedResource { - Resource *value; - }; - /** * Convert ResourceState to string representation. */ @@ -78,7 +73,7 @@ namespace Framework::Scripting { * Create a resource from a directory path. * @param path Path to the resource directory (containing package.json) */ - explicit Resource(const std::string &path, flecs::world* world); + explicit Resource(const std::string &path); ~Resource(); @@ -206,9 +201,6 @@ namespace Framework::Scripting { v8::Isolate *GetIsolate() const { return _isolate; } void SetIsolate(v8::Isolate *isolate) { _isolate = isolate; } - // Flecs world integration - flecs::entity GetRootEntity() const { return _rootEntity; } - // State transitions (called by ResourceManager) friend class ResourceManager; @@ -225,9 +217,6 @@ namespace Framework::Scripting { // Get restart attempt count without locking int GetRestartAttemptCountUnlocked() const; - // Remove all child entities of the flecs root entity - void DestroyChildEntities(); - // Path to resource directory std::string _path; @@ -244,9 +233,6 @@ namespace Framework::Scripting { // V8 isolate for this resource (set by manager) v8::Isolate *_isolate = nullptr; - // Flecs root entity - flecs::entity _rootEntity; - // Exports registered by this resource std::map, std::less<>> _exports; mutable std::mutex _exportsMutex; diff --git a/code/framework/src/scripting/resource/resource_manager.cpp b/code/framework/src/scripting/resource/resource_manager.cpp index 2a7ec9418..08599a61b 100644 --- a/code/framework/src/scripting/resource/resource_manager.cpp +++ b/code/framework/src/scripting/resource/resource_manager.cpp @@ -42,15 +42,12 @@ namespace Framework::Scripting { } } // anonymous namespace - ResourceManager::ResourceManager(Engine *jsEngine, flecs::world *world, const ResourceManagerConfig &config) + ResourceManager::ResourceManager(Engine *jsEngine, const ResourceManagerConfig &config) : _config(config) - , _world(world) , _jsEngine(jsEngine) { if (_jsEngine) { _jsEngine->SetResourceManager(this); } - - _rootEntity = world->entity("Resources"); } ResourceManager::~ResourceManager() { @@ -58,9 +55,6 @@ namespace Framework::Scripting { if (_jsEngine) { _jsEngine->SetResourceManager(nullptr); } - if (_rootEntity.is_valid()) { - _rootEntity.destruct(); - } } const ResourceManagerConfig &ResourceManager::GetConfig() const { @@ -103,7 +97,7 @@ namespace Framework::Scripting { } bool ResourceManager::DiscoverResource(const std::string &path) { - auto resource = std::make_unique(path, _world); + auto resource = std::make_unique(path); if (!resource->IsManifestValid()) { Logging::GetLogger(FRAMEWORK_INNER_SCRIPTING)->warn("Invalid package.json in {}: {}", path, resource->GetErrorMessage()); @@ -120,7 +114,6 @@ namespace Framework::Scripting { return false; } - resource->GetRootEntity().child_of(_rootEntity); _resources[name] = std::move(resource); } diff --git a/code/framework/src/scripting/resource/resource_manager.h b/code/framework/src/scripting/resource/resource_manager.h index dd6ed7d72..1bce51c8f 100644 --- a/code/framework/src/scripting/resource/resource_manager.h +++ b/code/framework/src/scripting/resource/resource_manager.h @@ -73,7 +73,7 @@ namespace Framework::Scripting { */ class ResourceManager final { public: - explicit ResourceManager(Engine *jsEngine, flecs::world *world, const ResourceManagerConfig &config = {}); + explicit ResourceManager(Engine *jsEngine, const ResourceManagerConfig &config = {}); ~ResourceManager(); // Non-copyable @@ -342,9 +342,6 @@ namespace Framework::Scripting { // JS engine (not owned) Engine *_jsEngine = nullptr; - // Flecs world (not owned) - flecs::world *_world = nullptr; - // Resource registry std::map, std::less<>> _resources; mutable std::mutex _resourcesMutex; @@ -375,9 +372,6 @@ namespace Framework::Scripting { // Events instance owned by this manager Events _events; - - // Root entity for all resources - flecs::entity _rootEntity; }; } // namespace Framework::Scripting diff --git a/code/framework/src/world/engine.cpp b/code/framework/src/world/engine.cpp index be12d8c1a..67058d024 100644 --- a/code/framework/src/world/engine.cpp +++ b/code/framework/src/world/engine.cpp @@ -11,9 +11,6 @@ namespace Framework::World { WorldError Engine::Init(Networking::NetworkPeer *networkPeer) { _networkPeer = networkPeer; - // flecs world backing the scripting resource tree. - _world = std::make_unique(); - _initialized = true; return WorldError::WORLD_NONE; } @@ -22,12 +19,7 @@ namespace Framework::World { Lifecycle::Shutdown(); } - void Engine::Update() { - // Advance the scripting resource tree; entity replication is driven by the network peer. - if (_world) { - _world->progress(); - } - } + void Engine::Update() {} Replication::NetworkEntity *Engine::GetEntityByNetworkID(MafiaNet::NetworkID networkId) const { auto *replication = GetReplication(); diff --git a/code/framework/src/world/engine.h b/code/framework/src/world/engine.h index e877e7179..12c6ef65b 100644 --- a/code/framework/src/world/engine.h +++ b/code/framework/src/world/engine.h @@ -16,26 +16,14 @@ #include "networking/replication/network_entity.h" #include "networking/replication/replication_manager.h" -#include -#include - #include "core_modules.h" -namespace Framework::Scripting { - class ResourceManager; -} - namespace Framework::World { namespace Replication = Framework::Networking::Replication; - // Facade over the ReplicationManager, which owns the networked entities. The flecs world here - // backs the scripting resource tree only. + // Facade over the ReplicationManager, which owns the networked entities. class Engine : public Lifecycle { - private: - friend class Framework::Scripting::ResourceManager; - protected: - std::unique_ptr _world; // resource tree only Networking::NetworkPeer *_networkPeer = nullptr; public: @@ -53,10 +41,5 @@ namespace Framework::World { static bool IsEntityOwner(Replication::NetworkEntity *entity, uint64_t guid) { return entity && entity->ownerGUID == guid; } - - // flecs world backing the scripting resource tree. - flecs::world *GetWorld() const { - return _world.get(); - } }; } // namespace Framework::World diff --git a/code/framework/src/world/modules/base.hpp b/code/framework/src/world/modules/base.hpp deleted file mode 100644 index e87f618ac..000000000 --- a/code/framework/src/world/modules/base.hpp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include - -// The module the scripting resource world imports. Networked entities live in -// networking/replication/ (Replication::NetworkEntity), so this registers no components. -namespace Framework::World::Modules { - struct Base { - explicit Base(flecs::world &world) { - world.module(); - } - }; -} // namespace Framework::World::Modules diff --git a/code/tests/modules/js_features_ut.h b/code/tests/modules/js_features_ut.h index 58ef70ef1..f755384f0 100644 --- a/code/tests/modules/js_features_ut.h +++ b/code/tests/modules/js_features_ut.h @@ -228,10 +228,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -275,10 +274,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -318,10 +316,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -362,10 +359,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -406,10 +402,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -439,10 +434,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -486,10 +480,9 @@ MODULE(js_features, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = EventsTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); diff --git a/code/tests/modules/resource_manager_ut.h b/code/tests/modules/resource_manager_ut.h index 5d3b1db04..bd424f0fb 100644 --- a/code/tests/modules/resource_manager_ut.h +++ b/code/tests/modules/resource_manager_ut.h @@ -83,14 +83,13 @@ MODULE(resource_manager, { IT("can create and destroy resource manager", { NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager *manager = new ResourceManager(&engine, &world, config); + ResourceManager *manager = new ResourceManager(&engine, config); NEQUALS(manager, nullptr); delete manager; @@ -99,7 +98,6 @@ MODULE(resource_manager, { IT("GetConfig returns configuration", { NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); @@ -108,7 +106,7 @@ MODULE(resource_manager, { config.isClient = true; config.cascadeStopDependents = false; - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); const auto &retrievedConfig = manager.GetConfig(); STREQUALS(retrievedConfig.resourcesPath.c_str(), config.resourcesPath.c_str()); @@ -120,14 +118,13 @@ MODULE(resource_manager, { IT("SetConfig updates configuration", { NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = "/old/path"; - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); ResourceManagerConfig newConfig; newConfig.resourcesPath = "/new/path"; @@ -151,14 +148,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); size_t discovered = manager.DiscoverResources(); EQUALS(discovered, 2u); @@ -177,14 +173,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); bool result = manager.DiscoverResource(TestManagerHelper::GetTestResourcePath() + "/single-disc"); EQUALS(result, true); @@ -203,14 +198,13 @@ MODULE(resource_manager, { } NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); size_t discovered = manager.DiscoverResources(); EQUALS(discovered, 0u); @@ -233,14 +227,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); auto names = manager.GetAllResourceNames(); @@ -257,14 +250,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); const Resource *resource = manager.GetResource("get-test"); @@ -278,14 +270,13 @@ MODULE(resource_manager, { IT("GetResource returns nullptr for unknown resource", { NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); const Resource *resource = manager.GetResource("nonexistent"); EQUALS(resource, nullptr); @@ -300,14 +291,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); EQUALS(manager.HasResource("has-test"), true); @@ -326,14 +316,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); ResourceState state = manager.GetResourceState("state-test"); @@ -350,14 +339,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); EQUALS(manager.IsResourceRunning("running-test"), false); @@ -382,14 +370,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); auto deps = manager.GetDependencies("dep-child"); @@ -413,14 +400,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); auto dependents = manager.GetDependents("parent-res"); @@ -439,14 +425,13 @@ MODULE(resource_manager, { })"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); EQUALS(manager.GetRunningResourceCount(), 0u); @@ -470,14 +455,13 @@ MODULE(resource_manager, { outsideFile.close(); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); auto startResult = manager.StartResource("escape-test"); @@ -502,14 +486,13 @@ MODULE(resource_manager, { TestManagerHelper::CreateTestScript("callback-start", "main.js", "// empty script"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); std::string startedResource; manager.SetOnResourceStarted([&startedResource](const std::string &name) { @@ -537,14 +520,13 @@ MODULE(resource_manager, { TestManagerHelper::CreateTestScript("callback-stop", "main.js", "// empty script"); NodeEngine engine; - flecs::world world; EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); std::string stoppedResource; manager.SetOnResourceStopped([&stoppedResource](const std::string &name) { @@ -568,11 +550,10 @@ MODULE(resource_manager, { EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); ResourceManagerConfig config; - flecs::world world; config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); STREQUALS(manager.GetCurrentResourceContext().c_str(), ""); @@ -585,61 +566,6 @@ MODULE(resource_manager, { engine.Shutdown(); }); - // ==================== Root entity ==================== - - IT("child entities should be removed", { - TestManagerHelper::CreateTestResource("child-entities", R"({ - "name": "child-entities", - "version": "1.0.0", - "mafiahub": { - "server": "main.js" - } - })"); - TestManagerHelper::CreateTestScript("child-entities", "main.js", "// empty script"); - - NodeEngine engine; - flecs::world world; - - EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - - ResourceManagerConfig config; - config.resourcesPath = TestManagerHelper::GetTestResourcePath(); - - flecs::entity root; - { - ResourceManager manager(&engine, &world, config); - - manager.DiscoverResources(); - manager.StartResource("child-entities"); - - const Resource *resource = manager.GetResource("child-entities"); - flecs::entity childEntity = world.entity("child"); - root = resource->GetRootEntity(); - childEntity.child_of(root); - - int beforeChildCount = 0; - root.children([&](flecs::entity) { - beforeChildCount++; - }); - - manager.StopResource("child-entities"); - - int childCount = 0; - root.children([&](flecs::entity) { - childCount++; - }); - - EQUALS(beforeChildCount, 1); - EQUALS(childCount, 0); - EQUALS(root.is_alive(), true); // Root entity should be alive even if resource is stopped - } - - EQUALS(root.is_alive(), false); - - engine.Shutdown(); - TestManagerHelper::Cleanup(); - }); - // ==================== Cleanup ==================== IT("final cleanup", { diff --git a/code/tests/modules/resource_ut.h b/code/tests/modules/resource_ut.h index 4904b57e8..510a9ddf9 100644 --- a/code/tests/modules/resource_ut.h +++ b/code/tests/modules/resource_ut.h @@ -102,8 +102,7 @@ MODULE(resource, { "description": "A test resource" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/pkg-test-1", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/pkg-test-1"); EQUALS(resource.IsManifestValid(), true); STREQUALS(resource.GetName().c_str(), "pkg-test-1"); @@ -130,8 +129,7 @@ MODULE(resource, { resourceDir.createDirectory(); } - flecs::world world; - Resource resource(resourcePath, &world); + Resource resource(resourcePath); EQUALS(resource.IsManifestValid(), false); EQUALS(resource.GetState(), ResourceState::Error); @@ -145,8 +143,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/pkg-test-2", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/pkg-test-2"); EQUALS(resource.IsManifestValid(), false); EQUALS(resource.GetState(), ResourceState::Error); @@ -161,8 +158,7 @@ MODULE(resource, { })"); // Path with trailing slash - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/path-test/", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/path-test/"); EQUALS(resource.IsManifestValid(), true); STREQUALS(resource.GetName().c_str(), "path-test"); @@ -178,8 +174,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/state-test-1", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/state-test-1"); EQUALS(resource.GetState(), ResourceState::Unloaded); EQUALS(resource.IsRunning(), false); @@ -194,8 +189,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/state-test-2", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/state-test-2"); EQUALS(resource.GetState(), ResourceState::Error); EQUALS(resource.IsRunning(), false); @@ -217,8 +211,7 @@ MODULE(resource, { } })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/entry-test", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/entry-test"); std::string serverEntry = resource.GetServerEntryPoint(); std::string clientEntry = resource.GetClientEntryPoint(); @@ -236,8 +229,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/no-entry", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/no-entry"); STREQUALS(resource.GetServerEntryPoint().c_str(), ""); STREQUALS(resource.GetClientEntryPoint().c_str(), ""); @@ -256,8 +248,7 @@ MODULE(resource, { } })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/export-test", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/export-test"); EQUALS(resource.HasExport("getData"), true); EQUALS(resource.HasExport("setConfig"), true); @@ -280,8 +271,7 @@ MODULE(resource, { } })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/depends-test", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/depends-test"); EQUALS(resource.DependsOn("core"), true); EQUALS(resource.DependsOn("utils"), true); @@ -298,8 +288,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/restart-test-1", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/restart-test-1"); EQUALS(resource.GetRestartAttemptCount(), 0); @@ -319,8 +308,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/restart-test-2", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/restart-test-2"); resource.RecordRestartAttempt(); resource.RecordRestartAttempt(); @@ -338,8 +326,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource resource(TestResourceHelper::GetTestResourcePath() + "/backoff-test", &world); + Resource resource(TestResourceHelper::GetTestResourcePath() + "/backoff-test"); EQUALS(resource.GetRestartBackoffMs(), 0); @@ -362,8 +349,7 @@ MODULE(resource, { "version": "1.0.0" })"); - flecs::world world; - Resource original(TestResourceHelper::GetTestResourcePath() + "/move-test-1", &world); + Resource original(TestResourceHelper::GetTestResourcePath() + "/move-test-1"); original.RecordRestartAttempt(); Resource moved(std::move(original)); @@ -385,9 +371,8 @@ MODULE(resource, { "version": "2.0.0" })"); - flecs::world world; - Resource original(TestResourceHelper::GetTestResourcePath() + "/move-test-2a", &world); - Resource target(TestResourceHelper::GetTestResourcePath() + "/move-test-2b", &world); + Resource original(TestResourceHelper::GetTestResourcePath() + "/move-test-2a"); + Resource target(TestResourceHelper::GetTestResourcePath() + "/move-test-2b"); target = std::move(original); @@ -406,38 +391,13 @@ MODULE(resource, { })"); std::string expectedPath = TestResourceHelper::GetTestResourcePath() + "/path-access"; - flecs::world world; - Resource resource(expectedPath, &world); + Resource resource(expectedPath); STREQUALS(resource.GetPath().c_str(), expectedPath.c_str()); TestResourceHelper::Cleanup(); }); - // ==================== Root entity ==================== - - IT("Resource creates root resource", { - TestResourceHelper::CreateTestResource("fooResource", R"({ - "name": "foo-bar", - "version": "1.0.0" - })"); - - std::string expectedPath = TestResourceHelper::GetTestResourcePath() + "/fooResource"; - flecs::world world; - flecs::entity root; - { - Resource resource(expectedPath, &world); - - root = resource.GetRootEntity(); - EQUALS(root.is_alive(), true); - STREQUALS(root.name().c_str(), "foo-bar"); - EQUALS(root.get().value, &resource); - } - EQUALS(root.is_alive(), false); - - TestResourceHelper::Cleanup(); - }); - // ==================== Cleanup ==================== IT("final cleanup", { diff --git a/code/tests/modules/timer_context_ut.h b/code/tests/modules/timer_context_ut.h index 16ef5fb7b..9a17d849e 100644 --- a/code/tests/modules/timer_context_ut.h +++ b/code/tests/modules/timer_context_ut.h @@ -126,10 +126,9 @@ MODULE(timer_context, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = TimerContextTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); { @@ -181,10 +180,9 @@ MODULE(timer_context, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = TimerContextTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); { v8::Isolate *isolate = engine.GetIsolate(); @@ -218,10 +216,9 @@ MODULE(timer_context, { NodeEngine engine({}); EQUALS(engine.Init(), ScriptingError::SCRIPTING_NONE); - flecs::world world; ResourceManagerConfig config; config.resourcesPath = TimerContextTestHelper::GetTestPath(); - ResourceManager manager(&engine, &world, config); + ResourceManager manager(&engine, config); manager.DiscoverResources(); { From 5dd4c667f07d48157df14618d3b513fa7fe7d506 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:21:04 +0200 Subject: [PATCH 22/48] Framework: drop the world Engine facade, use ReplicationManager directly Post-flecs the World::Engine / ServerEngine / ClientEngine hierarchy owned nothing -- it was a pure forwarder to the ReplicationManager, which is owned by the NetworkPeer. Remove the layer entirely and promote the ReplicationManager to the top-level networked-world object. - CoreModules: replace Get/SetWorldEngine (World::Engine*) with Get/SetReplication (ReplicationManager*), set from the peer on server init / client connect and cleared on shutdown / disconnect. - Delete world/engine, world/server, world/client and world/errors. - Entity CRUD, ownership and the auto-serialize tick rate now go straight to the ReplicationManager; peer-lifecycle wiring moved to the integration Instances. - Scripting modules no longer take a world-engine pointer. Breaking change. MafiaMP is updated in lockstep; other mods migrate later. --- code/framework/CMakeLists.txt | 6 +- code/framework/src/core_modules.h | 19 +++---- .../src/integrations/client/instance.cpp | 34 ++++------- .../src/integrations/client/instance.h | 6 -- .../integrations/client/scripting/module.cpp | 3 +- .../integrations/client/scripting/module.h | 10 +--- .../src/integrations/server/instance.cpp | 27 +++------ .../src/integrations/server/instance.h | 10 +--- .../integrations/server/scripting/module.cpp | 3 +- .../integrations/server/scripting/module.h | 11 +--- .../framework/src/networking/network_server.h | 1 - .../framework/src/scripting/builtins/entity.h | 6 +- .../scripting/resource/resource_manager.cpp | 1 - code/framework/src/world/client.cpp | 37 ------------ code/framework/src/world/client.h | 25 --------- code/framework/src/world/engine.cpp | 28 ---------- code/framework/src/world/engine.h | 45 --------------- code/framework/src/world/errors.h | 17 ------ code/framework/src/world/server.cpp | 56 ------------------- code/framework/src/world/server.h | 35 ------------ 20 files changed, 41 insertions(+), 339 deletions(-) delete mode 100644 code/framework/src/world/client.cpp delete mode 100644 code/framework/src/world/client.h delete mode 100644 code/framework/src/world/engine.cpp delete mode 100644 code/framework/src/world/engine.h delete mode 100644 code/framework/src/world/errors.h delete mode 100644 code/framework/src/world/server.cpp delete mode 100644 code/framework/src/world/server.h diff --git a/code/framework/CMakeLists.txt b/code/framework/CMakeLists.txt index 2e0fa4924..b2c0172f4 100644 --- a/code/framework/CMakeLists.txt +++ b/code/framework/CMakeLists.txt @@ -19,10 +19,6 @@ set(FRAMEWORK_SRC src/external/sentry/wrapper.cpp - src/world/engine.cpp - src/world/server.cpp - src/world/client.cpp - src/networking/network_peer.cpp src/networking/errors.cpp @@ -179,7 +175,7 @@ macro(link_shared_deps target_name) ${CMAKE_SOURCE_DIR}/vendors/json/include ${CMAKE_SOURCE_DIR}/vendors/spdlog/include ${CMAKE_SOURCE_DIR}/vendors/fmt/include - ${CMAKE_SOURCE_DIR}/vendors/fu2 # function2 (used in world/modules/base.hpp) + ${CMAKE_SOURCE_DIR}/vendors/fu2 # function2 (used in network_peer.h) ${CMAKE_SOURCE_DIR}/vendors/mafianet/Source/include # Networking / MafiaNet (used in messages.h) ${CMAKE_SOURCE_DIR}/vendors/cxxopts # Command-line parsing (used in integrations) ${CMAKE_SOURCE_DIR}/vendors # flecs, etc. diff --git a/code/framework/src/core_modules.h b/code/framework/src/core_modules.h index 44b8b68a1..e65035b62 100644 --- a/code/framework/src/core_modules.h +++ b/code/framework/src/core_modules.h @@ -16,9 +16,9 @@ namespace Framework::Networking { class NetworkPeer; } // namespace Framework::Networking -namespace Framework::World { - class Engine; -} // namespace Framework::World +namespace Framework::Networking::Replication { + class ReplicationManager; +} // namespace Framework::Networking::Replication namespace Framework::GUI { @@ -47,7 +47,7 @@ namespace Framework { public: static void Reset() noexcept { _networkPeer = nullptr; - _engine = nullptr; + _replication = nullptr; _scriptingModule = nullptr; _webManager = nullptr; _input = nullptr; @@ -59,9 +59,8 @@ namespace Framework { _networkPeer = peer; } - static void SetWorldEngine(World::Engine *engine) { - FW_ASSERT_MODULE_REGISTRATION(_engine, engine, "WorldEngine"); - _engine = engine; + static void SetReplication(Networking::Replication::ReplicationManager *replication) { + _replication = replication; } static void SetScriptingModule(Scripting::ScriptingModule *module) { @@ -88,8 +87,8 @@ namespace Framework { return _networkPeer; } - static World::Engine *GetWorldEngine() noexcept { - return _engine; + static Networking::Replication::ReplicationManager *GetReplication() noexcept { + return _replication; } static Scripting::ScriptingModule *GetScriptingModule() noexcept { @@ -110,7 +109,7 @@ namespace Framework { private: static inline Networking::NetworkPeer *_networkPeer {}; - static inline World::Engine *_engine {}; + static inline Networking::Replication::ReplicationManager *_replication {}; static inline Scripting::ScriptingModule *_scriptingModule {}; static inline GUI::Manager *_webManager {}; static inline Input::IInput *_input {}; diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index d8d87297c..7b897cd9c 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -25,6 +25,7 @@ #include "scripting/builtins/events.h" #include "networking/state.h" +#include "networking/replication/replication_manager.h" #include #include @@ -139,11 +140,10 @@ namespace Framework::Integrations::Client { _presence = std::make_unique(); _imguiApp = std::make_unique(); _renderer = std::make_unique(); - _worldEngine = std::make_shared(); _renderIO = std::make_unique(); _playerFactory = std::make_unique(); _streamingFactory = std::make_unique(); - _scriptingModule = std::make_unique(_worldEngine); + _scriptingModule = std::make_unique(); _webManager = std::make_unique(); } @@ -177,14 +177,6 @@ namespace Framework::Integrations::Client { Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->info("Networking engine initialized"); } - if (_worldEngine) { - if (_worldEngine->Init() != World::WorldError::WORLD_NONE) { - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->error("World engine failed to initialize"); - return ClientError::CLIENT_ENGINES_ERROR; - } - CoreModules::SetWorldEngine(_worldEngine.get()); - } - CoreModules::SetWebManager(_webManager.get()); InitNetworkingMessages(); @@ -292,14 +284,10 @@ namespace Framework::Integrations::Client { _imguiApp->Shutdown(); } - if (_worldEngine) { - _worldEngine->Shutdown(); - } - CoreModules::SetScriptingModule(nullptr); CoreModules::SetWebManager(nullptr); CoreModules::SetNetworkPeer(nullptr); - CoreModules::SetWorldEngine(nullptr); + CoreModules::SetReplication(nullptr); CoreModules::SetInput(nullptr); CoreModules::Reset(); @@ -319,10 +307,6 @@ namespace Framework::Integrations::Client { _scriptingModule->Update(); } - if (_worldEngine) { - _worldEngine->Update(); - } - if (_imguiApp && _imguiApp->IsInitialized()) { _imguiApp->Update(); } @@ -381,7 +365,12 @@ namespace Framework::Integrations::Client { }); net->RegisterMessage(GameMessages::GAME_CONNECTION_FINALIZED, [this, net](MafiaNet::RakNetGUID _guid, ClientConnectionFinalized *msg) { Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection request finalized"); - _worldEngine->OnConnect(net, msg->GetServerTickRate()); + // The replication manager (owned by the peer) is the networked world; serialize owned + // entities upstream at the server's tick rate (tickInterval is in seconds). + if (auto *replication = net->GetReplicationManager()) { + CoreModules::SetReplication(replication); + replication->SetAutoSerializeInterval(static_cast(msg->GetServerTickRate() * 1000.0f)); + } // The server constructs the local avatar (owned by us); the game recognizes it in // NetworkEntity::OnConstructed by ownerGUID. Signal we are ready for it. @@ -411,8 +400,9 @@ namespace Framework::Integrations::Client { _initialDownloadDone = false; _downloadStatus = {}; - // Request the world engine to clean up entities - _worldEngine->OnDisconnect(); + // Entity teardown is native: ReplicaManager3 deletes server-created replicas when the + // connection drops (QueryActionOnPopConnection_Client). + CoreModules::SetReplication(nullptr); // Notify mod-level that network integration got closed if (_onConnectionClosed) { diff --git a/code/framework/src/integrations/client/instance.h b/code/framework/src/integrations/client/instance.h index 8d85b0eee..dc369a814 100644 --- a/code/framework/src/integrations/client/instance.h +++ b/code/framework/src/integrations/client/instance.h @@ -22,7 +22,6 @@ #include #include -#include #include "scripting/module.h" @@ -95,7 +94,6 @@ namespace Framework::Integrations::Client { std::unique_ptr _networkingEngine; std::unique_ptr _presence; std::unique_ptr _renderer; - std::shared_ptr _worldEngine; std::unique_ptr _renderIO; std::unique_ptr _scriptingModule; std::unique_ptr _webManager; @@ -194,10 +192,6 @@ namespace Framework::Integrations::Client { return _networkingEngine.get(); } - World::ClientEngine *GetWorldEngine() const { - return _worldEngine.get(); - } - External::Discord::Wrapper *GetPresence() const { return _presence.get(); } diff --git a/code/framework/src/integrations/client/scripting/module.cpp b/code/framework/src/integrations/client/scripting/module.cpp index 084132293..b0793d7c9 100644 --- a/code/framework/src/integrations/client/scripting/module.cpp +++ b/code/framework/src/integrations/client/scripting/module.cpp @@ -35,8 +35,7 @@ namespace Framework::Integrations::Client::Scripting { } } // anonymous namespace - ClientScriptingModule::ClientScriptingModule(std::shared_ptr world) - : _world(world) { + ClientScriptingModule::ClientScriptingModule() { // Create standalone V8 engine for client (no Node.js runtime) // moduleRootPath is set later in Init() or SetResourceCachePath() // when the actual resource cache path is known. diff --git a/code/framework/src/integrations/client/scripting/module.h b/code/framework/src/integrations/client/scripting/module.h index 949fce04a..874f3dc72 100644 --- a/code/framework/src/integrations/client/scripting/module.h +++ b/code/framework/src/integrations/client/scripting/module.h @@ -18,7 +18,6 @@ #include #include #include -#include namespace Framework::Integrations::Client::Scripting { @@ -49,7 +48,7 @@ namespace Framework::Integrations::Client::Scripting { */ class ClientScriptingModule final : public Framework::Lifecycle, public Framework::Scripting::ScriptingModule { public: - explicit ClientScriptingModule(std::shared_ptr world); + ClientScriptingModule(); ~ClientScriptingModule(); /** @@ -89,12 +88,6 @@ namespace Framework::Integrations::Client::Scripting { return _engine.get(); } - /** - * Get the world engine. - */ - std::shared_ptr GetWorldEngine() const { - return _world; - } /** * Get the JavaScript resource manager. @@ -185,7 +178,6 @@ namespace Framework::Integrations::Client::Scripting { private: std::unique_ptr _engine; - std::shared_ptr _world; std::unique_ptr _resourceManager; // Resource synchronization state diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 98ac38618..03b3c8f74 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -13,7 +13,7 @@ #include #include "core_modules.h" -#include "world/server.h" +#include "networking/replication/replication_manager.h" #include "networking/replication/network_entity.h" #include "networking/replication/replication_manager.h" @@ -42,8 +42,7 @@ namespace Framework::Integrations::Server { _networkingEngine = std::make_unique(); _webServer = std::make_unique(); _fileConfig = std::make_unique(); - _worldEngine = std::make_shared(); - _scriptingModule = std::make_unique(_worldEngine); + _scriptingModule = std::make_unique(); _playerFactory = std::make_unique(); _streamingFactory = std::make_unique(); _masterlist = std::make_unique(); @@ -112,14 +111,14 @@ namespace Framework::Integrations::Server { CoreModules::SetNetworkPeer(_networkingEngine->GetNetworkServer()); - // Initialize the world - if (_worldEngine->Init(_networkingEngine->GetNetworkServer(), _opts.worldConfig) != World::WorldError::WORLD_NONE) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->critical("Failed to initialize the world engine"); - return ServerError::SERVER_WORLD_INIT_FAILED; + // The networked world is the replication manager owned by the peer. Serialize entity updates + // at the configured tick rate (tickInterval is in seconds). + auto *replication = _networkingEngine->GetNetworkServer()->GetReplicationManager(); + CoreModules::SetReplication(replication); + if (replication) { + replication->SetAutoSerializeInterval(static_cast(_opts.worldConfig.tickInterval * 1000.0f)); } - CoreModules::SetWorldEngine(_worldEngine.get()); - if (!_opts.bindPublicServer || !_masterlist->Init(_opts.services.apiUrl, _opts.services.masterlistUrl, _opts.bindSecretKey)) { Logging::GetLogger(FRAMEWORK_INNER_SERVER)->warn("Server will not be announced to masterlist"); } @@ -556,10 +555,6 @@ namespace Framework::Integrations::Server { _webServer->Shutdown(); } - if (_worldEngine) { - _worldEngine->Shutdown(); - } - if (_commandListener) { _commandListener->Shutdown(); } @@ -569,7 +564,7 @@ namespace Framework::Integrations::Server { sig_detach(SIGTERM, sig_slot(this, &Instance::OnSignal)); CoreModules::SetNetworkPeer(nullptr); - CoreModules::SetWorldEngine(nullptr); + CoreModules::SetReplication(nullptr); CoreModules::SetScriptingModule(nullptr); CoreModules::Reset(); @@ -587,10 +582,6 @@ namespace Framework::Integrations::Server { _scriptingModule->Update(); } - if (_worldEngine) { - _worldEngine->Update(); - } - if (_commandListener) { _commandListener->Update(); } diff --git a/code/framework/src/integrations/server/instance.h b/code/framework/src/integrations/server/instance.h index 0dbe42f55..71d99b62c 100644 --- a/code/framework/src/integrations/server/instance.h +++ b/code/framework/src/integrations/server/instance.h @@ -19,7 +19,6 @@ #include "utils/config.h" #include "utils/command_listener.h" #include "utils/command_processor.h" -#include "world/server.h" #include "world/types/player.hpp" #include "world/types/streaming.hpp" @@ -72,7 +71,9 @@ namespace Framework::Integrations::Server { bool enableSignals; // update intervals - Framework::World::ServerEngine::ServerConfig worldConfig; + struct WorldConfig { + float tickInterval = 0.016667f; + } worldConfig; // args int argc; @@ -99,7 +100,6 @@ namespace Framework::Integrations::Server { std::unique_ptr _networkingEngine; std::unique_ptr _webServer; std::unique_ptr _fileConfig; - std::shared_ptr _worldEngine; std::unique_ptr _masterlist; std::unique_ptr _commandListener; std::unique_ptr _commandProcessor; @@ -176,10 +176,6 @@ namespace Framework::Integrations::Server { return _scriptingModule.get(); } - std::shared_ptr GetWorldEngine() const { - return _worldEngine; - } - Networking::Engine *GetNetworkingEngine() const { return _networkingEngine.get(); } diff --git a/code/framework/src/integrations/server/scripting/module.cpp b/code/framework/src/integrations/server/scripting/module.cpp index fbe34226e..4534da0d1 100644 --- a/code/framework/src/integrations/server/scripting/module.cpp +++ b/code/framework/src/integrations/server/scripting/module.cpp @@ -22,8 +22,7 @@ namespace Framework::Integrations::Server::Scripting { - ServerScriptingModule::ServerScriptingModule(std::shared_ptr world) - : _world(world) { + ServerScriptingModule::ServerScriptingModule() { // Create Node.js engine without sandbox for full server capabilities Framework::Scripting::NodeEngineOptions options; options.sandboxed = false; diff --git a/code/framework/src/integrations/server/scripting/module.h b/code/framework/src/integrations/server/scripting/module.h index 6c7355738..182bc7ce7 100644 --- a/code/framework/src/integrations/server/scripting/module.h +++ b/code/framework/src/integrations/server/scripting/module.h @@ -16,7 +16,6 @@ #include #include #include -#include namespace Framework::Integrations::Server::Scripting { @@ -36,7 +35,7 @@ namespace Framework::Integrations::Server::Scripting { */ class ServerScriptingModule final : public Framework::Lifecycle, public Framework::Scripting::ScriptingModule { public: - explicit ServerScriptingModule(std::shared_ptr world); + ServerScriptingModule(); ~ServerScriptingModule(); /** @@ -73,13 +72,6 @@ namespace Framework::Integrations::Server::Scripting { return _nodeEngine.get(); } - /** - * Get the world engine. - */ - std::shared_ptr GetWorldEngine() const { - return _world; - } - /** * Get the JavaScript resource manager. */ @@ -115,7 +107,6 @@ namespace Framework::Integrations::Server::Scripting { private: std::unique_ptr _nodeEngine; - std::shared_ptr _world; std::unique_ptr _resourceManager; std::string _resourcesPath = "resources"; diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index bea0f8d3a..9136dccc4 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -14,7 +14,6 @@ #include "messages/messages.h" #include "network_peer.h" #include "rpc/rpc.h" -#include "world/server.h" #include #include diff --git a/code/framework/src/scripting/builtins/entity.h b/code/framework/src/scripting/builtins/entity.h index b85c4f541..8200cd906 100644 --- a/code/framework/src/scripting/builtins/entity.h +++ b/code/framework/src/scripting/builtins/entity.h @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include @@ -197,8 +197,8 @@ namespace Framework::Scripting::Builtins { protected: Networking::Replication::NetworkEntity *Resolve() const { - auto *world = CoreModules::GetWorldEngine(); - return world ? world->GetEntityByNetworkID(_id) : nullptr; + auto *replication = CoreModules::GetReplication(); + return replication ? replication->GetEntityByNetworkID(_id) : nullptr; } uint64_t _id = 0; diff --git a/code/framework/src/scripting/resource/resource_manager.cpp b/code/framework/src/scripting/resource/resource_manager.cpp index 08599a61b..33c47cd14 100644 --- a/code/framework/src/scripting/resource/resource_manager.cpp +++ b/code/framework/src/scripting/resource/resource_manager.cpp @@ -9,7 +9,6 @@ #include "resource_manager.h" #include "../builtins/events.h" -#include "world/engine.h" #include #include diff --git a/code/framework/src/world/client.cpp b/code/framework/src/world/client.cpp deleted file mode 100644 index 61cdcc202..000000000 --- a/code/framework/src/world/client.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#include "client.h" - -namespace Framework::World { - WorldError ClientEngine::Init() { - return Engine::Init(nullptr); // peer assigned by OnConnect - } - - void ClientEngine::Shutdown() { - Engine::Shutdown(); - } - - void ClientEngine::Update() { - Engine::Update(); - } - - void ClientEngine::OnConnect(Networking::NetworkPeer *peer, float tickInterval) { - _networkPeer = peer; - // Serialize owned entities upstream at the server's tick rate (tickInterval is in seconds). - if (auto *replication = GetReplication()) { - replication->SetAutoSerializeInterval(static_cast(tickInterval * 1000.0f)); - } - } - - void ClientEngine::OnDisconnect() { - // Entity teardown is handled natively by ReplicaManager3 when the connection drops - // (QueryActionOnPopConnection_Client deletes server-created replicas). - _networkPeer = nullptr; - } -} // namespace Framework::World diff --git a/code/framework/src/world/client.h b/code/framework/src/world/client.h deleted file mode 100644 index 0f41658da..000000000 --- a/code/framework/src/world/client.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "engine.h" - -namespace Framework::World { - class ClientEngine final : public Engine { - public: - [[nodiscard]] WorldError Init(); - - void Shutdown() override; - - void OnConnect(Networking::NetworkPeer *peer, float tickInterval); - void OnDisconnect(); - - void Update() override; - }; -} // namespace Framework::World diff --git a/code/framework/src/world/engine.cpp b/code/framework/src/world/engine.cpp deleted file mode 100644 index 67058d024..000000000 --- a/code/framework/src/world/engine.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#include "engine.h" - -namespace Framework::World { - WorldError Engine::Init(Networking::NetworkPeer *networkPeer) { - _networkPeer = networkPeer; - _initialized = true; - return WorldError::WORLD_NONE; - } - - void Engine::Shutdown() { - Lifecycle::Shutdown(); - } - - void Engine::Update() {} - - Replication::NetworkEntity *Engine::GetEntityByNetworkID(MafiaNet::NetworkID networkId) const { - auto *replication = GetReplication(); - return replication ? replication->GetEntityByNetworkID(networkId) : nullptr; - } -} // namespace Framework::World diff --git a/code/framework/src/world/engine.h b/code/framework/src/world/engine.h deleted file mode 100644 index 12c6ef65b..000000000 --- a/code/framework/src/world/engine.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "errors.h" - -#include - -#include "networking/network_peer.h" -#include "networking/replication/network_entity.h" -#include "networking/replication/replication_manager.h" - -#include "core_modules.h" - -namespace Framework::World { - namespace Replication = Framework::Networking::Replication; - - // Facade over the ReplicationManager, which owns the networked entities. - class Engine : public Lifecycle { - protected: - Networking::NetworkPeer *_networkPeer = nullptr; - - public: - [[nodiscard]] WorldError Init(Networking::NetworkPeer *networkPeer); - - void Shutdown() override; - - void Update() override; - - Replication::ReplicationManager *GetReplication() const { - return _networkPeer ? _networkPeer->GetReplicationManager() : nullptr; - } - Replication::NetworkEntity *GetEntityByNetworkID(MafiaNet::NetworkID networkId) const; - - static bool IsEntityOwner(Replication::NetworkEntity *entity, uint64_t guid) { - return entity && entity->ownerGUID == guid; - } - }; -} // namespace Framework::World diff --git a/code/framework/src/world/errors.h b/code/framework/src/world/errors.h deleted file mode 100644 index 04a0e20eb..000000000 --- a/code/framework/src/world/errors.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -namespace Framework::World { - enum class WorldError { - WORLD_NONE, - WORLD_FLECS_INIT_FAILED, - WORLD_PEER_NULL - }; -} // namespace Framework::World diff --git a/code/framework/src/world/server.cpp b/code/framework/src/world/server.cpp deleted file mode 100644 index 5b3dc13c1..000000000 --- a/code/framework/src/world/server.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#include "server.h" - -namespace Framework::World { - WorldError ServerEngine::Init(Framework::Networking::NetworkPeer *networkPeer, ServerConfig cfg) { - // Relevance, ownership and serialization are handled by ReplicaManager3 (GridSectorizer - // interest + per-entity QuerySerialization). - const WorldError err = Engine::Init(networkPeer); - if (err != WorldError::WORLD_NONE) { - return err; - } - // Replicate entity updates at the configured tick rate (tickInterval is in seconds). - if (auto *replication = GetReplication()) { - replication->SetAutoSerializeInterval(static_cast(cfg.tickInterval * 1000.0f)); - } - return WorldError::WORLD_NONE; - } - - void ServerEngine::Shutdown() { - Engine::Shutdown(); - } - - void ServerEngine::Update() { - Engine::Update(); - } - - Replication::NetworkEntity *ServerEngine::CreateEntity(uint32_t typeId) const { - auto *replication = GetReplication(); - return replication ? replication->CreateEntity(typeId) : nullptr; - } - - void ServerEngine::RemoveEntity(Replication::NetworkEntity *entity) const { - if (auto *replication = GetReplication()) { - replication->DestroyEntity(entity); - } - } - - void ServerEngine::SetOwner(Replication::NetworkEntity *entity, uint64_t guid) const { - if (entity) { - // Routes through the entity so the new owner is notified directly (serialize to an owner - // is withheld); see NetworkEntity::SetOwner. - entity->SetOwner(guid); - } - } - - uint64_t ServerEngine::GetOwner(Replication::NetworkEntity *entity) const { - return entity ? entity->ownerGUID : 0xFFFFFFFFFFFFFFFF; - } -} // namespace Framework::World diff --git a/code/framework/src/world/server.h b/code/framework/src/world/server.h deleted file mode 100644 index 93bea1e52..000000000 --- a/code/framework/src/world/server.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "engine.h" - -#include - -namespace Framework::World { - class ServerEngine final : public Engine { - public: - struct ServerConfig { - float tickInterval = 0.016667f; - }; - - [[nodiscard]] WorldError Init(Framework::Networking::NetworkPeer *networkPeer, ServerConfig cfg); - - void Shutdown() override; - void Update() override; - - // CreateEntity constructs a registered entity type and starts replicating it; the caller - // fills in its state and (for players) registers it as a viewer on the ReplicationManager. - Replication::NetworkEntity *CreateEntity(uint32_t typeId) const; - void RemoveEntity(Replication::NetworkEntity *entity) const; - - void SetOwner(Replication::NetworkEntity *entity, uint64_t guid) const; - uint64_t GetOwner(Replication::NetworkEntity *entity) const; - }; -} // namespace Framework::World From 696415e06fdb44e532787029442b9e03320a22d6 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:39:05 +0200 Subject: [PATCH 23/48] Framework: drop committed MafiaHubServices.lib build artifact The 5.7 MB prebuilt static lib was committed by mistake in f8e0882c. Remove it and gitignore the services/lib Debug/Release output dirs so it cannot be re-added. --- .gitignore | 4 ++++ .../services/lib/Release/MafiaHubServices.lib | Bin 5729944 -> 0 bytes 2 files changed, 4 insertions(+) delete mode 100644 code/framework/src/services/lib/Release/MafiaHubServices.lib diff --git a/.gitignore b/.gitignore index 0032665ce..0109284ae 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,7 @@ vendors/directxtk/MakeSpriteFont/obj/Debug/MakeSpriteFont.csproj.AssemblyReferen vendors/directxtk/MakeSpriteFont/obj/Release/MakeSpriteFont.csproj.AssemblyReference.cache /vendors/directxtk/MakeSpriteFont/obj /vendors/directxtk/MakeSpriteFont/obj + +# MafiaHub Services build outputs +code/framework/src/services/lib/Debug/ +code/framework/src/services/lib/Release/ diff --git a/code/framework/src/services/lib/Release/MafiaHubServices.lib b/code/framework/src/services/lib/Release/MafiaHubServices.lib deleted file mode 100644 index 4c627c606158b4f8ae00e592a77bb26cfe8b30b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5729944 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�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

RBs?Gq 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∨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

izL%k&{_1hV`>@_rPp>O)!g`^e%zrS+QL? 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 z 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

eXop;hKa$@Vj^1fm_^R!vy#MXz6 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[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 Q{XOzn@OAX>-~P}42XTleR{#J2 From 71b9b2d6a0e024dbd369490d8d1f7b5b99b90679 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 14:02:34 +0200 Subject: [PATCH 24/48] Networking: accept any JS number for integral property setters RegisterProperty's integral setter only accepted IsInt32, silently dropping whole numbers above 2^31 (e.g. a uint64 NetworkID written from script). Accept any JS number via IntegerValue so values up to 2^53 round-trip, matching the JS-safe-id design. Also document load-bearing invariants surfaced in review: the AllocConnection const_cast forced by the const ReplicaManager3 API, the EntityFactory startup-registration threading rule, and that _nextNetworkId is bumped only on the sim thread. --- code/framework/src/networking/replication/entity_factory.h | 3 ++- .../src/networking/replication/replication_manager.cpp | 2 ++ .../framework/src/networking/replication/replication_manager.h | 1 + code/framework/src/scripting/builtins/property.h | 3 ++- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/code/framework/src/networking/replication/entity_factory.h b/code/framework/src/networking/replication/entity_factory.h index 6a693368b..d209b05de 100644 --- a/code/framework/src/networking/replication/entity_factory.h +++ b/code/framework/src/networking/replication/entity_factory.h @@ -26,7 +26,8 @@ namespace Framework::Networking::Replication { static EntityFactory &Get(); - // Registers a type. Returns its id. Safe to call once per type at startup. + // Registers a type and returns its id. Not thread-safe: register every type at startup, + // before networking begins, because Create() is then called from the sim/network path. uint32_t Register(const std::string &name, Constructor constructor); // Constructs an instance and stamps its typeId. Returns nullptr for an unknown id. diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index 046f0cfb4..f469137ee 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -218,6 +218,8 @@ namespace Framework::Networking::Replication { } MafiaNet::Connection_RM3 *ReplicationManager::AllocConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID) const { + // ReplicaManager3 declares this const, but the connection needs a mutable manager back-pointer + // for its QueryReplicaList interest queries; the const_cast is forced by the upstream API. return new ReplicationConnection(systemAddress, rakNetGUID, const_cast(this), _isServer); } diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index 975fa667f..53c73bb80 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -87,6 +87,7 @@ namespace Framework::Networking::Replication { uint64_t _myGUID = 0xFFFFFFFFFFFFFFFF; // Server-side monotonic NetworkID allocator. Starts at 1 (0 reads as "none" in game code) and // stays well within JavaScript's safe-integer range so scripting can hold ids as plain numbers. + // Bumped only from CreateEntity on the sim thread, so it needs no synchronization. uint64_t _nextNetworkId = 0; bool _gridReady = false; float _gridCellSize = 100.0f; diff --git a/code/framework/src/scripting/builtins/property.h b/code/framework/src/scripting/builtins/property.h index 660ea8095..1e051deff 100644 --- a/code/framework/src/scripting/builtins/property.h +++ b/code/framework/src/scripting/builtins/property.h @@ -75,7 +75,8 @@ namespace Framework::Scripting::Builtins { if (value->IsNumber()) apply(static_cast(value->NumberValue(ctx).FromMaybe(0.0))); } else if constexpr (std::is_integral_v) { - if (value->IsInt32()) apply(static_cast(value->Int32Value(ctx).FromMaybe(0))); + // Any JS number, not just int32, so values up to 2^53 (e.g. NetworkIDs) round-trip. + if (value->IsNumber()) apply(static_cast(value->IntegerValue(ctx).FromMaybe(0))); } } } // namespace detail From c2fb53a47de8f2bfbb4bdeaa7e3a61f85957e55d Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 14:26:51 +0200 Subject: [PATCH 25/48] Networking: drop model identity from NetworkEntity modelHash/modelName/scale were never consumed by framework code, only serialized and surfaced read-only to scripting. Remove them from the base replica and the generic Entity builtin. Carrying renderable identity is the mod's responsibility via the construction/field hooks. --- .../src/networking/replication/network_entity.cpp | 9 --------- .../src/networking/replication/network_entity.h | 4 ---- code/framework/src/scripting/builtins/entity.h | 15 --------------- 3 files changed, 28 deletions(-) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 57a073e44..838ff9b15 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -11,7 +11,6 @@ #include "replication_manager.h" #include -#include namespace Framework::Networking::Replication { bool NetworkEntity::IsServerPeer() const { @@ -35,9 +34,6 @@ namespace Framework::Networking::Replication { bs->Write(position); bs->Write(velocity); bs->Write(rotation); - bs->Write(modelHash); - bs->Write(scale); - bs->Write(MafiaNet::RakString(modelName.c_str())); } void NetworkEntity::ReadConstruction(MafiaNet::BitStream *bs) { @@ -51,11 +47,6 @@ namespace Framework::Networking::Replication { bs->Read(position); bs->Read(velocity); bs->Read(rotation); - bs->Read(modelHash); - bs->Read(scale); - MafiaNet::RakString name; - bs->Read(name); - modelName = name.C_String(); } void NetworkEntity::SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *) { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 89cfc4375..d35770a72 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -16,7 +16,6 @@ #include #include -#include namespace Framework::Networking::Replication { // A replicated game object: it owns its state as plain members, and ReplicaManager3 + @@ -42,9 +41,6 @@ namespace Framework::Networking::Replication { glm::vec3 position = glm::vec3(0.0f); glm::vec3 velocity = glm::vec3(0.0f); glm::quat rotation = glm::identity(); - glm::vec3 scale = glm::vec3(1.0f); - uint64_t modelHash = 0; - std::string modelName; // --- Authority (replicated) --- uint64_t ownerGUID = 0xFFFFFFFFFFFFFFFF; // UNASSIGNED_RAKNET_GUID.g diff --git a/code/framework/src/scripting/builtins/entity.h b/code/framework/src/scripting/builtins/entity.h index 8200cd906..0f46eec34 100644 --- a/code/framework/src/scripting/builtins/entity.h +++ b/code/framework/src/scripting/builtins/entity.h @@ -93,13 +93,6 @@ namespace Framework::Scripting::Builtins { } } - std::string GetModelName() const { - if (auto *e = Resolve()) { - return e->modelName; - } - return ""; - } - virtual std::string ToString() const { std::ostringstream ss; ss << "Entity{ id: " << _id << " }"; @@ -128,14 +121,6 @@ namespace Framework::Scripting::Builtins { if (self) info.GetReturnValue().Set(static_cast(self->GetId())); }); - // Read-only property: modelName - protoTemplate->SetNativeDataProperty( - v8pp::to_v8(isolate, "modelName").As(), - [](v8::Local, const v8::PropertyCallbackInfo &info) { - auto *self = v8pp::class_::unwrap_object(info.GetIsolate(), info.This()); - if (self) info.GetReturnValue().Set(v8pp::to_v8(info.GetIsolate(), self->GetModelName())); - }); - // Property: position (Vector3). An accessor pair so the setter fires when a script // assigns to it through the prototype chain. { From 6eafa838482f173dfe08b0fbb1d6ba0bb23ae839 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:07:44 +0200 Subject: [PATCH 26/48] Networking: optimize interest queries and own peer teardown - Fill the interest set into an unordered_set so QueryReplicaList does O(1) membership instead of a linear scan over every entity per pump. - Return RM3SR_BROADCAST_IDENTICALLY from Serialize to match the BeginIdenticalSerialize delta and reuse one bitstream across viewers. - Replace magic 0xFFFFFFFFFFFFFFFF owner sentinels with MafiaNet::UNASSIGNED_RAKNET_GUID.g. - Destroy a dropped peer's server-created avatar in OnClosedConnection; PopConnection only removes replicas the dropped peer itself created. --- .../networking/replication/network_entity.cpp | 11 ++++--- .../networking/replication/network_entity.h | 2 +- .../replication/replication_connection.cpp | 11 +++---- .../replication/replication_manager.cpp | 30 ++++++++++++++----- .../replication/replication_manager.h | 25 +++++++++++++--- 5 files changed, 57 insertions(+), 22 deletions(-) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 838ff9b15..6d85622c4 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -20,7 +20,7 @@ namespace Framework::Networking::Replication { uint64_t NetworkEntity::MyGUID() const { const auto *manager = static_cast(replicaManager); - return manager ? manager->GetMyGUID() : 0xFFFFFFFFFFFFFFFF; + return manager ? manager->GetMyGUID() : MafiaNet::UNASSIGNED_RAKNET_GUID.g; } void NetworkEntity::WriteAllocationID(MafiaNet::Connection_RM3 *, MafiaNet::BitStream *allocationIdBitstream) const { @@ -118,9 +118,12 @@ namespace Framework::Networking::Replication { SerializeFields(&_vds, &ctx); _vds.EndSerialize(&ctx); - // Per-connection delta path: ReplicaManager3 compares against the last bytes sent to each - // system and suppresses the send when nothing changed. - return MafiaNet::RM3SR_SERIALIZED_UNIQUELY; + // BeginIdenticalSerialize already produces one delta bitstream shared across all recipients + // (the state is identical for every viewer), so pair it with the broadcast-identical result: + // ReplicaManager3 serializes once per tick and reuses those bytes for every connection, + // suppressing the send when nothing changed. Per-connection filtering (owner exclusion) still + // happens upstream in QuerySerializationWithinWorld. + return MafiaNet::RM3SR_BROADCAST_IDENTICALLY; } void NetworkEntity::Deserialize(MafiaNet::DeserializeParameters *deserializeParameters) { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index d35770a72..5b03719e9 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -43,7 +43,7 @@ namespace Framework::Networking::Replication { glm::quat rotation = glm::identity(); // --- Authority (replicated) --- - uint64_t ownerGUID = 0xFFFFFFFFFFFFFFFF; // UNASSIGNED_RAKNET_GUID.g + uint64_t ownerGUID = MafiaNet::UNASSIGNED_RAKNET_GUID.g; // --- Server-only streaming metadata (not replicated) --- // Dimension lives in the VirtualWorldReplica3 base (Get/SetVirtualWorld). diff --git a/code/framework/src/networking/replication/replication_connection.cpp b/code/framework/src/networking/replication/replication_connection.cpp index 96553ffd4..9d92d15a4 100644 --- a/code/framework/src/networking/replication/replication_connection.cpp +++ b/code/framework/src/networking/replication/replication_connection.cpp @@ -12,8 +12,7 @@ #include "network_entity.h" #include "replication_manager.h" -#include -#include +#include namespace Framework::Networking::Replication { ReplicationConnection::ReplicationConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID guid, ReplicationManager *manager, bool isServer) @@ -43,15 +42,17 @@ namespace Framework::Networking::Replication { // QuerySerialization filter and the construction check below agree. SetVirtualWorld(viewer->GetVirtualWorld()); - // Spatial interest set around the viewer. - std::vector inRange; + // Spatial interest set around the viewer. A hash set so the per-entity membership test below + // is O(1): QueryReplicaList already walks every entity, so a linear scan here would make the + // whole pass O(entities × in-range) per connection, per network update. + std::unordered_set inRange; _manager->QueryRadius(viewer->position, viewer->streamRange, inRange); _manager->ForEachEntity([&](NetworkEntity *entity) { // The owner DOES receive its own entity (so it has the replica to serialize upstream and // to recognize it as the local player). The server simply withholds serialize *updates* // to the owner via NetworkEntity::QuerySerializationWithinWorld — construction still flows. - const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && std::find(inRange.begin(), inRange.end(), entity) != inRange.end())); + const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && inRange.contains(entity))); const bool constructed = HasReplicaConstructed(entity); if (visible && !constructed) { diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index f469137ee..bd2ceadb0 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -13,7 +13,6 @@ #include -#include #include namespace Framework::Networking::Replication { @@ -87,7 +86,7 @@ namespace Framework::Networking::Replication { } void ReplicationManager::ForceState(NetworkEntity *entity) { - if (!entity || !_rpc || entity->ownerGUID == 0xFFFFFFFFFFFFFFFF) { + if (!entity || !_rpc || entity->ownerGUID == MafiaNet::UNASSIGNED_RAKNET_GUID.g) { return; } MafiaNet::BitStream bs; @@ -105,7 +104,7 @@ namespace Framework::Networking::Replication { // The new owner is otherwise blind to the change: the server withholds serialize to whoever // owns an entity, so it would never receive the updated ownerGUID. Tell it directly. Other // peers, and any previous owner that just lost authority, learn it through normal serialize. - if (_rpc && _isServer && guid != 0xFFFFFFFFFFFFFFFF) { + if (_rpc && _isServer && guid != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { MafiaNet::BitStream bs; MafiaNet::NetworkID networkId = entity->GetNetworkID(); bs.Write(networkId); @@ -133,7 +132,7 @@ namespace Framework::Networking::Replication { } // Only a viewer entity owns a viewer mapping. Owned non-viewer entities (e.g. a vehicle owned // by a player) share the player's GUID, so we must NOT clear the mapping for those. - if (entity->isViewer && entity->ownerGUID != 0xFFFFFFFFFFFFFFFF) { + if (entity->isViewer && entity->ownerGUID != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { ClearViewer(entity->ownerGUID); } // BroadcastDestruction must precede deletion; ~Replica3 dereferences automatically. @@ -193,7 +192,7 @@ namespace Framework::Networking::Replication { }); } - void ReplicationManager::QueryRadius(const glm::vec3 ¢er, float radius, std::vector &out) { + void ReplicationManager::QueryRadius(const glm::vec3 ¢er, float radius, std::unordered_set &out) { if (!_gridReady) { return; } @@ -207,14 +206,29 @@ namespace Framework::Networking::Replication { continue; } const glm::vec3 delta = entity->position - center; - // 2D (XZ) distance check; entries spanning multiple cells can repeat, so skip dupes. + // 2D (XZ) distance check; entries spanning multiple cells can repeat — the set dedupes. if (delta.x * delta.x + delta.z * delta.z > radiusSq) { continue; } - if (std::find(out.begin(), out.end(), entity) == out.end()) { - out.push_back(entity); + out.insert(entity); + } + } + + void ReplicationManager::OnClosedConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID, MafiaNet::PI2_LostConnectionReason lostConnectionReason) { + // The player's avatar is server-created, so the base PopConnection (which only tears down + // replicas a dropped peer itself created) leaves it behind. Notify the game while the avatar + // is still resolvable, then destroy it — DestroyEntity broadcasts the destruction to the + // remaining clients and clears the viewer mapping. Clients keep the base behaviour: their + // replicas all originate from the server, so PopConnection cleans them up on its own. + if (_isServer) { + if (_onClientDisconnect) { + _onClientDisconnect(rakNetGUID.g); + } + if (auto *viewer = GetViewer(rakNetGUID.g)) { + DestroyEntity(viewer); } } + ReplicaManager3::OnClosedConnection(systemAddress, rakNetGUID, lostConnectionReason); } MafiaNet::Connection_RM3 *ReplicationManager::AllocConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID) const { diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index 53c73bb80..c9d733585 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -21,6 +21,8 @@ #include #include +#include +#include #include namespace Framework::Networking::Replication { @@ -73,18 +75,32 @@ namespace Framework::Networking::Replication { // Rebuilds the spatial index from current entity positions. Server only; call once per tick // before ReplicaManager3 serializes (driven from NetworkPeer::Update). void Tick(); - // Appends entities within `radius` of `center` to `out`, de-duplicated. Interest is computed + // Inserts entities within `radius` of `center` into `out`. The set both de-duplicates the + // grid's per-cell hits and gives QueryReplicaList O(1) membership tests. Interest is computed // on the XZ ground plane only (vertical separation does not cull) — adjust if your game's // ground plane differs. - void QueryRadius(const glm::vec3 ¢er, float radius, std::vector &out); + void QueryRadius(const glm::vec3 ¢er, float radius, std::unordered_set &out); + + // Server: invoked from OnClosedConnection just before the dropped peer's avatar is destroyed, + // while it is still resolvable. The integration layer wires its player-disconnect notification + // here. + void SetOnClientDisconnect(fu2::function callback) { + _onClientDisconnect = std::move(callback); + } + + // --- ReplicaManager3 hooks --- + // Connection-drop teardown. The base only removes replicas a dropped peer itself created; + // player avatars are server-created, so on the server we additionally notify the game and + // destroy the dropped peer's viewer (DestroyEntity broadcasts the destruction to remaining + // clients), which is the missing half that otherwise leaks avatars across reconnects. + void OnClosedConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID, MafiaNet::PI2_LostConnectionReason lostConnectionReason) override; - // --- ReplicaManager3 factory hooks --- MafiaNet::Connection_RM3 *AllocConnection(const MafiaNet::SystemAddress &systemAddress, MafiaNet::RakNetGUID rakNetGUID) const override; void DeallocConnection(MafiaNet::Connection_RM3 *connection) const override; private: bool _isServer = false; - uint64_t _myGUID = 0xFFFFFFFFFFFFFFFF; + uint64_t _myGUID = MafiaNet::UNASSIGNED_RAKNET_GUID.g; // Server-side monotonic NetworkID allocator. Starts at 1 (0 reads as "none" in game code) and // stays well within JavaScript's safe-integer range so scripting can hold ids as plain numbers. // Bumped only from CreateEntity on the sim thread, so it needs no synchronization. @@ -96,5 +112,6 @@ namespace Framework::Networking::Replication { MafiaNet::RPC4 *_rpc = nullptr; GridSectorizer _grid; std::unordered_map _viewers; + fu2::function _onClientDisconnect; }; } // namespace Framework::Networking::Replication From ff49cb1d172ad95b53f60b78373fd6a730707667 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:07:53 +0200 Subject: [PATCH 27/48] Integrations: wire avatar teardown and connect metadata - Register a ReplicationManager disconnect hook that notifies the game while the avatar is still resolvable, then tears it down; the packet handler just finalises the connection. - Hand the connect callback a PlayerConnectionData (guid, slot index, nickname, hardware id) so the game spawns avatars with real metadata instead of leaving spawn-time fields at their defaults. --- .../src/integrations/server/instance.cpp | 34 ++++++++++++------- .../src/integrations/server/instance.h | 26 ++++++++++---- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 03b3c8f74..7d52146cc 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -117,6 +117,13 @@ namespace Framework::Integrations::Server { CoreModules::SetReplication(replication); if (replication) { replication->SetAutoSerializeInterval(static_cast(_opts.worldConfig.tickInterval * 1000.0f)); + // Replication owns connection teardown: when a peer drops, it notifies the game (avatar + // still resolvable) just before destroying and broadcasting the destruction of the avatar. + replication->SetOnClientDisconnect([this](uint64_t guid) { + if (_onPlayerDisconnectCallback) { + _onPlayerDisconnectCallback(guid); + } + }); } if (!_opts.bindPublicServer || !_masterlist->Init(_opts.services.apiUrl, _opts.services.masterlistUrl, _opts.bindSecretKey)) { @@ -301,18 +308,12 @@ namespace Framework::Integrations::Server { net->Send(readyMsg, guid); }); - net->SetOnPlayerDisconnectCallback([this, net](MafiaNet::Packet *packet, Framework::Networking::Messages::DisconnectionReason reason) { + net->SetOnPlayerDisconnectCallback([net](MafiaNet::Packet *packet, Framework::Networking::Messages::DisconnectionReason reason) { const auto guid = packet->guid; Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Disconnecting peer {}, reason: {}", guid.g, static_cast(reason)); - // ReplicaManager3 tears down the player's entities on drop (QueryActionOnPopConnection); - // here we notify the game and clear its viewer mapping. - if (_onPlayerDisconnectCallback) - _onPlayerDisconnectCallback(guid.g); - - if (auto *replication = net->GetReplicationManager()) - replication->ClearViewer(guid.g); - + // Player notification and avatar teardown run in ReplicationManager::OnClosedConnection, + // which RakNet fires before this packet is delivered; here we just finalise the connection. net->GetPeer()->CloseConnection(guid, true); }); @@ -325,10 +326,17 @@ namespace Framework::Integrations::Server { Logging::GetLogger(FRAMEWORK_INNER_SERVER)->info("Player {} guid {} hwid {}", msg->GetPlayerName(), guid.g, msg->GetPlayerHardwareID()); - // The game creates the player's avatar entity and registers it as this connection's - // viewer inside its onPlayerConnect handler. - if (_onPlayerConnectCallback) - _onPlayerConnectCallback(guid.g); + // The game creates the player's avatar entity and registers it as this connection's viewer + // inside its onPlayerConnect handler. Hand it the connection metadata so the avatar spawns + // with its real nickname/slot instead of the unassigned defaults. + if (_onPlayerConnectCallback) { + PlayerConnectionData data; + data.guid = guid.g; + data.playerIndex = guid.systemIndex; + data.nickname = nickname; + data.hardwareID = msg->GetPlayerHardwareID(); + _onPlayerConnectCallback(data); + } Framework::Networking::Messages::ClientConnectionFinalized answer; answer.FromParameters(_opts.worldConfig.tickInterval); diff --git a/code/framework/src/integrations/server/instance.h b/code/framework/src/integrations/server/instance.h index 71d99b62c..833f0a4b9 100644 --- a/code/framework/src/integrations/server/instance.h +++ b/code/framework/src/integrations/server/instance.h @@ -15,6 +15,8 @@ #include "logging/logger.h" #include "networking/engine.h" #include "scripting/module.h" + +#include #include "services/masterlist.h" #include "utils/config.h" #include "utils/command_listener.h" @@ -81,8 +83,20 @@ namespace Framework::Integrations::Server { }; - // Invoked with the connecting player's GUID; the game creates and owns the player's entity. - using OnPlayerConnectionCallback = fu2::function; + // Connection metadata handed to the player-connect callback so the game can create and fully + // populate the player's avatar (nickname, slot index, hardware id) instead of leaving spawn-time + // fields at their defaults. + struct PlayerConnectionData { + uint64_t guid = 0; + uint16_t playerIndex = MafiaNet::UNASSIGNED_PLAYER_INDEX; // the connection's dense slot + std::string nickname; + std::string hardwareID; + }; + + // Invoked when a player joins (with its connection metadata) or leaves (with its GUID); the game + // creates and owns the player's entity. + using OnPlayerConnectCallback = fu2::function; + using OnPlayerDisconnectCallback = fu2::function; // Chat. The sender is resolved to its viewer entity's NetworkID; command lines ("/...") are // pre-parsed into a command name and whitespace-separated arguments. @@ -119,8 +133,8 @@ namespace Framework::Integrations::Server { std::unique_ptr _streamingFactory; // callbacks - OnPlayerConnectionCallback _onPlayerConnectCallback; - OnPlayerConnectionCallback _onPlayerDisconnectCallback; + OnPlayerConnectCallback _onPlayerConnectCallback; + OnPlayerDisconnectCallback _onPlayerDisconnectCallback; OnChatMessageCallback _onChatMessageCallback; OnChatCommandCallback _onChatCommandCallback; @@ -149,11 +163,11 @@ namespace Framework::Integrations::Server { void OnSignal(sig_signal_t); - void SetOnPlayerConnectCallback(OnPlayerConnectionCallback onPlayerConnectCallback) { + void SetOnPlayerConnectCallback(OnPlayerConnectCallback onPlayerConnectCallback) { _onPlayerConnectCallback = std::move(onPlayerConnectCallback); } - void SetOnPlayerDisconnectCallback(OnPlayerConnectionCallback onPlayerDisconnectCallback) { + void SetOnPlayerDisconnectCallback(OnPlayerDisconnectCallback onPlayerDisconnectCallback) { _onPlayerDisconnectCallback = std::move(onPlayerDisconnectCallback); } From d9b7e72f35e3dc67fce5715bd3453a40e54fe8fd Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:24:26 +0200 Subject: [PATCH 28/48] Networking: never cull entities a connection owns Interest is centred on the avatar, whose transform freezes while the player is seated, so a vehicle driven one stream radius from where it was entered left the owner's interest set and got culled out from under them. Keep entities owned by the connection (its avatar and whatever it currently drives) always visible, restoring the range-exemption the old flecs streamer provided via rangeExemptEntities. --- .../replication/replication_connection.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/framework/src/networking/replication/replication_connection.cpp b/code/framework/src/networking/replication/replication_connection.cpp index 9d92d15a4..a1b81acd6 100644 --- a/code/framework/src/networking/replication/replication_connection.cpp +++ b/code/framework/src/networking/replication/replication_connection.cpp @@ -48,11 +48,15 @@ namespace Framework::Networking::Replication { std::unordered_set inRange; _manager->QueryRadius(viewer->position, viewer->streamRange, inRange); + const uint64_t myGUID = GetRakNetGUID().g; _manager->ForEachEntity([&](NetworkEntity *entity) { - // The owner DOES receive its own entity (so it has the replica to serialize upstream and - // to recognize it as the local player). The server simply withholds serialize *updates* - // to the owner via NetworkEntity::QuerySerializationWithinWorld — construction still flows. - const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && inRange.contains(entity))); + // A connection always sees the entities it owns — its avatar and anything it currently has + // authority over, e.g. the vehicle it is driving — so they are never culled out from under + // it as it moves (interest is centred on the avatar, which freezes while the player is + // seated). The server still withholds serialize *updates* to the owner via + // NetworkEntity::QuerySerializationWithinWorld; only construction/destruction is gated here. + const bool ownedByUs = entity->ownerGUID == myGUID; + const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || ownedByUs || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && inRange.contains(entity))); const bool constructed = HasReplicaConstructed(entity); if (visible && !constructed) { From d8ba1b8c1b603f196cf76698ae50485478aba0e6 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:32:44 +0200 Subject: [PATCH 29/48] Integrations: drop vestigial ClientInitPlayer round-trip The player avatar is now created during the connection handshake, so the client readiness signal gated nothing: the server handler was an empty no-op. Remove the client send and the server handler; the message class stays for downstream consumers. Also drop a stray architecture comment from the framework CMakeLists. --- code/framework/CMakeLists.txt | 1 - code/framework/src/integrations/client/instance.cpp | 6 ------ code/framework/src/integrations/server/instance.cpp | 8 -------- 3 files changed, 15 deletions(-) diff --git a/code/framework/CMakeLists.txt b/code/framework/CMakeLists.txt index b2c0172f4..e827e2891 100644 --- a/code/framework/CMakeLists.txt +++ b/code/framework/CMakeLists.txt @@ -22,7 +22,6 @@ set(FRAMEWORK_SRC src/networking/network_peer.cpp src/networking/errors.cpp - # Native MafiaNet entity replication (ReplicaManager3-based; entities own their state, no ECS) src/networking/replication/network_entity.cpp src/networking/replication/entity_factory.cpp src/networking/replication/replication_manager.cpp diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 7b897cd9c..f896cc9a7 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include @@ -372,11 +371,6 @@ namespace Framework::Integrations::Client { replication->SetAutoSerializeInterval(static_cast(msg->GetServerTickRate() * 1000.0f)); } - // The server constructs the local avatar (owned by us); the game recognizes it in - // NetworkEntity::OnConstructed by ownerGUID. Signal we are ready for it. - Framework::Networking::Messages::ClientInitPlayer initPlayer {}; - net->Send(initPlayer, MafiaNet::UNASSIGNED_RAKNET_GUID); - if (_onConnectionFinalized) { _onConnectionFinalized(msg->GetServerTickRate()); } diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 7d52146cc..c6e6a1378 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -21,7 +21,6 @@ #include "networking/messages/client_connection_finalized.h" #include "networking/messages/client_handshake.h" -#include "networking/messages/client_initialise_player.h" #include "networking/messages/client_kick.h" #include "networking/messages/client_ready_assets.h" #include "networking/messages/client_request_streamer.h" @@ -343,13 +342,6 @@ namespace Framework::Integrations::Server { net->Send(answer, guid); }); - // The client signals it is ready for player data; the player entity is already created in the - // connect handler above, so there is nothing to do here. - net->RegisterMessage(Framework::Networking::Messages::GameMessages::GAME_INIT_PLAYER, [this, net](MafiaNet::RakNetGUID guid, ClientInitPlayer *stub) { - (void)guid; - (void)stub; - }); - // Incoming chat from clients. Sender resolution + command parsing happen here; the mod // observes via SetOnChatMessageCallback / SetOnChatCommandCallback. net->RegisterRPC([this](const Framework::Networking::RPC::ChatMessage &payload, MafiaNet::Packet *packet) { From 65ceb9b5eefc97e91c0a9b91f82e51b0f39f693e Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:49:33 +0200 Subject: [PATCH 30/48] Networking: expose entity ownership predicate on NetworkEntity The owner check (ownerGUID == local peer GUID) was copy-pasted per entity type in the mods. Add NetworkEntity::IsOwner so the predicate lives with the rest of the ownership mechanism; what owning means stays game-specific. --- code/framework/src/networking/replication/network_entity.cpp | 4 ++++ code/framework/src/networking/replication/network_entity.h | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 6d85622c4..d00b49235 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -96,6 +96,10 @@ namespace Framework::Networking::Replication { } } + bool NetworkEntity::IsOwner() const { + return ownerGUID == MyGUID(); + } + // --- Per-tick delta serialization (VariableDeltaSerializer) --- void NetworkEntity::OnUserReplicaPreSerializeTick() { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index 5b03719e9..a659e4cc9 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -97,6 +97,11 @@ namespace Framework::Networking::Replication { // UNASSIGNED_RAKNET_GUID.g to return ownership to the server. void SetOwner(uint64_t guid); + // True on the peer with authority over this entity: the owning client, or the server for + // server-owned entities. The game decides what owning means (bind the local avatar, drive + // updates upstream, ...); this just answers who holds authority. + bool IsOwner() const; + // --- Replica3 implementation --- void WriteAllocationID(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::BitStream *allocationIdBitstream) const override; void SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *destinationConnection) override; From c73d795bcfb2004ae66027c72fd5af9227887fa9 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:26:32 +0200 Subject: [PATCH 31/48] Networking: compress NetworkID in ForceState and SetOwner RPCs NetworkIDs are small and monotonic, so WriteCompressed strips the leading zero bytes; ownerGUID stays raw since GUIDs do not compress. --- .../src/networking/replication/replication_manager.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index bd2ceadb0..1f0021396 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -36,7 +36,7 @@ namespace Framework::Networking::Replication { return; } MafiaNet::NetworkID networkId; - bs->Read(networkId); + bs->ReadCompressed(networkId); auto *entity = manager->GetEntityByNetworkID(networkId); if (!entity) { @@ -53,7 +53,7 @@ namespace Framework::Networking::Replication { } MafiaNet::NetworkID networkId; uint64_t ownerGUID = 0; - bs->Read(networkId); + bs->ReadCompressed(networkId); bs->Read(ownerGUID); if (auto *entity = manager->GetEntityByNetworkID(networkId)) { @@ -91,7 +91,8 @@ namespace Framework::Networking::Replication { } MafiaNet::BitStream bs; MafiaNet::NetworkID networkId = entity->GetNetworkID(); - bs.Write(networkId); + // NetworkIDs are small and monotonic, so WriteCompressed strips the leading zero bytes. + bs.WriteCompressed(networkId); entity->WriteForcedState(&bs); _rpc->Signal(kForceStateId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(entity->ownerGUID), false, false); } @@ -107,7 +108,7 @@ namespace Framework::Networking::Replication { if (_rpc && _isServer && guid != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { MafiaNet::BitStream bs; MafiaNet::NetworkID networkId = entity->GetNetworkID(); - bs.Write(networkId); + bs.WriteCompressed(networkId); bs.Write(guid); _rpc->Signal(kSetOwnerId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(guid), false, false); } From 57adc3acc22d99d59529bd3fe968e25de88a69f3 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:29:35 +0200 Subject: [PATCH 32/48] Networking: own server-unassigned entities in IsOwner IsOwner now reports the server as authoritative over entities left unowned (ownerGUID == UNASSIGNED), matching the documented contract. --- .../framework/src/networking/replication/network_entity.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index d00b49235..1fefe0dc3 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -97,7 +97,11 @@ namespace Framework::Networking::Replication { } bool NetworkEntity::IsOwner() const { - return ownerGUID == MyGUID(); + if (ownerGUID == MyGUID()) { + return true; + } + // The server holds authority over entities left unowned (server-owned). + return IsServerPeer() && ownerGUID == MafiaNet::UNASSIGNED_RAKNET_GUID.g; } // --- Per-tick delta serialization (VariableDeltaSerializer) --- From b8d1c48006f40de5b72d52959372bed424ee3838 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:29:35 +0200 Subject: [PATCH 33/48] Networking: correct Serialize doc to broadcast-identically --- code/framework/src/networking/replication/network_entity.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index a659e4cc9..a4f6be948 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -26,8 +26,9 @@ namespace Framework::Networking::Replication { // // Per-tick updates go through MafiaNet::VariableDeltaSerializer: each variable is compared // against the last value sent to a system and transmitted only when it changes. Construction - // sends a full snapshot. Serialize() returns RM3SR_SERIALIZED_UNIQUELY; ReplicaManager3 calls it - // per connection while the delta serializer reuses one bitstream within a tick. + // sends a full snapshot. Serialize() returns RM3SR_BROADCAST_IDENTICALLY: the delta serializer + // builds one bitstream once per tick and ReplicaManager3 reuses those bytes for every + // connection (per-connection owner filtering still happens in QuerySerializationWithinWorld). // // Authority: QuerySerialization is keyed on ownerGUID — the server serializes to everyone except // the owner, the owning client serializes upstream, and Deserialize accepts state only from the From 4cf349cbb69f886a50cc51446b29f3b6ec5971e7 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:29:36 +0200 Subject: [PATCH 34/48] Core: assert against double replication registration --- code/framework/src/core_modules.h | 1 + 1 file changed, 1 insertion(+) diff --git a/code/framework/src/core_modules.h b/code/framework/src/core_modules.h index e65035b62..ae866dc11 100644 --- a/code/framework/src/core_modules.h +++ b/code/framework/src/core_modules.h @@ -60,6 +60,7 @@ namespace Framework { } static void SetReplication(Networking::Replication::ReplicationManager *replication) { + FW_ASSERT_MODULE_REGISTRATION(_replication, replication, "Replication"); _replication = replication; } From 59486235e306b21d5c7051300449fef2e51661e3 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:29:36 +0200 Subject: [PATCH 35/48] Integrations: drop unused and duplicate includes --- code/framework/src/integrations/server/instance.cpp | 1 - code/framework/src/integrations/server/scripting/module.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index c6e6a1378..3a787f3a6 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -13,7 +13,6 @@ #include #include "core_modules.h" -#include "networking/replication/replication_manager.h" #include "networking/replication/network_entity.h" #include "networking/replication/replication_manager.h" diff --git a/code/framework/src/integrations/server/scripting/module.cpp b/code/framework/src/integrations/server/scripting/module.cpp index 4534da0d1..c99a5ac44 100644 --- a/code/framework/src/integrations/server/scripting/module.cpp +++ b/code/framework/src/integrations/server/scripting/module.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include From 8fda339f38b9a4df37dcd93790402d3c393c5c96 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:04:50 +0200 Subject: [PATCH 36/48] Networking: replace custom handshake with stock plugins Drop the five hand-rolled handshake messages (ClientHandshake, ClientReadyAssets, ClientRequestStreamer, ClientConnectionFinalized, ClientKick) for native MafiaNet plugins and RPC4 payloads. The build/version check is now a TwoWayAuthentication challenge on an exact build token (game name + version + framework + mod versions). The resource list, client identity and kick reason move to RPC4 (ServerResources, ClientIdentity, Kick); the spawn handshake uses ReadyEvent. Gate replication behind the handshake: the server now calls SetAutoManageConnections(false, true) and pushes the replica connection only once the peer is authenticated and its assets are in, so replication can no longer begin before the handshake completes. --- .../src/integrations/client/instance.cpp | 91 ++++++------ .../src/integrations/client/instance.h | 4 + .../src/integrations/server/instance.cpp | 105 +++++--------- .../messages/client_connection_finalized.h | 41 ------ .../networking/messages/client_handshake.h | 62 --------- .../src/networking/messages/client_kick.h | 51 ------- .../networking/messages/client_ready_assets.h | 131 ------------------ .../messages/client_request_streamer.h | 62 --------- .../src/networking/messages/messages.h | 15 +- .../src/networking/network_client.cpp | 37 ++++- .../framework/src/networking/network_client.h | 6 + .../framework/src/networking/network_peer.cpp | 7 + code/framework/src/networking/network_peer.h | 27 ++++ .../src/networking/network_server.cpp | 61 ++++++++ .../framework/src/networking/network_server.h | 30 ++++ .../src/networking/rpc/client_identity.h | 33 +++++ code/framework/src/networking/rpc/kick.h | 31 +++++ .../src/networking/rpc/server_resources.h | 58 ++++++++ 18 files changed, 380 insertions(+), 472 deletions(-) delete mode 100644 code/framework/src/networking/messages/client_connection_finalized.h delete mode 100644 code/framework/src/networking/messages/client_handshake.h delete mode 100644 code/framework/src/networking/messages/client_kick.h delete mode 100644 code/framework/src/networking/messages/client_ready_assets.h delete mode 100644 code/framework/src/networking/messages/client_request_streamer.h create mode 100644 code/framework/src/networking/rpc/client_identity.h create mode 100644 code/framework/src/networking/rpc/kick.h create mode 100644 code/framework/src/networking/rpc/server_resources.h diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index f896cc9a7..4ddcbd49d 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -8,17 +8,13 @@ #include "instance.h" -#include -#include -#include -#include -#include - - #include "integrations/shared/rpc/emit_lua_event.h" #include "networking/rpc/rpc.h" #include "networking/rpc/chat_message.h" +#include "networking/rpc/client_identity.h" +#include "networking/rpc/kick.h" +#include "networking/rpc/server_resources.h" #include "scripting/resource/resource_manager.h" #include "scripting/builtins/events.h" @@ -336,52 +332,53 @@ namespace Framework::Integrations::Client { void Instance::InitNetworkingMessages() { using namespace Framework::Networking::Messages; const auto net = _networkingEngine->GetNetworkClient(); - net->SetOnPlayerConnectedCallback([this, net](MafiaNet::Packet *packet) { - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection accepted by server, sending handshake"); - - ClientHandshake msg; - msg.FromParameters(_opts.modVersion, Utils::Version::rel, _opts.gameVersion, _opts.gameName); + // Build gate: NetworkClient challenges automatically on connect; a mismatch drops us. + net->SetBuildToken(Framework::Networking::NetworkPeer::BuildToken(_opts.gameName, _opts.gameVersion, Utils::Version::rel, _opts.modVersion)); - net->Send(msg, MafiaNet::UNASSIGNED_RAKNET_GUID); + net->SetOnPlayerConnectedCallback([](MafiaNet::Packet *) { + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection accepted by server, verifying build"); }); - net->RegisterMessage(GameMessages::GAME_CONNECTION_READY_ASSETS, [this, net](MafiaNet::RakNetGUID _guid, ClientReadyAssets *msg) { - // Store resource list on instance (survives scripting module reset) - if (msg->GetResourceCount() > 0) { - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Received resource list from server with {} resources", msg->GetResourceCount()); - - _pendingServerResources.clear(); - _pendingServerResources.reserve(msg->GetResourceCount()); - for (const auto &resInfo : msg->GetResources()) { - Client::Scripting::ServerResourceInfo info; - info.name = resInfo.name; - info.version = resInfo.version; - info.hash = resInfo.hash; - _pendingServerResources.push_back(info); - } + + // Server's resource list. Store it (survives a scripting module reset) and start the asset + // phase; the ready-event id and tick rate are held until the spawn barrier completes. + net->RegisterRPC([this](const Framework::Networking::RPC::ServerResources &payload, MafiaNet::Packet *) { + _readyEventId = payload.readyEventId; + _serverTickRate = payload.tickRate; + + _pendingServerResources.clear(); + _pendingServerResources.reserve(payload.resources.size()); + for (const auto &resInfo : payload.resources) { + Client::Scripting::ServerResourceInfo info; + info.name = resInfo.name; + info.version = resInfo.version; + info.hash = resInfo.hash; + _pendingServerResources.push_back(info); } + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Received resource list from server with {} resources", _pendingServerResources.size()); DownloadsAssetsFromConnectedServer(); }); - net->RegisterMessage(GameMessages::GAME_CONNECTION_FINALIZED, [this, net](MafiaNet::RakNetGUID _guid, ClientConnectionFinalized *msg) { - Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection request finalized"); - // The replication manager (owned by the peer) is the networked world; serialize owned - // entities upstream at the server's tick rate (tickInterval is in seconds). + + // Spawn barrier complete: activate replication and report the connection final. + net->SetOnConnectionReadyCallback([this, net](int eventId) { + Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection ready (event {}), finalizing", eventId); + // tickInterval is in seconds; SetAutoSerializeInterval wants milliseconds. if (auto *replication = net->GetReplicationManager()) { CoreModules::SetReplication(replication); - replication->SetAutoSerializeInterval(static_cast(msg->GetServerTickRate() * 1000.0f)); + replication->SetAutoSerializeInterval(static_cast(_serverTickRate * 1000.0f)); } - if (_onConnectionFinalized) { - _onConnectionFinalized(msg->GetServerTickRate()); + _onConnectionFinalized(_serverTickRate); } }); - net->RegisterMessage(GameMessages::GAME_CONNECTION_KICKED, [](MafiaNet::RakNetGUID guid, ClientKick *msg) { - std::string reason = "Unknown."; - switch (msg->GetDisconnectionReason()) { + // Explicit kick with a reason (version mismatches fail the build challenge, not this). + net->RegisterRPC([](const Framework::Networking::RPC::Kick &payload, MafiaNet::Packet *) { + std::string reason = "Unknown."; + switch (static_cast(payload.reason)) { case Framework::Networking::Messages::DisconnectionReason::BANNED: reason = "You are banned."; break; case Framework::Networking::Messages::DisconnectionReason::KICKED: reason = "You have been kicked."; break; - case Framework::Networking::Messages::DisconnectionReason::KICKED_CUSTOM: reason = "You have been kicked. Reason: " + msg->GetCustomReason(); break; + case Framework::Networking::Messages::DisconnectionReason::KICKED_CUSTOM: reason = "You have been kicked. Reason: " + payload.customReason; break; case Framework::Networking::Messages::DisconnectionReason::KICKED_INVALID_PACKET: reason = "You have been kicked (invalid packet)."; break; case Framework::Networking::Messages::DisconnectionReason::WRONG_VERSION: reason = "You have been kicked (wrong client version)."; break; case Framework::Networking::Messages::DisconnectionReason::INVALID_PASSWORD: reason = "You have been kicked (wrong password)."; break; @@ -537,14 +534,22 @@ namespace Framework::Integrations::Client { } Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->flush(); - // Send the server a request to initialise our client and assign a streamer - // but only do so the first time we connect to the server + // Announce ourselves (server builds the avatar and opens the replication gate), then arm our + // half of the spawn barrier. First connect only. if (!_initialDownloadDone) { _initialDownloadDone = true; - Framework::Networking::Messages::ClientRequestStreamer req; - req.FromParameters(_currentState.nickname, "MY_SUPER_ID_1", "MY_SUPER_ID_2", Framework::Utils::GetHardwareId()); - net->Send(req, MafiaNet::UNASSIGNED_RAKNET_GUID); + const auto serverGuid = net->GetPeer()->GetGUIDFromIndex(0); + + Framework::Networking::RPC::ClientIdentity identity; + identity.name = _currentState.nickname; + identity.steamId = "MY_SUPER_ID_1"; + identity.discordId = "MY_SUPER_ID_2"; + identity.hardwareId = Framework::Utils::GetHardwareId(); + net->SendRPC(identity, serverGuid); + + net->GetReadyEvent()->AddToWaitList(_readyEventId, serverGuid); + net->GetReadyEvent()->SetEvent(_readyEventId, true); } _downloadStatus = {}; diff --git a/code/framework/src/integrations/client/instance.h b/code/framework/src/integrations/client/instance.h index dc369a814..64c1feade 100644 --- a/code/framework/src/integrations/client/instance.h +++ b/code/framework/src/integrations/client/instance.h @@ -120,6 +120,10 @@ namespace Framework::Integrations::Client { // Pending resources from server (stored here to survive scripting module reset) std::vector _pendingServerResources; + // Handshake state carried from ServerResources until the ReadyEvent spawn barrier completes. + int _readyEventId {}; + float _serverTickRate {}; + void InitNetworkingMessages(); void InitAssetDownloader(); void OnAssetsDownloaded(bool success); diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 3a787f3a6..a89b3b726 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -17,12 +17,9 @@ #include "networking/replication/network_entity.h" #include "networking/replication/replication_manager.h" #include "networking/rpc/chat_message.h" +#include "networking/rpc/client_identity.h" +#include "networking/rpc/server_resources.h" -#include "networking/messages/client_connection_finalized.h" -#include "networking/messages/client_handshake.h" -#include "networking/messages/client_kick.h" -#include "networking/messages/client_ready_assets.h" -#include "networking/messages/client_request_streamer.h" #include "networking/messages/messages.h" #include "utils/command_processor.h" @@ -243,67 +240,23 @@ namespace Framework::Integrations::Server { void Instance::InitNetworkingMessages() const { using namespace Framework::Networking::Messages; const auto net = _networkingEngine->GetNetworkServer(); - net->RegisterMessage(Framework::Networking::Messages::GameMessages::GAME_CONNECTION_HANDSHAKE, [this, net](MafiaNet::RakNetGUID guid, ClientHandshake *msg) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Received handshake message for incoming player guid {}", guid.g); + // Build gate: a mismatched token fails the challenge inside NetworkServer; the peer never + // reaches the asset phase. + net->SetBuildToken(Framework::Networking::NetworkPeer::BuildToken(_opts.gameName, _opts.gameVersion, Utils::Version::rel, _opts.modVersion)); - // Make sure handshake payload was correctly formatted - if (!msg->Valid()) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->error("Handshake payload was invalid, force-disconnecting peer"); - net->GetPeer()->CloseConnection(guid, true); - return; - } - - if (msg->GetGameName() != _opts.gameName) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->error("Client has invalid game, force-disconnecting peer"); - Framework::Networking::Messages::ClientKick kick; - kick.FromParameters(Framework::Networking::Messages::DisconnectionReason::WRONG_VERSION); - net->Send(kick, guid); - net->GetPeer()->CloseConnection(guid, true); - return; - } - - const auto fwVersion = msg->GetFWVersion(); + // Build verified -> send the resource list (carries the ReadyEvent id and tick rate). + net->SetOnClientAuthenticatedCallback([this, net](MafiaNet::RakNetGUID guid) { + Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Build verified for player guid {}, sending resource list", guid.g); - if (!Utils::Version::VersionSatisfies(fwVersion, Utils::Version::rel)) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->error("Client has invalid Framework version, force-disconnecting peer"); - Framework::Networking::Messages::ClientKick kick; - kick.FromParameters(Framework::Networking::Messages::DisconnectionReason::WRONG_VERSION); - net->Send(kick, guid); - net->GetPeer()->CloseConnection(guid, true); - return; - } - - const auto clientVersion = msg->GetClientVersion(); - - if (!Utils::Version::VersionSatisfies(clientVersion, _opts.modVersion)) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->error("Client has invalid version, force-disconnecting peer"); - Framework::Networking::Messages::ClientKick kick; - kick.FromParameters(Framework::Networking::Messages::DisconnectionReason::WRONG_VERSION); - net->Send(kick, guid); - net->GetPeer()->CloseConnection(guid, true); - return; - } - - const auto mpClientVersion = msg->GetGameVersion(); - - if (mpClientVersion != _opts.gameVersion) { - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->error("Client has invalid game version, force-disconnecting peer"); - Framework::Networking::Messages::ClientKick kick; - kick.FromParameters(Framework::Networking::Messages::DisconnectionReason::WRONG_VERSION); - net->Send(kick, guid); - net->GetPeer()->CloseConnection(guid, true); - return; - } - - // Let the client know they can ask for client-side assets now. - // Include the resource list in the message. - ClientReadyAssets readyMsg; + Framework::Networking::RPC::ServerResources resources; + resources.readyEventId = Framework::Networking::NetworkServer::ReadyEventId(guid); + resources.tickRate = _opts.worldConfig.tickInterval; if (_scriptingModule) { for (const auto &resource : _scriptingModule->GetClientResourceList()) { - readyMsg.AddResource(resource.name, resource.version, 0); // Hash computed on demand + resources.resources.push_back({resource.name, resource.version, 0}); // Hash computed on demand } } - net->Send(readyMsg, guid); + net->SendRPC(resources, guid); }); net->SetOnPlayerDisconnectCallback([net](MafiaNet::Packet *packet, Framework::Networking::Messages::DisconnectionReason reason) { @@ -315,30 +268,40 @@ namespace Framework::Integrations::Server { net->GetPeer()->CloseConnection(guid, true); }); - - net->RegisterMessage(GameMessages::GAME_CONNECTION_REQUEST_STREAMER, [this, net](MafiaNet::RakNetGUID guid, ClientRequestStreamer *msg) { - auto nickname = msg->GetPlayerName(); + // Client announces itself after assets. Gated on authentication so an unverified peer can't + // conjure an avatar by sending this directly. + net->RegisterRPC([this, net](const Framework::Networking::RPC::ClientIdentity &payload, MafiaNet::Packet *packet) { + const auto guid = packet->guid; + if (!net->IsAuthenticated(guid)) { + Logging::GetLogger(FRAMEWORK_INNER_SERVER)->warn("Ignoring identity from unauthenticated peer {}", guid.g); + return; + } + + auto nickname = payload.name; if (nickname.size() > 64) { nickname = nickname.substr(0, 64); } - Logging::GetLogger(FRAMEWORK_INNER_SERVER)->info("Player {} guid {} hwid {}", msg->GetPlayerName(), guid.g, msg->GetPlayerHardwareID()); + Logging::GetLogger(FRAMEWORK_INNER_SERVER)->info("Player {} guid {} hwid {}", nickname, guid.g, payload.hardwareId); - // The game creates the player's avatar entity and registers it as this connection's viewer - // inside its onPlayerConnect handler. Hand it the connection metadata so the avatar spawns - // with its real nickname/slot instead of the unassigned defaults. + // The game builds the avatar and registers it as this connection's viewer; hand it the + // metadata so it spawns with the real nickname/slot. if (_onPlayerConnectCallback) { PlayerConnectionData data; data.guid = guid.g; data.playerIndex = guid.systemIndex; data.nickname = nickname; - data.hardwareID = msg->GetPlayerHardwareID(); + data.hardwareID = payload.hardwareId; _onPlayerConnectCallback(data); } - Framework::Networking::Messages::ClientConnectionFinalized answer; - answer.FromParameters(_opts.worldConfig.tickInterval); - net->Send(answer, guid); + // Gate opens: this connection now starts receiving the replicated world. + net->PushReplicationConnection(guid); + + // Arm our half of the spawn barrier (the client armed its half before sending identity). + const int eventId = Framework::Networking::NetworkServer::ReadyEventId(guid); + net->GetReadyEvent()->AddToWaitList(eventId, guid); + net->GetReadyEvent()->SetEvent(eventId, true); }); // Incoming chat from clients. Sender resolution + command parsing happen here; the mod diff --git a/code/framework/src/networking/messages/client_connection_finalized.h b/code/framework/src/networking/messages/client_connection_finalized.h deleted file mode 100644 index 46d2dadc7..000000000 --- a/code/framework/src/networking/messages/client_connection_finalized.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "messages.h" - -#include - -namespace Framework::Networking::Messages { - class ClientConnectionFinalized final: public IMessage { - private: - float _serverTickRate = 0.0f; - - public: - uint8_t GetMessageID() const override { - return GAME_CONNECTION_FINALIZED; - } - - void FromParameters(float tickRate) { - _serverTickRate = tickRate; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _serverTickRate); - } - - bool Valid() const override { - return _serverTickRate > 0.0f; - } - - float GetServerTickRate() const { - return _serverTickRate; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/client_handshake.h b/code/framework/src/networking/messages/client_handshake.h deleted file mode 100644 index e25bc8c5f..000000000 --- a/code/framework/src/networking/messages/client_handshake.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "messages.h" - -#include - -namespace Framework::Networking::Messages { - class ClientHandshake final: public IMessage { - private: - MafiaNet::RakString _clientVersion = ""; - MafiaNet::RakString _fwVersion = ""; - MafiaNet::RakString _gameVersion = ""; - MafiaNet::RakString _gameName = ""; - - public: - uint8_t GetMessageID() const override { - return GAME_CONNECTION_HANDSHAKE; - } - - void FromParameters(const std::string &clientVersion, const std::string &fwVersion, const std::string &gameVersion, const std::string &gameName) { - _fwVersion = MafiaNet::RakString(fwVersion.c_str()); - _clientVersion = MafiaNet::RakString(clientVersion.c_str()); - _gameVersion = MafiaNet::RakString(gameVersion.c_str()); - _gameName = MafiaNet::RakString(gameName.c_str()); - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _fwVersion); - bs->Serialize(write, _clientVersion); - bs->Serialize(write, _gameVersion); - bs->Serialize(write, _gameName); - } - - bool Valid() const override { - return _fwVersion.GetLength() > 0 && _clientVersion.GetLength() > 0 && _gameVersion.GetLength() > 0 && _gameName.GetLength() > 0; - } - - std::string GetFWVersion() const { - return _fwVersion.C_String(); - } - - std::string GetClientVersion() const { - return _clientVersion.C_String(); - } - - std::string GetGameVersion() const { - return _gameVersion.C_String(); - } - - std::string GetGameName() const { - return _gameName.C_String(); - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/client_kick.h b/code/framework/src/networking/messages/client_kick.h deleted file mode 100644 index 35f8e5a16..000000000 --- a/code/framework/src/networking/messages/client_kick.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "messages.h" - -#include - -namespace Framework::Networking::Messages { - class ClientKick final: public IMessage { - private: - DisconnectionReason _reason = DisconnectionReason::UNKNOWN; - MafiaNet::RakString _customReason; - - public: - uint8_t GetMessageID() const override { - return GAME_CONNECTION_KICKED; - } - - void FromParameters(DisconnectionReason reason, const std::string customReason = "") { - _reason = reason; - _customReason = customReason.c_str(); - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _reason); - bs->Serialize(write, _customReason); - } - - bool Valid() const override { - if (_reason == DisconnectionReason::KICKED_CUSTOM && _customReason.GetLength() == 0) { - return false; - } - return true; - } - - DisconnectionReason GetDisconnectionReason() const { - return _reason; - } - - std::string GetCustomReason() const { - return std::string(_customReason.C_String()); - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/client_ready_assets.h b/code/framework/src/networking/messages/client_ready_assets.h deleted file mode 100644 index 1f2a3cf9c..000000000 --- a/code/framework/src/networking/messages/client_ready_assets.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "messages.h" - -#include -#include -#include -#include - -namespace Framework::Networking::Messages { - - /** - * Information about a single resource for synchronization. - */ - struct ResourceInfo { - std::string name; - std::string version; - uint32_t hash = 0; // Content hash for cache invalidation - - void Serialize(MafiaNet::BitStream *bs, bool write) { - if (write) { - // Write name - uint16_t nameLen = static_cast(name.length()); - bs->Write(nameLen); - if (nameLen > 0) { - bs->Write(name.c_str(), nameLen); - } - - // Write version - uint16_t versionLen = static_cast(version.length()); - bs->Write(versionLen); - if (versionLen > 0) { - bs->Write(version.c_str(), versionLen); - } - - // Write hash - bs->Write(hash); - } - else { - // Read name - uint16_t nameLen = 0; - bs->Read(nameLen); - if (nameLen > 0 && nameLen < 256) { - name.resize(nameLen); - bs->Read(&name[0], nameLen); - } - - // Read version - uint16_t versionLen = 0; - bs->Read(versionLen); - if (versionLen > 0 && versionLen < 64) { - version.resize(versionLen); - bs->Read(&version[0], versionLen); - } - - // Read hash - bs->Read(hash); - } - } - }; - - /** - * Message sent from server to client when assets are ready for download. - * Contains the client entry point script and list of resources to load. - */ - class ClientReadyAssets final: public IMessage { - private: - MafiaNet::RakString _clientEntryPoint; - std::vector _resources; - - public: - uint8_t GetMessageID() const override { - return GAME_CONNECTION_READY_ASSETS; - } - - void FromParameters(const std::string& clientEntryPoint) { - _clientEntryPoint = clientEntryPoint.c_str(); - } - - void AddResource(const std::string &name, const std::string &version, uint32_t hash) { - _resources.push_back({name, version, hash}); - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _clientEntryPoint); - - if (write) { - uint16_t count = static_cast(_resources.size()); - bs->Write(count); - for (auto &resource : _resources) { - resource.Serialize(bs, true); - } - } - else { - uint16_t count = 0; - bs->Read(count); - _resources.clear(); - _resources.reserve(count); - for (uint16_t i = 0; i < count && i < 1000; ++i) { // Limit to 1000 resources - ResourceInfo info; - info.Serialize(bs, false); - _resources.push_back(info); - } - } - } - - const std::string GetClientEntryPoint() const { - return _clientEntryPoint.C_String(); - } - - const std::vector &GetResources() const { - return _resources; - } - - size_t GetResourceCount() const { - return _resources.size(); - } - - bool Valid() const override { - return true; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/client_request_streamer.h b/code/framework/src/networking/messages/client_request_streamer.h deleted file mode 100644 index 4608765f0..000000000 --- a/code/framework/src/networking/messages/client_request_streamer.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "messages.h" - -#include - -namespace Framework::Networking::Messages { - class ClientRequestStreamer final: public IMessage { - private: - MafiaNet::RakString _playerName = ""; - MafiaNet::RakString _playerSteamId = ""; - MafiaNet::RakString _playerDiscordId = ""; - MafiaNet::RakString _playerHardwareId = ""; - - public: - uint8_t GetMessageID() const override { - return GAME_CONNECTION_REQUEST_STREAMER; - } - - void FromParameters(const std::string &playerName, const std::string &playerSteamId, const std::string &playerDiscordId, const std::string &playerHardwareId = "") { - _playerName = MafiaNet::RakString(playerName.c_str()); - _playerSteamId = MafiaNet::RakString(playerSteamId.c_str()); - _playerDiscordId = MafiaNet::RakString(playerDiscordId.c_str()); - _playerHardwareId = MafiaNet::RakString(playerHardwareId.c_str()); - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override { - bs->Serialize(write, _playerName); - bs->Serialize(write, _playerSteamId); - bs->Serialize(write, _playerDiscordId); - bs->Serialize(write, _playerHardwareId); - } - - bool Valid() const override { - return _playerName.GetLength() > 0 && (_playerSteamId.GetLength() > 0 || _playerDiscordId.GetLength() > 0); - } - - std::string GetPlayerName() const { - return _playerName.C_String(); - } - - std::string GetPlayerSteamID() const { - return _playerSteamId.C_String(); - } - - std::string GetPlayerDiscordID() const { - return _playerDiscordId.C_String(); - } - - std::string GetPlayerHardwareID() const { - return _playerHardwareId.C_String(); - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/messages.h b/code/framework/src/networking/messages/messages.h index 58953a47d..2d8f47c7e 100644 --- a/code/framework/src/networking/messages/messages.h +++ b/code/framework/src/networking/messages/messages.h @@ -31,17 +31,12 @@ namespace Framework::Networking::Messages { using PacketCallback = fu2::function; using DisconnectPacketCallback = fu2::function; - // Connection-handshake flow messages. (RPCs are dispatched by RPC4 and entity sync by - // ReplicaManager3, both of which use their own message IDs.) + // Custom message IDs. The connection handshake no longer uses any: build verification is + // TwoWayAuthentication, the resource list / client identity / kick are RPC4 payloads, the spawn + // barrier is ReadyEvent, and entity sync is ReplicaManager3 — all of which use their own message + // IDs. Mods extend their own messages from GAME_NEXT_MESSAGE_ID. enum GameMessages : uint8_t { - // Game messages handling common client connection flow - GAME_CONNECTION_HANDSHAKE = ID_USER_PACKET_ENUM + 1, - GAME_CONNECTION_ACKNOWLEDGE_CLIENT, - GAME_CONNECTION_READY_ASSETS, - GAME_CONNECTION_REQUEST_STREAMER, - GAME_CONNECTION_FINALIZED, - GAME_CONNECTION_KICKED, - GAME_INIT_PLAYER, + GAME_INIT_PLAYER = ID_USER_PACKET_ENUM + 1, // Messages used by the mod GAME_NEXT_MESSAGE_ID diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index a1bdcb870..2684cc787 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -107,10 +107,13 @@ namespace Framework::Networking { bool NetworkClient::HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) { switch (packetID) { case ID_CONNECTION_REQUEST_ACCEPTED: { + _state = PeerState::CONNECTED; if (_onPlayerConnectedCallback) { _onPlayerConnectedCallback(_packet); } - _state = PeerState::CONNECTED; + // Prove our build matches before anything else; the server sends ServerResources only + // after this passes. A mismatch is handled by the auth-failure cases below. + _twoWayAuth.Challenge(NetworkPeer::kBuildChallengeId, _packet->guid); return true; }; @@ -161,6 +164,38 @@ namespace Framework::Networking { _state = PeerState::DISCONNECTED; return true; }; + + // Build gate: verified -> wait for the server's ServerResources RPC; mismatch -> disconnect. + case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_SUCCESS: { + Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Build verified by server"); + return true; + }; + case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_FAILURE: + case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT: { + Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->error("Build mismatch with server, disconnecting"); + if (_onPlayerDisconnectedCallback) { + _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::WRONG_VERSION); + } + _state = PeerState::DISCONNECTED; + return true; + }; + + case ID_READY_EVENT_ALL_SET: { + // Payload: message id then int eventId (ReadyEvent::PushCompletionPacket). + MafiaNet::BitStream bs(_packet->data + _packetDataOffset, _packet->length - _packetDataOffset, false); + bs.IgnoreBytes(sizeof(MafiaNet::MessageID)); + int eventId = 0; + bs.Read(eventId); + if (_onConnectionReadyCallback) { + _onConnectionReadyCallback(eventId); + } + return true; + }; + case ID_READY_EVENT_SET: + case ID_READY_EVENT_UNSET: + case ID_READY_EVENT_QUERY: + case ID_READY_EVENT_FORCE_ALL_SET: + return true; } return false; } diff --git a/code/framework/src/networking/network_client.h b/code/framework/src/networking/network_client.h index 0fc6041b6..e3417758c 100644 --- a/code/framework/src/networking/network_client.h +++ b/code/framework/src/networking/network_client.h @@ -38,6 +38,7 @@ namespace Framework::Networking { Messages::PacketCallback _onPlayerConnectedCallback; Messages::DisconnectPacketCallback _onPlayerDisconnectedCallback; OnAssetsDownloadFailedCallback _onAssetsDownloadFailedCallback; + fu2::function _onConnectionReadyCallback; AssetFileTransfer _fileListTransfer; public: @@ -76,5 +77,10 @@ namespace Framework::Networking { void SetOnAssetsDownloadFailedCallback(OnAssetsDownloadFailedCallback callback) { _onAssetsDownloadFailedCallback = std::move(callback); } + + // Fired when the spawn barrier completes — the client activates replication and finalizes. + void SetOnConnectionReadyCallback(fu2::function callback) { + _onConnectionReadyCallback = std::move(callback); + } }; } // namespace Framework::Networking diff --git a/code/framework/src/networking/network_peer.cpp b/code/framework/src/networking/network_peer.cpp index f243cfa40..83e5253ae 100644 --- a/code/framework/src/networking/network_peer.cpp +++ b/code/framework/src/networking/network_peer.cpp @@ -21,6 +21,8 @@ namespace Framework::Networking { // attached by the concrete peer's Init() once its connection factory exists. _peer->AttachPlugin(&_rpc); _peer->AttachPlugin(&_statisticsHistory); + _peer->AttachPlugin(&_twoWayAuth); + _peer->AttachPlugin(&_readyEvent); _statisticsHistory.SetTrackConnections(true, 0, true); _replicationManager = std::make_unique(); @@ -28,6 +30,11 @@ namespace Framework::Networking { NetworkPeer::~NetworkPeer() = default; + void NetworkPeer::SetBuildToken(const std::string &token) { + // Re-registering the identifier overwrites the previous password; safe to call again. + _twoWayAuth.AddPassword(kBuildChallengeId, MafiaNet::RakString(token.c_str())); + } + bool NetworkPeer::Send(Messages::IMessage &msg, MafiaNet::RakNetGUID guid, PacketPriority priority, PacketReliability reliability) const { if (!_peer) { return false; diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index cc327872d..5d25efba2 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -16,7 +16,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -47,6 +49,11 @@ namespace Framework::Networking { MafiaNet::NetworkIDManager _networkIDManager; MafiaNet::StatisticsHistoryPlugin _statisticsHistory; + // Connection gate: TwoWayAuthentication proves an identical build token without sending it; + // ReadyEvent is the per-connection spawn barrier. Flow in network_{server,client}.cpp. + MafiaNet::TwoWayAuthentication _twoWayAuth; + MafiaNet::ReadyEvent _readyEvent; + // Owns the replicated entity world. The concrete peer's Init() attaches it and sets its role. std::unique_ptr _replicationManager; @@ -63,9 +70,21 @@ namespace Framework::Networking { } public: + // TwoWayAuthentication identifier under which the build token is registered/challenged. + static constexpr const char *kBuildChallengeId = "Framework::Build"; + NetworkPeer(); ~NetworkPeer(); + // Single source of truth for the gated build identity — must produce the same string on both + // peers or the challenge fails. + static std::string BuildToken(const std::string &gameName, const std::string &gameVersion, const std::string &fwVersion, const std::string &modVersion) { + return gameName + '|' + gameVersion + '|' + fwVersion + '|' + modVersion; + } + + // Register the local build token (see BuildToken). Call before connecting/accepting. + void SetBuildToken(const std::string &token); + bool Send(Messages::IMessage &msg, MafiaNet::RakNetGUID guid = MafiaNet::UNASSIGNED_RAKNET_GUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) const; bool Send(Messages::IMessage &msg, uint64_t guid = (uint64_t)-1, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED); @@ -166,6 +185,14 @@ namespace Framework::Networking { return &_statisticsHistory; } + MafiaNet::TwoWayAuthentication *GetTwoWayAuth() noexcept { + return &_twoWayAuth; + } + + MafiaNet::ReadyEvent *GetReadyEvent() noexcept { + return &_readyEvent; + } + Replication::ReplicationManager *GetReplicationManager() const noexcept { return _replicationManager.get(); } diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index 817e21c5a..aac2808bb 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -9,6 +9,7 @@ #include "network_server.h" #include "replication/replication_manager.h" +#include "rpc/kick.h" #include #include @@ -37,6 +38,10 @@ namespace Framework::Networking { // Run replication as the authoritative server. _replicationManager->Init(_peer, &_networkIDManager, &_rpc, true); + // Gate replication behind the handshake: don't auto-create the connection on connect (see + // PushReplicationConnection). autoDestroy stays on so dropped peers are torn down. + _replicationManager->SetAutoManageConnections(false, true); + _initialized = true; return NetworkPeerError::NETWORK_PEER_NONE; } @@ -56,6 +61,7 @@ namespace Framework::Networking { if (_onPlayerDisconnectCallback) { _onPlayerDisconnectCallback(_packet, Messages::DisconnectionReason::GRACEFUL_SHUTDOWN); } + ClearClientState(packet->guid); return true; }; case ID_CONNECTION_LOST: { @@ -63,8 +69,35 @@ namespace Framework::Networking { if (_onPlayerDisconnectCallback) { _onPlayerDisconnectCallback(_packet, Messages::DisconnectionReason::LOST); } + ClearClientState(packet->guid); + return true; + }; + + // Build gate: the client challenges us with its build token. Match -> asset phase; mismatch + // -> drop (the version-incompatibility path). + case ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_SUCCESS: { + Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Build verified for {}", packet->guid.ToString()); + _authenticatedClients.insert(packet->guid.g); + if (_onClientAuthenticatedCallback) { + _onClientAuthenticatedCallback(packet->guid); + } return true; }; + case ID_TWO_WAY_AUTHENTICATION_INCOMING_CHALLENGE_FAILURE: { + Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->warn("Build mismatch from {}, dropping peer", packet->guid.ToString()); + _peer->CloseConnection(packet->guid, true); + return true; + }; + + // ReadyEvent: the server arms its half from the integration layer and takes no action on + // completion (the avatar already exists); consumed so they don't hit the unknown-packet path. + case ID_READY_EVENT_SET: + case ID_READY_EVENT_UNSET: + case ID_READY_EVENT_ALL_SET: + case ID_READY_EVENT_QUERY: + case ID_READY_EVENT_FORCE_ALL_SET: + return true; + default: break; } return false; @@ -89,4 +122,32 @@ namespace Framework::Networking { // everyone but the sender. _rpc.Signal(identifier, &bs, priority, reliability, 0, excludeGUID, true, false); } + + void NetworkServer::PushReplicationConnection(MafiaNet::RakNetGUID guid) { + if (!_replicationManager) { + return; + } + if (_replicationManager->GetConnectionByGUID(guid) != nullptr) { + return; // already pushed (a client could send ClientIdentity twice) + } + const auto address = _peer->GetSystemAddressFromGuid(guid); + if (MafiaNet::Connection_RM3 *connection = _replicationManager->AllocConnection(address, guid)) { + _replicationManager->PushConnection(connection); + } + } + + void NetworkServer::KickPlayer(MafiaNet::RakNetGUID guid, Messages::DisconnectionReason reason, const std::string &customReason) { + RPC::Kick payload; + payload.reason = static_cast(reason); + payload.customReason = customReason; + // RELIABLE_ORDERED so the reason arrives before CloseConnection's notification. + SendRPC(payload, guid, HIGH_PRIORITY, RELIABLE_ORDERED); + _peer->CloseConnection(guid, true); + ClearClientState(guid); + } + + void NetworkServer::ClearClientState(MafiaNet::RakNetGUID guid) { + _authenticatedClients.erase(guid.g); + _readyEvent.DeleteEvent(ReadyEventId(guid)); // recycle the slot for reconnects + } } // namespace Framework::Networking diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index 9136dccc4..41448e097 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -19,15 +19,24 @@ #include #include #include +#include #include namespace Framework::Networking { + using ClientGuidCallback = fu2::function; + class NetworkServer: public NetworkPeer { private: Messages::PacketCallback _onPlayerConnectCallback; Messages::DisconnectPacketCallback _onPlayerDisconnectCallback; + ClientGuidCallback _onClientAuthenticatedCallback; MafiaNet::FileListTransfer _fileListTransfer; + // Guids whose build challenge passed — the gate keeping unverified peers out of replication. + std::unordered_set _authenticatedClients; + + void ClearClientState(MafiaNet::RakNetGUID guid); + public: NetworkServer(): NetworkPeer() {} @@ -43,6 +52,22 @@ namespace Framework::Networking { int GetPing(MafiaNet::RakNetGUID guid) const; + bool IsAuthenticated(MafiaNet::RakNetGUID guid) const { + return _authenticatedClients.contains(guid.g); + } + + // Start replicating to an authenticated peer (idempotent). Replication begins for no peer + // until this is called — connections are not auto-managed (see Init). + void PushReplicationConnection(MafiaNet::RakNetGUID guid); + + // Send a Kick RPC then close the connection. + void KickPlayer(MafiaNet::RakNetGUID guid, Messages::DisconnectionReason reason, const std::string &customReason = ""); + + // Per-connection ReadyEvent id, derived from the slot so both ends agree without coordination. + static int ReadyEventId(MafiaNet::RakNetGUID guid) { + return static_cast(guid.systemIndex); + } + void SetOnPlayerConnectCallback(Messages::PacketCallback callback) { _onPlayerConnectCallback = std::move(callback); } @@ -50,5 +75,10 @@ namespace Framework::Networking { void SetOnPlayerDisconnectCallback(Messages::DisconnectPacketCallback callback) { _onPlayerDisconnectCallback = std::move(callback); } + + // Fired when a peer's build challenge succeeds (integration responds with ServerResources). + void SetOnClientAuthenticatedCallback(ClientGuidCallback callback) { + _onClientAuthenticatedCallback = std::move(callback); + } }; } // namespace Framework::Networking diff --git a/code/framework/src/networking/rpc/client_identity.h b/code/framework/src/networking/rpc/client_identity.h new file mode 100644 index 000000000..dfe92818e --- /dev/null +++ b/code/framework/src/networking/rpc/client_identity.h @@ -0,0 +1,33 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "rpc.h" + +#include + +namespace Framework::Networking::RPC { + // Client -> server after assets download: announces the player. Only honoured for an + // authenticated connection (NetworkServer::IsAuthenticated). + struct ClientIdentity { + static constexpr const char *kIdentifier = "Framework::ClientIdentity"; + + std::string name; + std::string steamId; + std::string discordId; + std::string hardwareId; + + void Serialize(MafiaNet::BitStream *bs, bool write) { + bs->Serialize(write, name); + bs->Serialize(write, steamId); + bs->Serialize(write, discordId); + bs->Serialize(write, hardwareId); + } + }; +} // namespace Framework::Networking::RPC diff --git a/code/framework/src/networking/rpc/kick.h b/code/framework/src/networking/rpc/kick.h new file mode 100644 index 000000000..cc118d4c4 --- /dev/null +++ b/code/framework/src/networking/rpc/kick.h @@ -0,0 +1,31 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "rpc.h" + +#include +#include + +namespace Framework::Networking::RPC { + // Server -> client explicit kick with a reason, sent just before CloseConnection. Version + // mismatches don't use this (they fail the build challenge). reason is a + // Framework::Networking::Messages::DisconnectionReason. + struct Kick { + static constexpr const char *kIdentifier = "Framework::Kick"; + + uint32_t reason = 0; + std::string customReason; + + void Serialize(MafiaNet::BitStream *bs, bool write) { + bs->Serialize(write, reason); + bs->Serialize(write, customReason); + } + }; +} // namespace Framework::Networking::RPC diff --git a/code/framework/src/networking/rpc/server_resources.h b/code/framework/src/networking/rpc/server_resources.h new file mode 100644 index 000000000..c2f7ebd1a --- /dev/null +++ b/code/framework/src/networking/rpc/server_resources.h @@ -0,0 +1,58 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "rpc.h" + +#include +#include +#include + +namespace Framework::Networking::RPC { + struct ResourceInfo { + std::string name; + std::string version; + uint32_t hash = 0; + + void Serialize(MafiaNet::BitStream *bs, bool write) { + bs->Serialize(write, name); + bs->Serialize(write, version); + bs->Serialize(write, hash); + } + }; + + // Server -> client once the build challenge passes: opens the asset phase. readyEventId is the + // per-connection ReadyEvent id both peers use as the spawn barrier; tickRate is the serialize + // interval (s) the client applies once that barrier completes. + struct ServerResources { + static constexpr const char *kIdentifier = "Framework::ServerResources"; + + int32_t readyEventId = 0; + float tickRate = 0.0f; + std::vector resources; + + void Serialize(MafiaNet::BitStream *bs, bool write) { + bs->Serialize(write, readyEventId); + bs->Serialize(write, tickRate); + + uint16_t count = static_cast(resources.size()); + bs->Serialize(write, count); + if (!write) { + resources.clear(); + if (count > 1000) { // bound untrusted input + count = 1000; + } + resources.resize(count); + } + for (uint16_t i = 0; i < count; ++i) { + resources[i].Serialize(bs, write); + } + } + }; +} // namespace Framework::Networking::RPC From 81d969d04c1e7fe341654c7c811e75a28e631192 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:13:18 +0200 Subject: [PATCH 37/48] Networking: consume update timestamp for client extrapolation --- .../networking/replication/network_entity.cpp | 17 +++++++++++++++++ .../src/networking/replication/network_entity.h | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/code/framework/src/networking/replication/network_entity.cpp b/code/framework/src/networking/replication/network_entity.cpp index 1fefe0dc3..bf82f98da 100644 --- a/code/framework/src/networking/replication/network_entity.cpp +++ b/code/framework/src/networking/replication/network_entity.cpp @@ -155,6 +155,23 @@ namespace Framework::Networking::Replication { _vds.DeserializeVariable(&ctx, rotation); DeserializeFields(&_vds, &ctx); _vds.EndDeserialize(&ctx); + + // Already shifted to our local clock by RakPeer; do not subtract GetClockDifferential. + if (deserializeParameters->timeStamp != 0) { + lastUpdateTime = deserializeParameters->timeStamp; + } + } + + MafiaNet::Time NetworkEntity::GetUpdateAge() const { + if (lastUpdateTime == 0) { + return 0; + } + const MafiaNet::Time now = MafiaNet::GetTime(); + return now > lastUpdateTime ? now - lastUpdateTime : 0; + } + + glm::vec3 NetworkEntity::GetExtrapolatedPosition() const { + return position + velocity * (static_cast(GetUpdateAge()) / 1000.0f); } MafiaNet::RM3ConstructionState NetworkEntity::QueryConstructionWithinWorld(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::ReplicaManager3 *) { diff --git a/code/framework/src/networking/replication/network_entity.h b/code/framework/src/networking/replication/network_entity.h index a4f6be948..3766124ca 100644 --- a/code/framework/src/networking/replication/network_entity.h +++ b/code/framework/src/networking/replication/network_entity.h @@ -46,6 +46,9 @@ namespace Framework::Networking::Replication { // --- Authority (replicated) --- uint64_t ownerGUID = MafiaNet::UNASSIGNED_RAKNET_GUID.g; + // Local-clock send time of the last applied update (MafiaNet shifts it on receipt). Not replicated. + MafiaNet::Time lastUpdateTime = 0; + // --- Server-only streaming metadata (not replicated) --- // Dimension lives in the VirtualWorldReplica3 base (Get/SetVirtualWorld). bool alwaysVisible = false; @@ -103,6 +106,9 @@ namespace Framework::Networking::Replication { // updates upstream, ...); this just answers who holds authority. bool IsOwner() const; + MafiaNet::Time GetUpdateAge() const; + glm::vec3 GetExtrapolatedPosition() const; + // --- Replica3 implementation --- void WriteAllocationID(MafiaNet::Connection_RM3 *destinationConnection, MafiaNet::BitStream *allocationIdBitstream) const override; void SerializeConstruction(MafiaNet::BitStream *constructionBitstream, MafiaNet::Connection_RM3 *destinationConnection) override; From 8720d7046dac8a72ae902a800c5c4e16c9e9c153 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:48:13 +0200 Subject: [PATCH 38/48] Scripting: destroy resource-owned entities on stop --- .../src/integrations/server/instance.cpp | 11 +++++ .../replication/replication_manager.cpp | 6 +++ .../replication/replication_manager.h | 10 +++++ .../src/scripting/resource/resource.cpp | 41 ++++++++++++++++++- .../src/scripting/resource/resource.h | 11 +++++ .../scripting/resource/resource_manager.cpp | 16 ++++++++ .../src/scripting/resource/resource_manager.h | 4 ++ 7 files changed, 98 insertions(+), 1 deletion(-) diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index a89b3b726..1a3aeefc6 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -156,6 +156,17 @@ namespace Framework::Integrations::Server { CoreModules::SetScriptingModule(_scriptingModule.get()); + // A resource owns the entities it spawns; they are destroyed when it stops. + if (replication) { + auto *resourceManager = _scriptingModule->GetResourceManager(); + replication->SetOnEntityCreated([resourceManager](uint64_t networkId) { + resourceManager->OnEntityCreated(networkId); + }); + replication->SetOnEntityDestroyed([resourceManager](uint64_t networkId) { + resourceManager->OnEntityDestroyed(networkId); + }); + } + PostScriptInit(); // Discover resources diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index 1f0021396..01819bffa 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -124,6 +124,9 @@ namespace Framework::Networking::Replication { // them as plain numbers. Clients adopt this id via the construction snapshot. entity->SetNetworkID(++_nextNetworkId); Reference(entity); + if (_onEntityCreated) { + _onEntityCreated(entity->GetNetworkID()); + } return entity; } @@ -136,6 +139,9 @@ namespace Framework::Networking::Replication { if (entity->isViewer && entity->ownerGUID != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { ClearViewer(entity->ownerGUID); } + if (_onEntityDestroyed) { + _onEntityDestroyed(entity->GetNetworkID()); + } // BroadcastDestruction must precede deletion; ~Replica3 dereferences automatically. entity->BroadcastDestruction(); delete entity; diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index c9d733585..6e9b3b6b5 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -88,6 +88,14 @@ namespace Framework::Networking::Replication { _onClientDisconnect = std::move(callback); } + // Fired with the NetworkID at the end of CreateEntity / start of DestroyEntity. + void SetOnEntityCreated(fu2::function callback) { + _onEntityCreated = std::move(callback); + } + void SetOnEntityDestroyed(fu2::function callback) { + _onEntityDestroyed = std::move(callback); + } + // --- ReplicaManager3 hooks --- // Connection-drop teardown. The base only removes replicas a dropped peer itself created; // player avatars are server-created, so on the server we additionally notify the game and @@ -113,5 +121,7 @@ namespace Framework::Networking::Replication { GridSectorizer _grid; std::unordered_map _viewers; fu2::function _onClientDisconnect; + fu2::function _onEntityCreated; + fu2::function _onEntityDestroyed; }; } // namespace Framework::Networking::Replication diff --git a/code/framework/src/scripting/resource/resource.cpp b/code/framework/src/scripting/resource/resource.cpp index b3d08d1e9..a12bd0bce 100644 --- a/code/framework/src/scripting/resource/resource.cpp +++ b/code/framework/src/scripting/resource/resource.cpp @@ -7,6 +7,10 @@ */ #include "resource.h" + +#include +#include + #include namespace Framework::Scripting { @@ -50,7 +54,8 @@ namespace Framework::Scripting { , _loadTimestamp(other._loadTimestamp) , _isolate(other._isolate) , _exports(std::move(other._exports)) - , _restartAttempts(std::move(other._restartAttempts)) { + , _restartAttempts(std::move(other._restartAttempts)) + , _ownedEntities(std::move(other._ownedEntities)) { other._isolate = nullptr; } @@ -68,6 +73,7 @@ namespace Framework::Scripting { _isolate = other._isolate; _exports = std::move(other._exports); _restartAttempts = std::move(other._restartAttempts); + _ownedEntities = std::move(other._ownedEntities); other._isolate = nullptr; } @@ -280,6 +286,10 @@ namespace Framework::Scripting { _state = newState; _stateTimestamp = std::chrono::system_clock::now(); + if (newState == ResourceState::Stopped || newState == ResourceState::Error) { + DestroyOwnedEntities(); + } + if (newState != ResourceState::Error) { ClearError(); } @@ -287,6 +297,35 @@ namespace Framework::Scripting { return true; } + void Resource::TrackEntity(uint64_t networkId) { + std::scoped_lock lock(_ownedEntitiesMutex); + _ownedEntities.insert(networkId); + } + + void Resource::UntrackEntity(uint64_t networkId) { + std::scoped_lock lock(_ownedEntitiesMutex); + _ownedEntities.erase(networkId); + } + + void Resource::DestroyOwnedEntities() { + // Swap out first: DestroyEntity re-enters UntrackEntity via the destroy hook. + std::unordered_set owned; + { + std::scoped_lock lock(_ownedEntitiesMutex); + owned.swap(_ownedEntities); + } + + auto *replication = CoreModules::GetReplication(); + if (!replication) { + return; + } + for (uint64_t networkId : owned) { + if (auto *entity = replication->GetEntityByNetworkID(networkId)) { + replication->DestroyEntity(entity); + } + } + } + void Resource::SetError(const std::string &error) { _errorMessage = error; TransitionTo(ResourceState::Error); diff --git a/code/framework/src/scripting/resource/resource.h b/code/framework/src/scripting/resource/resource.h index 9a8e0201a..9b102740e 100644 --- a/code/framework/src/scripting/resource/resource.h +++ b/code/framework/src/scripting/resource/resource.h @@ -13,11 +13,13 @@ #include #include +#include #include #include #include #include #include +#include #include namespace Framework::Scripting { @@ -201,6 +203,10 @@ namespace Framework::Scripting { v8::Isolate *GetIsolate() const { return _isolate; } void SetIsolate(v8::Isolate *isolate) { _isolate = isolate; } + // Replicated entities spawned while this resource was executing; destroyed on stop/error. + void TrackEntity(uint64_t networkId); + void UntrackEntity(uint64_t networkId); + // State transitions (called by ResourceManager) friend class ResourceManager; @@ -217,6 +223,8 @@ namespace Framework::Scripting { // Get restart attempt count without locking int GetRestartAttemptCountUnlocked() const; + void DestroyOwnedEntities(); + // Path to resource directory std::string _path; @@ -239,6 +247,9 @@ namespace Framework::Scripting { std::vector _restartAttempts; mutable std::mutex _restartAttemptsMutex; + + std::unordered_set _ownedEntities; + mutable std::mutex _ownedEntitiesMutex; }; } // namespace Framework::Scripting diff --git a/code/framework/src/scripting/resource/resource_manager.cpp b/code/framework/src/scripting/resource/resource_manager.cpp index 33c47cd14..44f2c52b6 100644 --- a/code/framework/src/scripting/resource/resource_manager.cpp +++ b/code/framework/src/scripting/resource/resource_manager.cpp @@ -716,6 +716,22 @@ namespace Framework::Scripting { return count; } + void ResourceManager::OnEntityCreated(uint64_t networkId) { + // The stack fallback touches V8; CreateEntity also fires for avatars outside a JS context. + v8::Isolate *isolate = _jsEngine ? _jsEngine->GetIsolate() : nullptr; + Resource *resource = (isolate && isolate->InContext()) ? GetCurrentResourceWithStackFallback(isolate) : GetCurrentResource(); + if (resource) { + resource->TrackEntity(networkId); + } + } + + void ResourceManager::OnEntityDestroyed(uint64_t networkId) { + std::scoped_lock lock(_resourcesMutex); + for (auto &[name, resource] : _resources) { + resource->UntrackEntity(networkId); + } + } + void ResourceManager::HandleResourceRuntimeError(const std::string &resourceName, const std::string &error) { Resource *resource = GetResourceMutable(resourceName); if (!resource) { diff --git a/code/framework/src/scripting/resource/resource_manager.h b/code/framework/src/scripting/resource/resource_manager.h index 1bce51c8f..a9c281063 100644 --- a/code/framework/src/scripting/resource/resource_manager.h +++ b/code/framework/src/scripting/resource/resource_manager.h @@ -280,6 +280,10 @@ namespace Framework::Scripting { */ Resource *GetCurrentResourceWithStackFallback(v8::Isolate *isolate); + // Wired to ReplicationManager::SetOnEntityCreated/Destroyed. + void OnEntityCreated(uint64_t networkId); + void OnEntityDestroyed(uint64_t networkId); + // Statistics /** From a89177894848faa960a9e51b9c08625cba8cec95 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 19:03:50 +0200 Subject: [PATCH 39/48] Networking: keep ServerResources bitstream aligned on overflow --- .../src/networking/rpc/server_resources.h | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/code/framework/src/networking/rpc/server_resources.h b/code/framework/src/networking/rpc/server_resources.h index c2f7ebd1a..a9f0cda61 100644 --- a/code/framework/src/networking/rpc/server_resources.h +++ b/code/framework/src/networking/rpc/server_resources.h @@ -10,7 +10,11 @@ #include "rpc.h" +#include + +#include #include +#include #include #include @@ -32,6 +36,7 @@ namespace Framework::Networking::RPC { // interval (s) the client applies once that barrier completes. struct ServerResources { static constexpr const char *kIdentifier = "Framework::ServerResources"; + static constexpr uint16_t kMaxResources = 1000; // bound untrusted input int32_t readyEventId = 0; float tickRate = 0.0f; @@ -41,16 +46,23 @@ namespace Framework::Networking::RPC { bs->Serialize(write, readyEventId); bs->Serialize(write, tickRate); - uint16_t count = static_cast(resources.size()); + if (write && resources.size() > std::numeric_limits::max()) { + Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->error("ServerResources holds {} resources, exceeding the wire limit; truncating", resources.size()); + } + + uint16_t count = static_cast(std::min(resources.size(), std::numeric_limits::max())); bs->Serialize(write, count); if (!write) { resources.clear(); - if (count > 1000) { // bound untrusted input - count = 1000; - } - resources.resize(count); + resources.resize(std::min(count, kMaxResources)); } for (uint16_t i = 0; i < count; ++i) { + // Entries past the sane cap are still consumed so the bitstream stays aligned. + if (!write && i >= kMaxResources) { + ResourceInfo discard; + discard.Serialize(bs, write); + continue; + } resources[i].Serialize(bs, write); } } From ebb8f2020ee6fa6666bcb1857604a2415687b340 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 19:03:55 +0200 Subject: [PATCH 40/48] Networking: guard against duplicate disconnect callbacks --- code/framework/src/networking/network_client.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 2684cc787..0b10f73c1 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -118,7 +118,7 @@ namespace Framework::Networking { }; case ID_NO_FREE_INCOMING_CONNECTIONS: { - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::NO_FREE_SLOT); } _state = PeerState::DISCONNECTED; @@ -126,7 +126,7 @@ namespace Framework::Networking { }; case ID_DISCONNECTION_NOTIFICATION: { - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::GRACEFUL_SHUTDOWN); } _state = PeerState::DISCONNECTED; @@ -134,7 +134,7 @@ namespace Framework::Networking { }; case ID_CONNECTION_LOST: { - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::LOST); } _state = PeerState::DISCONNECTED; @@ -142,7 +142,7 @@ namespace Framework::Networking { }; case ID_CONNECTION_ATTEMPT_FAILED: { - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::FAILED); } _state = PeerState::DISCONNECTED; @@ -150,7 +150,7 @@ namespace Framework::Networking { }; case ID_INVALID_PASSWORD: { - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::INVALID_PASSWORD); } _state = PeerState::DISCONNECTED; @@ -158,7 +158,7 @@ namespace Framework::Networking { }; case ID_CONNECTION_BANNED: { - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::BANNED); } _state = PeerState::DISCONNECTED; @@ -173,7 +173,7 @@ namespace Framework::Networking { case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_FAILURE: case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT: { Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->error("Build mismatch with server, disconnecting"); - if (_onPlayerDisconnectedCallback) { + if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::WRONG_VERSION); } _state = PeerState::DISCONNECTED; From 87549db8300bbe658698666a0a663b511b8288f2 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 19:04:04 +0200 Subject: [PATCH 41/48] Integrations: send real Discord id in ClientIdentity --- code/framework/src/external/discord/wrapper.cpp | 5 +++++ code/framework/src/external/discord/wrapper.h | 3 +++ code/framework/src/integrations/client/instance.cpp | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/framework/src/external/discord/wrapper.cpp b/code/framework/src/external/discord/wrapper.cpp index 88ea45e14..e9e3d7dbd 100644 --- a/code/framework/src/external/discord/wrapper.cpp +++ b/code/framework/src/external/discord/wrapper.cpp @@ -85,6 +85,11 @@ namespace Framework::External::Discord { }); } + std::string Wrapper::GetUserId() const { + const auto id = _user.GetId(); + return id ? std::to_string(id) : std::string {}; + } + discord::UserManager &Wrapper::GetUserManager() const { return _instance->UserManager(); } diff --git a/code/framework/src/external/discord/wrapper.h b/code/framework/src/external/discord/wrapper.h index ecef51670..6995142e2 100644 --- a/code/framework/src/external/discord/wrapper.h +++ b/code/framework/src/external/discord/wrapper.h @@ -35,6 +35,9 @@ namespace Framework::External::Discord { void SignInWithDiscord(const DiscordLoginProc &proc) const; + // Snowflake of the signed-in user once OnCurrentUserUpdate has fired, empty otherwise. + std::string GetUserId() const; + discord::ActivityManager &GetActivityManager() const; discord::UserManager &GetUserManager() const; discord::ImageManager &GetImageManager() const; diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 4ddcbd49d..44455122b 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -543,8 +543,8 @@ namespace Framework::Integrations::Client { Framework::Networking::RPC::ClientIdentity identity; identity.name = _currentState.nickname; - identity.steamId = "MY_SUPER_ID_1"; - identity.discordId = "MY_SUPER_ID_2"; + identity.steamId = ""; // no Steam integration wired into the client yet + identity.discordId = _presence ? _presence->GetUserId() : ""; identity.hardwareId = Framework::Utils::GetHardwareId(); net->SendRPC(identity, serverGuid); From 8eaa19f64fdf7201b010530771edab410d20eab5 Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 19:23:12 +0200 Subject: [PATCH 42/48] Networking: drop legacy IMessage custom-message facility The connection handshake is fully native now (TwoWayAuthentication, RPC4, ReadyEvent, ReplicaManager3), and MafiaMP uses only that paradigm. ClientInitPlayer was the last framework-owned IMessage and was already inert, so remove the whole legacy layer: - Delete client_initialise_player.h and GAME_INIT_PLAYER - Strip IMessage and the GameMessages enum from messages.h, keeping DisconnectionReason and the connect/disconnect callback typedefs - Remove NetworkPeer::Send(IMessage&) and RegisterMessage overloads, the _registeredMessageCallbacks map, and its now-unused includes - Simplify the receive loop to fall straight to the unknown handler --- .../messages/client_initialise_player.h | 28 ---------- .../src/networking/messages/messages.h | 53 ------------------- .../src/networking/network_client.cpp | 1 - .../framework/src/networking/network_peer.cpp | 40 ++------------ code/framework/src/networking/network_peer.h | 34 ------------ 5 files changed, 3 insertions(+), 153 deletions(-) delete mode 100644 code/framework/src/networking/messages/client_initialise_player.h diff --git a/code/framework/src/networking/messages/client_initialise_player.h b/code/framework/src/networking/messages/client_initialise_player.h deleted file mode 100644 index 77526f9da..000000000 --- a/code/framework/src/networking/messages/client_initialise_player.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "messages.h" - -#include - -namespace Framework::Networking::Messages { - class ClientInitPlayer final: public IMessage { - public: - uint8_t GetMessageID() const override { - return GAME_INIT_PLAYER; - } - - void Serialize(MafiaNet::BitStream *bs, bool write) override {} - - bool Valid() const override { - return true; - } - }; -} // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/messages/messages.h b/code/framework/src/networking/messages/messages.h index 2d8f47c7e..b38a1c0da 100644 --- a/code/framework/src/networking/messages/messages.h +++ b/code/framework/src/networking/messages/messages.h @@ -8,8 +8,6 @@ #pragma once -#include -#include #include #include @@ -30,55 +28,4 @@ namespace Framework::Networking::Messages { using PacketCallback = fu2::function; using DisconnectPacketCallback = fu2::function; - - // Custom message IDs. The connection handshake no longer uses any: build verification is - // TwoWayAuthentication, the resource list / client identity / kick are RPC4 payloads, the spawn - // barrier is ReadyEvent, and entity sync is ReplicaManager3 — all of which use their own message - // IDs. Mods extend their own messages from GAME_NEXT_MESSAGE_ID. - enum GameMessages : uint8_t { - GAME_INIT_PLAYER = ID_USER_PACKET_ENUM + 1, - - // Messages used by the mod - GAME_NEXT_MESSAGE_ID - }; - - /** - * Base interface for network message - * \see NetworkPeer::RegisterMessage - */ - class IMessage { - private: - MafiaNet::Packet *packet {}; - - public: - virtual ~IMessage() = default; - virtual uint8_t GetMessageID() const = 0; - - virtual void Serialize(MafiaNet::BitStream *bs, bool write) = 0; - - /** - * Extra serialization for middleware data - * @param bs - * @param write - */ - virtual void Serialize2(MafiaNet::BitStream *bs, bool write) {}; - - virtual bool Valid() const = 0; - - /** - * Extra validation for middleware data - * @return - */ - virtual bool Valid2() const { - return true; - } - - void SetPacket(MafiaNet::Packet *p) { - packet = p; - } - - MafiaNet::Packet *GetPacket() const { - return packet; - } - }; } // namespace Framework::Networking::Messages diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 0b10f73c1..5da51c54e 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -42,7 +42,6 @@ namespace Framework::Networking { if (!_peer) { return; } - _registeredMessageCallbacks.clear(); MafiaNet::RakPeerInterface::DestroyInstance(_peer); _peer = nullptr; diff --git a/code/framework/src/networking/network_peer.cpp b/code/framework/src/networking/network_peer.cpp index 83e5253ae..06659c119 100644 --- a/code/framework/src/networking/network_peer.cpp +++ b/code/framework/src/networking/network_peer.cpp @@ -35,35 +35,6 @@ namespace Framework::Networking { _twoWayAuth.AddPassword(kBuildChallengeId, MafiaNet::RakString(token.c_str())); } - bool NetworkPeer::Send(Messages::IMessage &msg, MafiaNet::RakNetGUID guid, PacketPriority priority, PacketReliability reliability) const { - if (!_peer) { - return false; - } - - MafiaNet::BitStream bsOut; - bsOut.Write(msg.GetMessageID()); - msg.Serialize(&bsOut, true); - msg.Serialize2(&bsOut, true); - - if (_peer->Send(&bsOut, priority, reliability, 0, guid, guid == MafiaNet::UNASSIGNED_RAKNET_GUID) <= 0) { - return false; - } - - return true; - } - - bool NetworkPeer::Send(Messages::IMessage &msg, uint64_t guid, PacketPriority priority, PacketReliability reliability) { - return Send(msg, MafiaNet::RakNetGUID(guid), priority, reliability); - } - - void NetworkPeer::RegisterMessage(uint8_t message, Messages::PacketCallback callback) { - if (callback == nullptr) { - return; - } - - _registeredMessageCallbacks[message] = callback; - } - void NetworkPeer::Update() { if (!_peer) { return; @@ -92,14 +63,9 @@ namespace Framework::Networking { uint8_t packetID = _packet->data[_packetDataOffset]; if (!HandlePacket(packetID, _packet)) { - if (_registeredMessageCallbacks.contains(packetID)) { - _registeredMessageCallbacks[packetID](_packet); - } - else { - Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->trace("Received unknown packet {}", packetID); - if (_onUnknownPacketCallback) { - _onUnknownPacketCallback(_packet); - } + Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->trace("Received unknown packet {}", packetID); + if (_onUnknownPacketCallback) { + _onUnknownPacketCallback(_packet); } } } diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index 5d25efba2..9cdc1a1a1 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -38,7 +37,6 @@ namespace Framework::Networking { MafiaNet::RakPeerInterface *_peer = nullptr; MafiaNet::Packet *_packet = nullptr; int _packetDataOffset = 0; // Offset to skip timestamp prefix if present - std::unordered_map _registeredMessageCallbacks; Messages::PacketCallback _onUnknownPacketCallback; mutable MafiaNet::DirectoryDeltaTransfer _assetStreamer; @@ -85,38 +83,6 @@ namespace Framework::Networking { // Register the local build token (see BuildToken). Call before connecting/accepting. void SetBuildToken(const std::string &token); - bool Send(Messages::IMessage &msg, MafiaNet::RakNetGUID guid = MafiaNet::UNASSIGNED_RAKNET_GUID, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED) const; - - bool Send(Messages::IMessage &msg, uint64_t guid = (uint64_t)-1, PacketPriority priority = HIGH_PRIORITY, PacketReliability reliability = RELIABLE_ORDERED); - - void RegisterMessage(uint8_t message, Messages::PacketCallback callback); - - template - void RegisterMessage(uint8_t message, fu2::function callback) { - if (callback == nullptr) { - return; - } - - _registeredMessageCallbacks[message] = [this, callback, message](MafiaNet::Packet *p) { - MafiaNet::BitStream bs(p->data + _packetDataOffset + 1, p->length - _packetDataOffset - 1, false); - T msg = {}; - msg.SetPacket(p); - msg.Serialize(&bs, false); - msg.Serialize2(&bs, false); - if (msg.Valid2()) { - if (msg.Valid()) { - callback(p->guid, &msg); - } - else { - Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Message {} has failed to pass Valid() check, skipping!", message); - } - } - else { - Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Message {} has failed to pass Valid2() check, skipping!", message); - } - }; - } - // Register a handler for RPC payload type T (see networking/rpc/rpc.h). The handler receives // the already-decoded payload and the raw packet, and may capture (e.g. the owning instance). // The callable is stored for the peer's lifetime and reached through RPC4's per-slot context, From 0c079a1f8305c9a4c7e11b173885ace3c2297d6d Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 19:28:56 +0200 Subject: [PATCH 43/48] Networking: rename messages.h to connection.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nothing message-related is left in the file after the IMessage removal — only DisconnectionReason and the connect/disconnect callback aliases. Move them to networking/connection.h under Framework::Networking (dropping the now-pointless ::Messages sub-namespace) and delete the empty messages/ directory. --- code/framework/CMakeLists.txt | 2 +- .../src/integrations/client/instance.cpp | 17 ++++++++--------- .../src/integrations/server/instance.cpp | 5 ++--- .../{messages/messages.h => connection.h} | 4 ++-- .../framework/src/networking/network_client.cpp | 16 ++++++++-------- code/framework/src/networking/network_client.h | 10 +++++----- code/framework/src/networking/network_peer.h | 6 +++--- .../framework/src/networking/network_server.cpp | 6 +++--- code/framework/src/networking/network_server.h | 12 ++++++------ code/framework/src/networking/rpc/kick.h | 2 +- 10 files changed, 39 insertions(+), 41 deletions(-) rename code/framework/src/networking/{messages/messages.h => connection.h} (89%) diff --git a/code/framework/CMakeLists.txt b/code/framework/CMakeLists.txt index e827e2891..d172c29b8 100644 --- a/code/framework/CMakeLists.txt +++ b/code/framework/CMakeLists.txt @@ -175,7 +175,7 @@ macro(link_shared_deps target_name) ${CMAKE_SOURCE_DIR}/vendors/spdlog/include ${CMAKE_SOURCE_DIR}/vendors/fmt/include ${CMAKE_SOURCE_DIR}/vendors/fu2 # function2 (used in network_peer.h) - ${CMAKE_SOURCE_DIR}/vendors/mafianet/Source/include # Networking / MafiaNet (used in messages.h) + ${CMAKE_SOURCE_DIR}/vendors/mafianet/Source/include # Networking / MafiaNet (used in connection.h) ${CMAKE_SOURCE_DIR}/vendors/cxxopts # Command-line parsing (used in integrations) ${CMAKE_SOURCE_DIR}/vendors # flecs, etc. ) diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 44455122b..5271ad66d 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -330,7 +330,6 @@ namespace Framework::Integrations::Client { } void Instance::InitNetworkingMessages() { - using namespace Framework::Networking::Messages; const auto net = _networkingEngine->GetNetworkClient(); // Build gate: NetworkClient challenges automatically on connect; a mismatch drops us. net->SetBuildToken(Framework::Networking::NetworkPeer::BuildToken(_opts.gameName, _opts.gameVersion, Utils::Version::rel, _opts.modVersion)); @@ -375,18 +374,18 @@ namespace Framework::Integrations::Client { // Explicit kick with a reason (version mismatches fail the build challenge, not this). net->RegisterRPC([](const Framework::Networking::RPC::Kick &payload, MafiaNet::Packet *) { std::string reason = "Unknown."; - switch (static_cast(payload.reason)) { - case Framework::Networking::Messages::DisconnectionReason::BANNED: reason = "You are banned."; break; - case Framework::Networking::Messages::DisconnectionReason::KICKED: reason = "You have been kicked."; break; - case Framework::Networking::Messages::DisconnectionReason::KICKED_CUSTOM: reason = "You have been kicked. Reason: " + payload.customReason; break; - case Framework::Networking::Messages::DisconnectionReason::KICKED_INVALID_PACKET: reason = "You have been kicked (invalid packet)."; break; - case Framework::Networking::Messages::DisconnectionReason::WRONG_VERSION: reason = "You have been kicked (wrong client version)."; break; - case Framework::Networking::Messages::DisconnectionReason::INVALID_PASSWORD: reason = "You have been kicked (wrong password)."; break; + switch (static_cast(payload.reason)) { + case Framework::Networking::DisconnectionReason::BANNED: reason = "You are banned."; break; + case Framework::Networking::DisconnectionReason::KICKED: reason = "You have been kicked."; break; + case Framework::Networking::DisconnectionReason::KICKED_CUSTOM: reason = "You have been kicked. Reason: " + payload.customReason; break; + case Framework::Networking::DisconnectionReason::KICKED_INVALID_PACKET: reason = "You have been kicked (invalid packet)."; break; + case Framework::Networking::DisconnectionReason::WRONG_VERSION: reason = "You have been kicked (wrong client version)."; break; + case Framework::Networking::DisconnectionReason::INVALID_PASSWORD: reason = "You have been kicked (wrong password)."; break; default: break; } Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection dropped: {}", reason); }); - net->SetOnPlayerDisconnectedCallback([this](MafiaNet::Packet *packet, Framework::Networking::Messages::DisconnectionReason reasonId) { + net->SetOnPlayerDisconnectedCallback([this](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reasonId) { // Reset initial asset download state _initialDownloadDone = false; _downloadStatus = {}; diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index 1a3aeefc6..d263213b3 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -20,7 +20,7 @@ #include "networking/rpc/client_identity.h" #include "networking/rpc/server_resources.h" -#include "networking/messages/messages.h" +#include "networking/connection.h" #include "utils/command_processor.h" #include "utils/path.h" @@ -249,7 +249,6 @@ namespace Framework::Integrations::Server { } void Instance::InitNetworkingMessages() const { - using namespace Framework::Networking::Messages; const auto net = _networkingEngine->GetNetworkServer(); // Build gate: a mismatched token fails the challenge inside NetworkServer; the peer never // reaches the asset phase. @@ -270,7 +269,7 @@ namespace Framework::Integrations::Server { net->SendRPC(resources, guid); }); - net->SetOnPlayerDisconnectCallback([net](MafiaNet::Packet *packet, Framework::Networking::Messages::DisconnectionReason reason) { + net->SetOnPlayerDisconnectCallback([net](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reason) { const auto guid = packet->guid; Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Disconnecting peer {}, reason: {}", guid.g, static_cast(reason)); diff --git a/code/framework/src/networking/messages/messages.h b/code/framework/src/networking/connection.h similarity index 89% rename from code/framework/src/networking/messages/messages.h rename to code/framework/src/networking/connection.h index b38a1c0da..edbc69889 100644 --- a/code/framework/src/networking/messages/messages.h +++ b/code/framework/src/networking/connection.h @@ -11,7 +11,7 @@ #include #include -namespace Framework::Networking::Messages { +namespace Framework::Networking { enum class DisconnectionReason : uint32_t { NO_FREE_SLOT, GRACEFUL_SHUTDOWN, @@ -28,4 +28,4 @@ namespace Framework::Networking::Messages { using PacketCallback = fu2::function; using DisconnectPacketCallback = fu2::function; -} // namespace Framework::Networking::Messages +} // namespace Framework::Networking diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 5da51c54e..14597e344 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -88,7 +88,7 @@ namespace Framework::Networking { Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Disconnecting from the server..."); if (_onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::GRACEFUL_SHUTDOWN); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN); } _state = PeerState::DISCONNECTED; @@ -118,7 +118,7 @@ namespace Framework::Networking { case ID_NO_FREE_INCOMING_CONNECTIONS: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::NO_FREE_SLOT); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::NO_FREE_SLOT); } _state = PeerState::DISCONNECTED; return true; @@ -126,7 +126,7 @@ namespace Framework::Networking { case ID_DISCONNECTION_NOTIFICATION: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::GRACEFUL_SHUTDOWN); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN); } _state = PeerState::DISCONNECTED; return true; @@ -134,7 +134,7 @@ namespace Framework::Networking { case ID_CONNECTION_LOST: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::LOST); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::LOST); } _state = PeerState::DISCONNECTED; return true; @@ -142,7 +142,7 @@ namespace Framework::Networking { case ID_CONNECTION_ATTEMPT_FAILED: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::FAILED); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::FAILED); } _state = PeerState::DISCONNECTED; return true; @@ -150,7 +150,7 @@ namespace Framework::Networking { case ID_INVALID_PASSWORD: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::INVALID_PASSWORD); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::INVALID_PASSWORD); } _state = PeerState::DISCONNECTED; return true; @@ -158,7 +158,7 @@ namespace Framework::Networking { case ID_CONNECTION_BANNED: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::BANNED); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::BANNED); } _state = PeerState::DISCONNECTED; return true; @@ -173,7 +173,7 @@ namespace Framework::Networking { case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT: { Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->error("Build mismatch with server, disconnecting"); if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, Messages::DisconnectionReason::WRONG_VERSION); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::WRONG_VERSION); } _state = PeerState::DISCONNECTED; return true; diff --git a/code/framework/src/networking/network_client.h b/code/framework/src/networking/network_client.h index e3417758c..6a7a7b9f2 100644 --- a/code/framework/src/networking/network_client.h +++ b/code/framework/src/networking/network_client.h @@ -9,7 +9,7 @@ #pragma once #include "errors.h" -#include "messages/messages.h" +#include "connection.h" #include "network_peer.h" #include "state.h" @@ -35,8 +35,8 @@ namespace Framework::Networking { PeerState _state; - Messages::PacketCallback _onPlayerConnectedCallback; - Messages::DisconnectPacketCallback _onPlayerDisconnectedCallback; + PacketCallback _onPlayerConnectedCallback; + DisconnectPacketCallback _onPlayerDisconnectedCallback; OnAssetsDownloadFailedCallback _onAssetsDownloadFailedCallback; fu2::function _onConnectionReadyCallback; AssetFileTransfer _fileListTransfer; @@ -66,11 +66,11 @@ namespace Framework::Networking { return &_fileListTransfer; } - void SetOnPlayerConnectedCallback(Messages::PacketCallback callback) { + void SetOnPlayerConnectedCallback(PacketCallback callback) { _onPlayerConnectedCallback = std::move(callback); } - void SetOnPlayerDisconnectedCallback(Messages::DisconnectPacketCallback callback) { + void SetOnPlayerDisconnectedCallback(DisconnectPacketCallback callback) { _onPlayerDisconnectedCallback = std::move(callback); } diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index 9cdc1a1a1..e67ef0f0a 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -8,7 +8,7 @@ #pragma once -#include "messages/messages.h" +#include "connection.h" #include "rpc/rpc.h" #include @@ -37,7 +37,7 @@ namespace Framework::Networking { MafiaNet::RakPeerInterface *_peer = nullptr; MafiaNet::Packet *_packet = nullptr; int _packetDataOffset = 0; // Offset to skip timestamp prefix if present - Messages::PacketCallback _onUnknownPacketCallback; + PacketCallback _onUnknownPacketCallback; mutable MafiaNet::DirectoryDeltaTransfer _assetStreamer; // RPC4 dispatches remote-procedure calls by identifier to C handlers. NetworkIDManager hands @@ -116,7 +116,7 @@ namespace Framework::Networking { void Update() override; virtual bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) = 0; - void SetUnknownPacketHandler(Messages::PacketCallback callback) { + void SetUnknownPacketHandler(PacketCallback callback) { _onUnknownPacketCallback = std::move(callback); } diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index aac2808bb..0aeede0a5 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -59,7 +59,7 @@ namespace Framework::Networking { case ID_DISCONNECTION_NOTIFICATION: { Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Disconnection from {}", packet->guid.ToString()); if (_onPlayerDisconnectCallback) { - _onPlayerDisconnectCallback(_packet, Messages::DisconnectionReason::GRACEFUL_SHUTDOWN); + _onPlayerDisconnectCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN); } ClearClientState(packet->guid); return true; @@ -67,7 +67,7 @@ namespace Framework::Networking { case ID_CONNECTION_LOST: { Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Connection lost for {}", packet->guid.ToString()); if (_onPlayerDisconnectCallback) { - _onPlayerDisconnectCallback(_packet, Messages::DisconnectionReason::LOST); + _onPlayerDisconnectCallback(_packet, DisconnectionReason::LOST); } ClearClientState(packet->guid); return true; @@ -136,7 +136,7 @@ namespace Framework::Networking { } } - void NetworkServer::KickPlayer(MafiaNet::RakNetGUID guid, Messages::DisconnectionReason reason, const std::string &customReason) { + void NetworkServer::KickPlayer(MafiaNet::RakNetGUID guid, DisconnectionReason reason, const std::string &customReason) { RPC::Kick payload; payload.reason = static_cast(reason); payload.customReason = customReason; diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index 41448e097..049c3ea7b 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -11,7 +11,7 @@ #include #include "errors.h" -#include "messages/messages.h" +#include "connection.h" #include "network_peer.h" #include "rpc/rpc.h" @@ -27,8 +27,8 @@ namespace Framework::Networking { class NetworkServer: public NetworkPeer { private: - Messages::PacketCallback _onPlayerConnectCallback; - Messages::DisconnectPacketCallback _onPlayerDisconnectCallback; + PacketCallback _onPlayerConnectCallback; + DisconnectPacketCallback _onPlayerDisconnectCallback; ClientGuidCallback _onClientAuthenticatedCallback; MafiaNet::FileListTransfer _fileListTransfer; @@ -61,18 +61,18 @@ namespace Framework::Networking { void PushReplicationConnection(MafiaNet::RakNetGUID guid); // Send a Kick RPC then close the connection. - void KickPlayer(MafiaNet::RakNetGUID guid, Messages::DisconnectionReason reason, const std::string &customReason = ""); + void KickPlayer(MafiaNet::RakNetGUID guid, DisconnectionReason reason, const std::string &customReason = ""); // Per-connection ReadyEvent id, derived from the slot so both ends agree without coordination. static int ReadyEventId(MafiaNet::RakNetGUID guid) { return static_cast(guid.systemIndex); } - void SetOnPlayerConnectCallback(Messages::PacketCallback callback) { + void SetOnPlayerConnectCallback(PacketCallback callback) { _onPlayerConnectCallback = std::move(callback); } - void SetOnPlayerDisconnectCallback(Messages::DisconnectPacketCallback callback) { + void SetOnPlayerDisconnectCallback(DisconnectPacketCallback callback) { _onPlayerDisconnectCallback = std::move(callback); } diff --git a/code/framework/src/networking/rpc/kick.h b/code/framework/src/networking/rpc/kick.h index cc118d4c4..383e2c1a5 100644 --- a/code/framework/src/networking/rpc/kick.h +++ b/code/framework/src/networking/rpc/kick.h @@ -16,7 +16,7 @@ namespace Framework::Networking::RPC { // Server -> client explicit kick with a reason, sent just before CloseConnection. Version // mismatches don't use this (they fail the build challenge). reason is a - // Framework::Networking::Messages::DisconnectionReason. + // Framework::Networking::DisconnectionReason. struct Kick { static constexpr const char *kIdentifier = "Framework::Kick"; From f3f796aa894d0c1f419bc71babd2a5cb6131bbef Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 21:08:27 +0200 Subject: [PATCH 44/48] Networking: bump vendored MafiaNet to v0.8.0 Brings in the native disconnect-reason payload on CloseConnection / ID_DISCONNECTION_NOTIFICATION (MafiaNet #24, tag v0.8.0), synced from develop. No local patches on the vendored tree. --- vendors/mafianet/CMakeLists.txt | 2 +- vendors/mafianet/README.md | 6 +- .../mafianet/Source/include/mafianet/peer.h | 17 +++- .../Source/include/mafianet/peerinterface.h | 9 +- .../Source/include/mafianet/version.h | 6 +- vendors/mafianet/Source/src/RakPeer.cpp | 90 ++++++++++++++----- vendors/mafianet/VERSION.txt | 2 +- 7 files changed, 101 insertions(+), 31 deletions(-) diff --git a/vendors/mafianet/CMakeLists.txt b/vendors/mafianet/CMakeLists.txt index ccaa4ac56..e5d3827f6 100644 --- a/vendors/mafianet/CMakeLists.txt +++ b/vendors/mafianet/CMakeLists.txt @@ -1,5 +1,5 @@ # MafiaNet - MafiaHub's networking engine (fork of RakNet/SLikeNet). -# Vendored, pinned to tag v0.7.0 (see VERSION.txt). Built as a static library. +# Vendored, pinned to tag v0.8.0 (see VERSION.txt). Built as a static library. # # Public headers live under Source/include and are consumed with the # "mafianet/" prefix, e.g. #include . diff --git a/vendors/mafianet/README.md b/vendors/mafianet/README.md index bb0a953fc..3d74682a1 100644 --- a/vendors/mafianet/README.md +++ b/vendors/mafianet/README.md @@ -271,7 +271,11 @@ Available tests include: `EightPeerTest`, `MaximumConnectTest`, `PeerConnectDisc ## Changelog -### Version 0.7.0 (Latest) +### Version 0.8.0 (Latest) +- **Optional disconnect reason**: `CloseConnection` gains a final optional `const BitStream *reasonData` argument whose bytes are appended right after the `ID_DISCONNECTION_NOTIFICATION` message ID, so the remote peer can learn *why* it was dropped (e.g. a kick/ban enum plus a custom string). The receiver reads it like any other body — `packet->data + 1` for `packet->length - 1` bytes. Only graceful disconnects carry a reason; locally-synthesized notifications (`ID_CONNECTION_LOST`, timeout/dead-connection) stay payload-less, so always tolerate a zero-length body. Wire-backward-compatible: peers that only inspect `data[0]` are unaffected +- **Bug fix**: `RakPeer::CloseConnection` no longer coerces an unresolved target index (`-1`) to `0` and reads `remoteSystemList[0]` — which targeted an unrelated peer's slot or crashed on an unallocated list; the close socket is now resolved without assuming a valid slot index + +### Version 0.7.0 - **Virtual worlds (dimensions)**: new per-entity / per-observer `VirtualWorldId` scoping on top of ReplicaManager3 — the SA-MP `SetPlayerVirtualWorld` / routing-bucket model for instanced interiors (e.g. apartments). Players only see entities sharing their virtual world (or `VIRTUAL_WORLD_GLOBAL`), switchable at runtime with no reconnect. Derive entities from `VirtualWorldReplica3`; `Connection_RM3` gets `Get/SetVirtualWorld`; `ReplicaManager3` gets `GetConnectionsInVirtualWorld`/`GetGuidsInVirtualWorld` and `SetPlayerVirtualWorld`. The filter is authority-only, so a downloaded copy never despawns the entity at its owner. See `Samples/VirtualWorld` ### Version 0.6.1 diff --git a/vendors/mafianet/Source/include/mafianet/peer.h b/vendors/mafianet/Source/include/mafianet/peer.h index a5eb80742..1426946da 100644 --- a/vendors/mafianet/Source/include/mafianet/peer.h +++ b/vendors/mafianet/Source/include/mafianet/peer.h @@ -293,7 +293,7 @@ class RAK_DLL_EXPORT RakPeer : public RakPeerInterface, public RNS2EventHandler /// \param[in] sendDisconnectionNotification True to send ID_DISCONNECTION_NOTIFICATION to the recipient. False to close it silently. /// \param[in] channel Which ordering channel to send the disconnection notification on, if any /// \param[in] disconnectionNotificationPriority Priority to send ID_DISCONNECTION_NOTIFICATION on. - void CloseConnection( const AddressOrGUID target, bool sendDisconnectionNotification, unsigned char orderingChannel=0, PacketPriority disconnectionNotificationPriority=LOW_PRIORITY ); + void CloseConnection( const AddressOrGUID target, bool sendDisconnectionNotification, unsigned char orderingChannel=0, PacketPriority disconnectionNotificationPriority=LOW_PRIORITY, const MafiaNet::BitStream *reasonData=nullptr ); /// \brief Cancel a pending connection attempt. /// \details If we are already connected, the connection stays open @@ -686,6 +686,15 @@ class RAK_DLL_EXPORT RakPeer : public RakPeerInterface, public RNS2EventHandler RakNetSocket2* rakNetSocket; SystemIndex remoteSystemIndex; + // Optional disconnect-reason payload received with an incoming ID_DISCONNECTION_NOTIFICATION. The payload is + // stashed here when the notification arrives and copied into the user-facing notification packet that is + // synthesized after outstanding ACKs are flushed (the raw reliability-layer buffer is freed in between, so it + // cannot be delivered directly). null/0 when the remote sent no reason. Owned by this struct; copied out at + // delivery and freed via ClearDisconnectReason() on every slot teardown (including the immediate close that + // directly follows delivery) and on slot reuse. + unsigned char* disconnectReasonData; + unsigned int disconnectReasonLength; + #if LIBCAT_SECURITY==1 // Cached answer used internally by RakPeer to prevent DoS attacks based on the connexion handshake char answer[cat::EasyHandshake::ANSWER_BYTES]; @@ -729,7 +738,7 @@ class RAK_DLL_EXPORT RakPeer : public RakPeerInterface, public RNS2EventHandler void ParseConnectionRequestPacket( RakPeer::RemoteSystemStruct *remoteSystem, const SystemAddress &systemAddress, const char *data, int byteSize); void OnConnectionRequest( RakPeer::RemoteSystemStruct *remoteSystem, MafiaNet::Time incomingTimestamp ); ///Send a reliable disconnect packet to this player and disconnect them when it is delivered - void NotifyAndFlagForShutdown( const SystemAddress systemAddress, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority ); + void NotifyAndFlagForShutdown( const SystemAddress systemAddress, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, const MafiaNet::BitStream *reasonData=nullptr ); ///Returns how many remote systems initiated a connection to us unsigned int GetNumberOfRemoteInitiatedConnections( void ) const; /// \brief Get a free remote system from the list and assign our systemAddress to it. @@ -1031,7 +1040,9 @@ class RAK_DLL_EXPORT RakPeer : public RakPeerInterface, public RNS2EventHandler private: // internal helpers - void CloseConnectionInternal2(const AddressOrGUID& systemIdentifier, bool sendDisconnectionNotification, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, RakNetSocket2& socket); + void CloseConnectionInternal2(const AddressOrGUID& systemIdentifier, bool sendDisconnectionNotification, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, RakNetSocket2& socket, const MafiaNet::BitStream *reasonData=nullptr); + // Free and null any stashed disconnect-reason payload for the given remote system (safe on null). + void ClearDisconnectReason(RemoteSystemStruct *remoteSystem); } // #if defined(SN_TARGET_PSP2) // __attribute__((aligned(8))) diff --git a/vendors/mafianet/Source/include/mafianet/peerinterface.h b/vendors/mafianet/Source/include/mafianet/peerinterface.h index 35b662386..4de44130a 100644 --- a/vendors/mafianet/Source/include/mafianet/peerinterface.h +++ b/vendors/mafianet/Source/include/mafianet/peerinterface.h @@ -264,7 +264,14 @@ class RAK_DLL_EXPORT RakPeerInterface /// \param[in] sendDisconnectionNotification True to send ID_DISCONNECTION_NOTIFICATION to the recipient. False to close it silently. /// \param[in] channel Which ordering channel to send the disconnection notification on, if any /// \param[in] disconnectionNotificationPriority Priority to send ID_DISCONNECTION_NOTIFICATION on. - virtual void CloseConnection( const AddressOrGUID target, bool sendDisconnectionNotification, unsigned char orderingChannel=0, PacketPriority disconnectionNotificationPriority=LOW_PRIORITY )=0; + /// \param[in] reasonData Optional payload appended after the ID_DISCONNECTION_NOTIFICATION message ID so the + /// remote peer can learn *why* it was dropped (e.g. an enum + custom string). The receiver reads it + /// from packet->data+1 (length packet->length-1), exactly like any other message body. Only graceful + /// disconnects (sendDisconnectionNotification==true) carry a reason; locally-synthesized notifications + /// (ID_CONNECTION_LOST and timeout/dead-connection paths) stay payload-less, so consumers must tolerate + /// a zero-length body. Pass nullptr (the default) for no reason. Appending bytes after the 1-byte ID is + /// wire-backward-compatible: peers that only read data[0] are unaffected. + virtual void CloseConnection( const AddressOrGUID target, bool sendDisconnectionNotification, unsigned char orderingChannel=0, PacketPriority disconnectionNotificationPriority=LOW_PRIORITY, const MafiaNet::BitStream *reasonData=nullptr )=0; /// Returns if a system is connected, disconnected, connecting in progress, or various other states /// \param[in] systemIdentifier The system we are referring to diff --git a/vendors/mafianet/Source/include/mafianet/version.h b/vendors/mafianet/Source/include/mafianet/version.h index e891d418e..2a1a875b7 100644 --- a/vendors/mafianet/Source/include/mafianet/version.h +++ b/vendors/mafianet/Source/include/mafianet/version.h @@ -15,10 +15,10 @@ // MafiaNet version. This is the current, authoritative version of the library. // Keep in sync with the project() VERSION in the root CMakeLists.txt. -#define MAFIANET_VERSION "0.7.0" -#define MAFIANET_VERSION_NUMBER_INT 700 +#define MAFIANET_VERSION "0.8.0" +#define MAFIANET_VERSION_NUMBER_INT 800 #define MAFIANET_VERSION_MAJOR 0 -#define MAFIANET_VERSION_MINOR 7 +#define MAFIANET_VERSION_MINOR 8 #define MAFIANET_VERSION_PATCH 0 // Defines kept here for backwards compatibility with RAKNET 4.081/4.082. diff --git a/vendors/mafianet/Source/src/RakPeer.cpp b/vendors/mafianet/Source/src/RakPeer.cpp index a9b2c2f7e..24938994b 100644 --- a/vendors/mafianet/Source/src/RakPeer.cpp +++ b/vendors/mafianet/Source/src/RakPeer.cpp @@ -619,6 +619,10 @@ StartupResult RakPeer::Startup( unsigned int maxConnections, SocketDescriptor *s remoteSystemList[ i ].connectMode=RemoteSystemStruct::NO_ACTION; remoteSystemList[ i ].MTUSize = defaultMTUSize; remoteSystemList[ i ].remoteSystemIndex = (SystemIndex) i; + // One-time zero-init: the array is OP_NEW_ARRAY allocated with no member init, so prime the + // reason-payload fields here before ClearDisconnectReason() can ever free them. + remoteSystemList[ i ].disconnectReasonData = 0; + remoteSystemList[ i ].disconnectReasonLength = 0; #ifdef _DEBUG remoteSystemList[ i ].reliabilityLayer.ApplyNetworkSimulator(_packetloss, _minExtraPing, _extraPingVariance); #endif @@ -1153,6 +1157,7 @@ void RakPeer::Shutdown( unsigned int blockDuration, unsigned char orderingChanne RakAssert(remoteSystemList[ i ].MTUSize <= MAXIMUM_MTU_SIZE); remoteSystemList[ i ].reliabilityLayer.Reset(false, remoteSystemList[ i ].MTUSize, false); remoteSystemList[ i ].rakNetSocket = 0; + ClearDisconnectReason(&remoteSystemList[ i ]); } @@ -1632,7 +1637,7 @@ unsigned int RakPeer::GetMaximumNumberOfPeers( void ) const // sendDisconnectionNotification: True to send ID_DISCONNECTION_NOTIFICATION to the recipient. False to close it silently. // channel: If blockDuration > 0, the disconnect packet will be sent on this channel // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -void RakPeer::CloseConnection( const AddressOrGUID target, bool sendDisconnectionNotification, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority ) +void RakPeer::CloseConnection( const AddressOrGUID target, bool sendDisconnectionNotification, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, const MafiaNet::BitStream *reasonData ) { /* // This only be called from the user thread, for the user shutting down. @@ -1649,23 +1654,21 @@ void RakPeer::CloseConnection( const AddressOrGUID target, bool sendDisconnectio const SystemAddress address = (target.systemAddress == UNASSIGNED_SYSTEM_ADDRESS) ? GetSystemAddressFromGuid(target.rakNetGuid) : target.systemAddress; int remoteSystemListIndex = GetIndexFromSystemAddress(address); - // fallback to index 0 (i.e. preserve old behavior for now) - // #med - review this whole design here - if (remoteSystemListIndex == -1) { - remoteSystemListIndex = 0; - } - - // remoteSystemList[remoteSystemListIndex].rakNetSocket may be null: the socket - // can be released between resolving the connection and closing it (e.g. during - // rapid connect/disconnect churn), and the index-0 fallback above can land on a - // free slot. RakAssert is a no-op in release (NDEBUG), so the bare dereference - // would crash there. Guard explicitly and fall back to the primary socket — the - // same pattern used by the BCS_CLOSE_CONNECTION path below. - RakNetSocket2 *closeSocket = remoteSystemList[remoteSystemListIndex].rakNetSocket; + + // Resolve the socket to close on WITHOUT assuming a valid slot index. + // GetIndexFromSystemAddress returns -1 when the target isn't in the list; never + // coerce that to 0 — reading remoteSystemList[0] would crash if the list is + // unallocated, or target an unrelated peer's slot. When the index is valid use + // that slot's socket (it may itself be null during rapid connect/disconnect + // churn). Either way, fall back to the primary socket — the same pattern used by + // the BCS_CLOSE_CONNECTION path below. With no socket at all there is nothing to + // close, so bail out. + RakNetSocket2 *closeSocket = (remoteSystemListIndex != -1) ? remoteSystemList[remoteSystemListIndex].rakNetSocket : nullptr; if (closeSocket == nullptr && socketList.Size() > 0) closeSocket = socketList[0]; - if (closeSocket != nullptr) - CloseConnectionInternal2(target, sendDisconnectionNotification, false, orderingChannel, disconnectionNotificationPriority, *closeSocket); + if (closeSocket == nullptr) + return; + CloseConnectionInternal2(target, sendDisconnectionNotification, false, orderingChannel, disconnectionNotificationPriority, *closeSocket, reasonData); // 12/14/09 Return ID_CONNECTION_LOST when calling CloseConnection with sendDisconnectionNotification==false, elsewise it is never returned if (sendDisconnectionNotification==false && GetConnectionState(target)==IS_CONNECTED) @@ -1674,7 +1677,7 @@ void RakPeer::CloseConnection( const AddressOrGUID target, bool sendDisconnectio packet->data[ 0 ] = ID_CONNECTION_LOST; // DeadConnection packet->guid = target.rakNetGuid==UNASSIGNED_RAKNET_GUID ? GetGuidFromSystemAddress(target.systemAddress) : target.rakNetGuid; packet->systemAddress = address; - packet->systemAddress.systemIndex = static_cast(remoteSystemListIndex); + packet->systemAddress.systemIndex = static_cast(remoteSystemListIndex == -1 ? 0 : remoteSystemListIndex); packet->guid.systemIndex=packet->systemAddress.systemIndex; packet->wasGeneratedLocally=true; // else processed twice AddPacketToProducer(packet); @@ -3551,10 +3554,15 @@ void RakPeer::OnConnectionRequest( RakPeer::RemoteSystemStruct *remoteSystem, Ma } // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -void RakPeer::NotifyAndFlagForShutdown( const SystemAddress systemAddress, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority ) +void RakPeer::NotifyAndFlagForShutdown( const SystemAddress systemAddress, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, const MafiaNet::BitStream *reasonData ) { MafiaNet::BitStream temp( sizeof(unsigned char) ); temp.Write( (MessageID)ID_DISCONNECTION_NOTIFICATION ); + // Optionally append a caller-supplied reason payload right after the 1-byte ID. The ID occupies exactly 8 bits so + // the payload stays byte-aligned; the remote reads it from packet->data+1 (length packet->length-1). Wire-backward + // compatible: peers that only inspect data[0] ignore the extra bytes. + if (reasonData != nullptr && reasonData->GetNumberOfBytesUsed() > 0) + temp.Write( (const char*)reasonData->GetData(), reasonData->GetNumberOfBytesUsed() ); if (performImmediate) { SendImmediate((char*)temp.GetData(), temp.GetNumberOfBitsUsed(), disconnectionNotificationPriority, RELIABLE_ORDERED, orderingChannel, systemAddress, false, false, MafiaNet::GetTimeUS(), 0); @@ -3567,6 +3575,18 @@ void RakPeer::NotifyAndFlagForShutdown( const SystemAddress systemAddress, bool } } // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +void RakPeer::ClearDisconnectReason( RemoteSystemStruct *remoteSystem ) +{ + if (remoteSystem==0) + return; + if (remoteSystem->disconnectReasonData!=0) + { + rakFree_Ex(remoteSystem->disconnectReasonData, _FILE_AND_LINE_); + remoteSystem->disconnectReasonData=0; + } + remoteSystem->disconnectReasonLength=0; +} +// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- unsigned int RakPeer::GetNumberOfRemoteInitiatedConnections( void ) const { if ( remoteSystemList == 0 || endThreads == true ) @@ -3632,6 +3652,8 @@ RakPeer::RemoteSystemStruct * RakPeer::AssignSystemAddressToRemoteSystemList( co remoteSystem=remoteSystemList+assignedIndex; ReferenceRemoteSystem(systemAddress, assignedIndex); + // Stale reason payload from a prior occupant of this slot must never leak into a new connection. + ClearDisconnectReason(remoteSystem); remoteSystem->MTUSize=defaultMTUSize; remoteSystem->guid=guid; remoteSystem->isActive = true; // This one line causes future incoming packets to go through the reliability layer @@ -4126,7 +4148,7 @@ void RakPeer::CloseConnectionInternal( const AddressOrGUID& systemIdentifier, bo } // #med - better integrate directly in CloseConnectionInternal2() -void RakPeer::CloseConnectionInternal2(const AddressOrGUID& systemIdentifier, bool sendDisconnectionNotification, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, RakNetSocket2& socket) +void RakPeer::CloseConnectionInternal2(const AddressOrGUID& systemIdentifier, bool sendDisconnectionNotification, bool performImmediate, unsigned char orderingChannel, PacketPriority disconnectionNotificationPriority, RakNetSocket2& socket, const MafiaNet::BitStream *reasonData) { RakAssert(orderingChannel < 32); @@ -4152,7 +4174,7 @@ void RakPeer::CloseConnectionInternal2(const AddressOrGUID& systemIdentifier, bo if (sendDisconnectionNotification) { - NotifyAndFlagForShutdown(target, performImmediate, orderingChannel, disconnectionNotificationPriority); + NotifyAndFlagForShutdown(target, performImmediate, orderingChannel, disconnectionNotificationPriority, reasonData); } else { @@ -4178,6 +4200,9 @@ void RakPeer::CloseConnectionInternal2(const AddressOrGUID& systemIdentifier, bo RakAssert(remoteSystemList[index].MTUSize <= MAXIMUM_MTU_SIZE); remoteSystemList[index].reliabilityLayer.Reset(false, remoteSystemList[index].MTUSize, false); + // Free any stashed disconnect-reason payload (e.g. delivered already, or never consumed) + ClearDisconnectReason(&remoteSystemList[index]); + // Not using this socket remoteSystemList[index].rakNetSocket = 0; } @@ -5909,7 +5934,12 @@ bool RakPeer::RunUpdateCycle(BitStream &updateBitStream ) // remoteSystem->reliabilityLayer.GetUndeliveredMessages(&undeliveredMessages,remoteSystem->MTUSize); // packet=AllocPacket(sizeof( char ) + undeliveredMessages.GetNumberOfBytesUsed()); - packet=AllocPacket(sizeof( char ), _FILE_AND_LINE_); + // A graceful remote disconnect (DISCONNECT_ON_NO_ACK) may carry a reason payload stashed when the + // notification arrived. Only ID_DISCONNECTION_NOTIFICATION carries it; ID_CONNECTION_LOST and + // ID_CONNECTION_ATTEMPT_FAILED are locally synthesized and stay payload-less. + const bool attachReason = remoteSystem->connectMode==RemoteSystemStruct::DISCONNECT_ON_NO_ACK && remoteSystem->disconnectReasonData!=0; + const unsigned int reasonLength = attachReason ? remoteSystem->disconnectReasonLength : 0; + packet=AllocPacket(sizeof( char ) + reasonLength, _FILE_AND_LINE_); if (remoteSystem->connectMode==RemoteSystemStruct::REQUESTED_CONNECTION) packet->data[ 0 ] = ID_CONNECTION_ATTEMPT_FAILED; // Attempted a connection and couldn't else if (remoteSystem->connectMode==RemoteSystemStruct::CONNECTED) @@ -5917,6 +5947,9 @@ bool RakPeer::RunUpdateCycle(BitStream &updateBitStream ) else packet->data[ 0 ] = ID_DISCONNECTION_NOTIFICATION; // DeadConnection + if (attachReason) + memcpy(packet->data + sizeof(unsigned char), remoteSystem->disconnectReasonData, reasonLength); + // memcpy(packet->data+1, undeliveredMessages.GetData(), undeliveredMessages.GetNumberOfBytesUsed()); packet->guid = remoteSystem->guid; @@ -6113,6 +6146,21 @@ bool RakPeer::RunUpdateCycle(BitStream &updateBitStream ) } else if ( (unsigned char) data[ 0 ] == ID_DISCONNECTION_NOTIFICATION ) { + // Stash any reason payload (everything after the 1-byte ID) so it can ride along with the + // user-facing notification packet synthesized once outstanding ACKs are flushed. This raw + // reliability-layer buffer is freed below, so the bytes have to be copied out now. + ClearDisconnectReason(remoteSystem); + if (byteSize > sizeof(unsigned char)) + { + const unsigned int reasonLength = byteSize - (unsigned int) sizeof(unsigned char); + remoteSystem->disconnectReasonData = (unsigned char*) rakMalloc_Ex(reasonLength, _FILE_AND_LINE_); + if (remoteSystem->disconnectReasonData != 0) + { + memcpy(remoteSystem->disconnectReasonData, data + sizeof(unsigned char), reasonLength); + remoteSystem->disconnectReasonLength = reasonLength; + } + } + // We shouldn't close the connection immediately because we need to ack the ID_DISCONNECTION_NOTIFICATION remoteSystem->connectMode=RemoteSystemStruct::DISCONNECT_ON_NO_ACK; rakFree_Ex(data, _FILE_AND_LINE_ ); diff --git a/vendors/mafianet/VERSION.txt b/vendors/mafianet/VERSION.txt index 422d97938..a4fd99f07 100644 --- a/vendors/mafianet/VERSION.txt +++ b/vendors/mafianet/VERSION.txt @@ -1,2 +1,2 @@ MafiaNet vendored from https://github.com/MafiaHub/MafiaNet -Pinned: tag v0.7.0 (commit 0d2a630d54c34361389e258576197ce938c0d48e) +Pinned: tag v0.8.0 (commit 34d7472e458d00f5ec79a097afda5d0f3042983b) From 51d7b05f1a1b7f8ef9da8f8e5586136431788aac Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 21:08:46 +0200 Subject: [PATCH 45/48] Networking: carry kick reason natively on disconnect Use MafiaNet v0.8.0's CloseConnection reasonData instead of a separate Kick RPC raced against the disconnect. The server serializes the reason (+ custom string) into the ID_DISCONNECTION_NOTIFICATION body; the client decodes it from the notification packet and surfaces it through the disconnect callback. - Add DisconnectPayload and extend DisconnectPacketCallback with the custom reason string in connection.h - KickPlayer now CloseConnection(..., &reasonData); drop SendRPC - Client decodes the optional payload in the ID_DISCONNECTION_NOTIFICATION handler, falling back to GRACEFUL_SHUTDOWN for a bodyless disconnect - Fold the reason->message mapping into the disconnect callback and delete the now-unused rpc/kick.h - network_peer.h: include MessageIdentifiers.h directly (was lost as a transitive include in the messages.h -> connection.h rename) --- .../src/integrations/client/instance.cpp | 13 ++++---- .../src/integrations/server/instance.cpp | 2 +- code/framework/src/networking/connection.h | 16 +++++++++- .../src/networking/network_client.cpp | 28 ++++++++++++----- code/framework/src/networking/network_peer.h | 1 + .../src/networking/network_server.cpp | 16 +++++----- code/framework/src/networking/rpc/kick.h | 31 ------------------- 7 files changed, 52 insertions(+), 55 deletions(-) delete mode 100644 code/framework/src/networking/rpc/kick.h diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 5271ad66d..4dee40b06 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -13,7 +13,6 @@ #include "networking/rpc/rpc.h" #include "networking/rpc/chat_message.h" #include "networking/rpc/client_identity.h" -#include "networking/rpc/kick.h" #include "networking/rpc/server_resources.h" #include "scripting/resource/resource_manager.h" @@ -371,21 +370,21 @@ namespace Framework::Integrations::Client { } }); - // Explicit kick with a reason (version mismatches fail the build challenge, not this). - net->RegisterRPC([](const Framework::Networking::RPC::Kick &payload, MafiaNet::Packet *) { + // The kick reason now rides on the disconnect notification itself (no separate RPC). Version + // mismatches don't reach here — they fail the build challenge and surface as WRONG_VERSION. + net->SetOnPlayerDisconnectedCallback([this](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reasonId, const std::string &customReason) { std::string reason = "Unknown."; - switch (static_cast(payload.reason)) { + switch (reasonId) { case Framework::Networking::DisconnectionReason::BANNED: reason = "You are banned."; break; case Framework::Networking::DisconnectionReason::KICKED: reason = "You have been kicked."; break; - case Framework::Networking::DisconnectionReason::KICKED_CUSTOM: reason = "You have been kicked. Reason: " + payload.customReason; break; + case Framework::Networking::DisconnectionReason::KICKED_CUSTOM: reason = "You have been kicked. Reason: " + customReason; break; case Framework::Networking::DisconnectionReason::KICKED_INVALID_PACKET: reason = "You have been kicked (invalid packet)."; break; case Framework::Networking::DisconnectionReason::WRONG_VERSION: reason = "You have been kicked (wrong client version)."; break; case Framework::Networking::DisconnectionReason::INVALID_PASSWORD: reason = "You have been kicked (wrong password)."; break; default: break; } Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Connection dropped: {}", reason); - }); - net->SetOnPlayerDisconnectedCallback([this](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reasonId) { + // Reset initial asset download state _initialDownloadDone = false; _downloadStatus = {}; diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index d263213b3..fff2d79a2 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -269,7 +269,7 @@ namespace Framework::Integrations::Server { net->SendRPC(resources, guid); }); - net->SetOnPlayerDisconnectCallback([net](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reason) { + net->SetOnPlayerDisconnectCallback([net](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reason, const std::string &) { const auto guid = packet->guid; Logging::GetLogger(FRAMEWORK_INNER_SERVER)->debug("Disconnecting peer {}, reason: {}", guid.g, static_cast(reason)); diff --git a/code/framework/src/networking/connection.h b/code/framework/src/networking/connection.h index edbc69889..d4b660d5a 100644 --- a/code/framework/src/networking/connection.h +++ b/code/framework/src/networking/connection.h @@ -8,8 +8,10 @@ #pragma once +#include #include #include +#include namespace Framework::Networking { enum class DisconnectionReason : uint32_t { @@ -26,6 +28,18 @@ namespace Framework::Networking { UNKNOWN }; + // Reason a graceful kick carries to the client, rode along on ID_DISCONNECTION_NOTIFICATION via + // CloseConnection's reasonData. Serialized symmetrically so the server write and client read agree. + struct DisconnectPayload { + uint32_t reason = static_cast(DisconnectionReason::UNKNOWN); + std::string customReason; + + void Serialize(MafiaNet::BitStream *bs, bool write) { + bs->Serialize(write, reason); + bs->Serialize(write, customReason); + } + }; + using PacketCallback = fu2::function; - using DisconnectPacketCallback = fu2::function; + using DisconnectPacketCallback = fu2::function; } // namespace Framework::Networking diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 14597e344..18d8f9a68 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -88,7 +88,7 @@ namespace Framework::Networking { Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Disconnecting from the server..."); if (_onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN, ""); } _state = PeerState::DISCONNECTED; @@ -118,7 +118,7 @@ namespace Framework::Networking { case ID_NO_FREE_INCOMING_CONNECTIONS: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::NO_FREE_SLOT); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::NO_FREE_SLOT, ""); } _state = PeerState::DISCONNECTED; return true; @@ -126,7 +126,19 @@ namespace Framework::Networking { case ID_DISCONNECTION_NOTIFICATION: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN); + // A graceful kick carries a DisconnectPayload after the message id (CloseConnection's + // reasonData); a plain disconnect has no body, so default to GRACEFUL_SHUTDOWN. + DisconnectionReason reason = DisconnectionReason::GRACEFUL_SHUTDOWN; + std::string customReason; + if (_packet->length - _packetDataOffset > sizeof(MafiaNet::MessageID)) { + MafiaNet::BitStream bs(_packet->data + _packetDataOffset, _packet->length - _packetDataOffset, false); + bs.IgnoreBytes(sizeof(MafiaNet::MessageID)); + DisconnectPayload payload; + payload.Serialize(&bs, false); + reason = static_cast(payload.reason); + customReason = payload.customReason; + } + _onPlayerDisconnectedCallback(_packet, reason, customReason); } _state = PeerState::DISCONNECTED; return true; @@ -134,7 +146,7 @@ namespace Framework::Networking { case ID_CONNECTION_LOST: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::LOST); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::LOST, ""); } _state = PeerState::DISCONNECTED; return true; @@ -142,7 +154,7 @@ namespace Framework::Networking { case ID_CONNECTION_ATTEMPT_FAILED: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::FAILED); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::FAILED, ""); } _state = PeerState::DISCONNECTED; return true; @@ -150,7 +162,7 @@ namespace Framework::Networking { case ID_INVALID_PASSWORD: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::INVALID_PASSWORD); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::INVALID_PASSWORD, ""); } _state = PeerState::DISCONNECTED; return true; @@ -158,7 +170,7 @@ namespace Framework::Networking { case ID_CONNECTION_BANNED: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::BANNED); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::BANNED, ""); } _state = PeerState::DISCONNECTED; return true; @@ -173,7 +185,7 @@ namespace Framework::Networking { case ID_TWO_WAY_AUTHENTICATION_OUTGOING_CHALLENGE_TIMEOUT: { Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->error("Build mismatch with server, disconnecting"); if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::WRONG_VERSION); + _onPlayerDisconnectedCallback(_packet, DisconnectionReason::WRONG_VERSION, ""); } _state = PeerState::DISCONNECTED; return true; diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index e67ef0f0a..2facf9ebb 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -11,6 +11,7 @@ #include "connection.h" #include "rpc/rpc.h" +#include #include #include #include diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index 0aeede0a5..83180703f 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -9,7 +9,6 @@ #include "network_server.h" #include "replication/replication_manager.h" -#include "rpc/kick.h" #include #include @@ -59,7 +58,7 @@ namespace Framework::Networking { case ID_DISCONNECTION_NOTIFICATION: { Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Disconnection from {}", packet->guid.ToString()); if (_onPlayerDisconnectCallback) { - _onPlayerDisconnectCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN); + _onPlayerDisconnectCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN, ""); } ClearClientState(packet->guid); return true; @@ -67,7 +66,7 @@ namespace Framework::Networking { case ID_CONNECTION_LOST: { Framework::Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Connection lost for {}", packet->guid.ToString()); if (_onPlayerDisconnectCallback) { - _onPlayerDisconnectCallback(_packet, DisconnectionReason::LOST); + _onPlayerDisconnectCallback(_packet, DisconnectionReason::LOST, ""); } ClearClientState(packet->guid); return true; @@ -137,12 +136,15 @@ namespace Framework::Networking { } void NetworkServer::KickPlayer(MafiaNet::RakNetGUID guid, DisconnectionReason reason, const std::string &customReason) { - RPC::Kick payload; + DisconnectPayload payload; payload.reason = static_cast(reason); payload.customReason = customReason; - // RELIABLE_ORDERED so the reason arrives before CloseConnection's notification. - SendRPC(payload, guid, HIGH_PRIORITY, RELIABLE_ORDERED); - _peer->CloseConnection(guid, true); + + // The reason rides along on ID_DISCONNECTION_NOTIFICATION (CloseConnection's reasonData), so the + // client learns why it was dropped without a separate, racing message. + MafiaNet::BitStream reasonData; + payload.Serialize(&reasonData, true); + _peer->CloseConnection(guid, true, 0, LOW_PRIORITY, &reasonData); ClearClientState(guid); } diff --git a/code/framework/src/networking/rpc/kick.h b/code/framework/src/networking/rpc/kick.h deleted file mode 100644 index 383e2c1a5..000000000 --- a/code/framework/src/networking/rpc/kick.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * MafiaHub OSS license - * Copyright (c) 2021-2023, MafiaHub. All rights reserved. - * - * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. - * See LICENSE file in the source repository for information regarding licensing. - */ - -#pragma once - -#include "rpc.h" - -#include -#include - -namespace Framework::Networking::RPC { - // Server -> client explicit kick with a reason, sent just before CloseConnection. Version - // mismatches don't use this (they fail the build challenge). reason is a - // Framework::Networking::DisconnectionReason. - struct Kick { - static constexpr const char *kIdentifier = "Framework::Kick"; - - uint32_t reason = 0; - std::string customReason; - - void Serialize(MafiaNet::BitStream *bs, bool write) { - bs->Serialize(write, reason); - bs->Serialize(write, customReason); - } - }; -} // namespace Framework::Networking::RPC From 61a718b474f52999e3bb4e4db97b6365208eb1bc Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Wed, 3 Jun 2026 22:15:24 +0200 Subject: [PATCH 46/48] Scripting: add Player entity with native kick binding Ship Framework::Scripting::Builtins::Player : Entity so connection-level operations live on a player handle instead of every entity. It exposes kick(reason), which resolves the owning connection and disconnects it with a reason via the native CloseConnection path. - NetworkPeer gains a virtual KickPlayer (no-op base, NetworkServer override) so the header-only Player binding can kick through a NetworkPeer* without a cast, server or client - Trim the verbose comments added with the disconnect-reason work --- .../src/integrations/client/instance.cpp | 3 +- code/framework/src/networking/connection.h | 3 +- .../src/networking/network_client.cpp | 3 +- code/framework/src/networking/network_peer.h | 3 + .../src/networking/network_server.cpp | 3 +- .../framework/src/networking/network_server.h | 2 +- .../framework/src/scripting/builtins/player.h | 76 +++++++++++++++++++ 7 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 code/framework/src/scripting/builtins/player.h diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 4dee40b06..746bc3166 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -370,8 +370,7 @@ namespace Framework::Integrations::Client { } }); - // The kick reason now rides on the disconnect notification itself (no separate RPC). Version - // mismatches don't reach here — they fail the build challenge and surface as WRONG_VERSION. + // Version mismatches don't reach here — they fail the build challenge (WRONG_VERSION). net->SetOnPlayerDisconnectedCallback([this](MafiaNet::Packet *packet, Framework::Networking::DisconnectionReason reasonId, const std::string &customReason) { std::string reason = "Unknown."; switch (reasonId) { diff --git a/code/framework/src/networking/connection.h b/code/framework/src/networking/connection.h index d4b660d5a..99e79f1d1 100644 --- a/code/framework/src/networking/connection.h +++ b/code/framework/src/networking/connection.h @@ -28,8 +28,7 @@ namespace Framework::Networking { UNKNOWN }; - // Reason a graceful kick carries to the client, rode along on ID_DISCONNECTION_NOTIFICATION via - // CloseConnection's reasonData. Serialized symmetrically so the server write and client read agree. + // Optional reason carried on a graceful disconnect (CloseConnection's reasonData). struct DisconnectPayload { uint32_t reason = static_cast(DisconnectionReason::UNKNOWN); std::string customReason; diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 18d8f9a68..84e26eba2 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -126,8 +126,7 @@ namespace Framework::Networking { case ID_DISCONNECTION_NOTIFICATION: { if (_state != PeerState::DISCONNECTED && _onPlayerDisconnectedCallback) { - // A graceful kick carries a DisconnectPayload after the message id (CloseConnection's - // reasonData); a plain disconnect has no body, so default to GRACEFUL_SHUTDOWN. + // A kick carries a reason payload after the id; a plain disconnect has none. DisconnectionReason reason = DisconnectionReason::GRACEFUL_SHUTDOWN; std::string customReason; if (_packet->length - _packetDataOffset > sizeof(MafiaNet::MessageID)) { diff --git a/code/framework/src/networking/network_peer.h b/code/framework/src/networking/network_peer.h index 2facf9ebb..5bd819f25 100644 --- a/code/framework/src/networking/network_peer.h +++ b/code/framework/src/networking/network_peer.h @@ -117,6 +117,9 @@ namespace Framework::Networking { void Update() override; virtual bool HandlePacket(uint8_t packetID, MafiaNet::Packet *packet) = 0; + // Server-only; base no-op lets shared code kick through a NetworkPeer* without a cast. + virtual void KickPlayer(MafiaNet::RakNetGUID, DisconnectionReason, const std::string & = "") {} + void SetUnknownPacketHandler(PacketCallback callback) { _onUnknownPacketCallback = std::move(callback); } diff --git a/code/framework/src/networking/network_server.cpp b/code/framework/src/networking/network_server.cpp index 83180703f..8fa6d0a94 100644 --- a/code/framework/src/networking/network_server.cpp +++ b/code/framework/src/networking/network_server.cpp @@ -140,8 +140,7 @@ namespace Framework::Networking { payload.reason = static_cast(reason); payload.customReason = customReason; - // The reason rides along on ID_DISCONNECTION_NOTIFICATION (CloseConnection's reasonData), so the - // client learns why it was dropped without a separate, racing message. + // Reason rides the disconnect notification, so no separate message races the close. MafiaNet::BitStream reasonData; payload.Serialize(&reasonData, true); _peer->CloseConnection(guid, true, 0, LOW_PRIORITY, &reasonData); diff --git a/code/framework/src/networking/network_server.h b/code/framework/src/networking/network_server.h index 049c3ea7b..0114773db 100644 --- a/code/framework/src/networking/network_server.h +++ b/code/framework/src/networking/network_server.h @@ -61,7 +61,7 @@ namespace Framework::Networking { void PushReplicationConnection(MafiaNet::RakNetGUID guid); // Send a Kick RPC then close the connection. - void KickPlayer(MafiaNet::RakNetGUID guid, DisconnectionReason reason, const std::string &customReason = ""); + void KickPlayer(MafiaNet::RakNetGUID guid, DisconnectionReason reason, const std::string &customReason = "") override; // Per-connection ReadyEvent id, derived from the slot so both ends agree without coordination. static int ReadyEventId(MafiaNet::RakNetGUID guid) { diff --git a/code/framework/src/scripting/builtins/player.h b/code/framework/src/scripting/builtins/player.h new file mode 100644 index 000000000..19cc757da --- /dev/null +++ b/code/framework/src/scripting/builtins/player.h @@ -0,0 +1,76 @@ +/* + * MafiaHub OSS license + * Copyright (c) 2021-2023, MafiaHub. All rights reserved. + * + * This file comes from MafiaHub, hosted at https://github.com/MafiaHub/Framework. + * See LICENSE file in the source repository for information regarding licensing. + */ + +#pragma once + +#include "entity.h" + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace Framework::Scripting::Builtins { + // A connection's player entity. Connection-level ops (kick, ...) live here, not on Entity, so + // they stay off non-player entities. Mods derive via inherit(). + class Player: public Entity { + public: + Player(uint64_t networkId): Entity(networkId) {} + + // Server-only; a no-op on the client (see NetworkPeer::KickPlayer). + void Kick(const std::string &reason) { + auto *entity = Resolve(); + if (!entity) { + return; + } + auto *peer = CoreModules::GetNetworkPeer(); + if (!peer) { + return; + } + peer->KickPlayer(MafiaNet::RakNetGUID(entity->ownerGUID), + reason.empty() ? Networking::DisconnectionReason::KICKED : Networking::DisconnectionReason::KICKED_CUSTOM, + reason); + } + + std::string ToString() const override { + std::ostringstream ss; + ss << "Player{ id: " << _id << " }"; + return ss.str(); + } + + static v8pp::class_ &GetClass(v8::Isolate *isolate) { + auto it = _classes.find(isolate); + if (it != _classes.end()) { + return *it->second; + } + + // v8pp inherit requires Entity registered first. + Entity::GetClass(isolate); + + auto &cls = _classes[isolate]; + cls = std::make_unique>(isolate); + cls->auto_wrap_objects(true); + cls->inherit() + .ctor() + .function("toString", &Player::ToString) + .function("kick", &Player::Kick); + return *cls; + } + + protected: + inline static std::unordered_map>> _classes; + }; +} // namespace Framework::Scripting::Builtins From f4f086e204b6de9742585485b5fb10ad4d5f7b4e Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Thu, 4 Jun 2026 10:18:28 +0200 Subject: [PATCH 47/48] Networking: gate forced-state RPCs and scale interest queries Register the built-in ForceState/SetOwner RPC4 slots on the client only. They are server->owner pushes, so a server that also registered them would dispatch a peer's forged Signal and let a client teleport any entity or reassign ownership it does not hold. Unregister them on manager teardown, since _rpc outlives the manager in the peer's member order and a late signal would otherwise dispatch into a freed manager. Replace the per-connection O(entities) QueryReplicaList scan with the connection's working set: construct candidates come from the in-range grid set, the entities it owns, the always-visible set and its avatar; destruction walks GetConstructedReplicas. The owned/always-visible indices are rebuilt each Tick from the live entity set so they stay correct against direct ownerGUID/alwaysVisible writes, and DestroyEntity scrubs them so an intra-tick delete cannot dangle. On a locally-initiated client Disconnect, pass a null packet rather than a stale _packet to the disconnect callback. --- .../src/networking/network_client.cpp | 3 +- .../replication/replication_connection.cpp | 52 +++++++++++------- .../replication/replication_manager.cpp | 53 +++++++++++++++---- .../replication/replication_manager.h | 11 ++++ 4 files changed, 90 insertions(+), 29 deletions(-) diff --git a/code/framework/src/networking/network_client.cpp b/code/framework/src/networking/network_client.cpp index 84e26eba2..333626649 100644 --- a/code/framework/src/networking/network_client.cpp +++ b/code/framework/src/networking/network_client.cpp @@ -88,7 +88,8 @@ namespace Framework::Networking { Logging::GetLogger(FRAMEWORK_INNER_NETWORKING)->debug("Disconnecting from the server..."); if (_onPlayerDisconnectedCallback) { - _onPlayerDisconnectedCallback(_packet, DisconnectionReason::GRACEFUL_SHUTDOWN, ""); + // Locally initiated: there is no inbound packet, so pass null rather than a stale _packet. + _onPlayerDisconnectedCallback(nullptr, DisconnectionReason::GRACEFUL_SHUTDOWN, ""); } _state = PeerState::DISCONNECTED; diff --git a/code/framework/src/networking/replication/replication_connection.cpp b/code/framework/src/networking/replication/replication_connection.cpp index a1b81acd6..5d462d41a 100644 --- a/code/framework/src/networking/replication/replication_connection.cpp +++ b/code/framework/src/networking/replication/replication_connection.cpp @@ -38,33 +38,49 @@ namespace Framework::Networking::Replication { return; } - // The observer perceives its avatar's dimension; keep them in sync so the base - // QuerySerialization filter and the construction check below agree. + // Keep the observer's dimension in sync with its avatar so the base filter and visible() agree. SetVirtualWorld(viewer->GetVirtualWorld()); - // Spatial interest set around the viewer. A hash set so the per-entity membership test below - // is O(1): QueryReplicaList already walks every entity, so a linear scan here would make the - // whole pass O(entities × in-range) per connection, per network update. + const uint64_t myGUID = GetRakNetGUID().g; + std::unordered_set inRange; _manager->QueryRadius(viewer->position, viewer->streamRange, inRange); - const uint64_t myGUID = GetRakNetGUID().g; - _manager->ForEachEntity([&](NetworkEntity *entity) { - // A connection always sees the entities it owns — its avatar and anything it currently has - // authority over, e.g. the vehicle it is driving — so they are never culled out from under - // it as it moves (interest is centred on the avatar, which freezes while the player is - // seated). The server still withholds serialize *updates* to the owner via - // NetworkEntity::QuerySerializationWithinWorld; only construction/destruction is gated here. - const bool ownedByUs = entity->ownerGUID == myGUID; - const bool visible = entity->isVisible && (entity->alwaysVisible || entity == viewer || ownedByUs || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && inRange.contains(entity))); + // Owned entities (avatar + e.g. the vehicle being driven) are never culled, so they don't drop + // out as the frozen avatar's range leaves them behind. + const auto visible = [&](NetworkEntity *entity) { + return entity->isVisible && (entity->alwaysVisible || entity == viewer || entity->ownerGUID == myGUID || (MafiaNet::VirtualWorldsCanSee(entity->GetVirtualWorld(), GetVirtualWorld()) && inRange.contains(entity))); + }; - const bool constructed = HasReplicaConstructed(entity); - if (visible && !constructed) { + // Construct candidates come only from the working set (in-range + owned + always-visible + + // avatar), never an O(entities) scan; visible() can be satisfied only by one of these sources. + std::unordered_set queued; + const auto consider = [&](NetworkEntity *entity) { + if (entity && visible(entity) && !HasReplicaConstructed(entity) && queued.insert(entity).second) { newReplicasToCreate.Push(entity, _FILE_AND_LINE_); } - else if (!visible && constructed) { + }; + for (NetworkEntity *entity : inRange) { + consider(entity); + } + if (const auto *owned = _manager->EntitiesOwnedBy(myGUID)) { + for (NetworkEntity *entity : *owned) { + consider(entity); + } + } + for (NetworkEntity *entity : _manager->AlwaysVisibleEntities()) { + consider(entity); + } + consider(viewer); + + // Destroy side: only what this connection already has, dropping whatever turned invisible. + DataStructures::List constructed; + GetConstructedReplicas(constructed); + for (unsigned i = 0; i < constructed.Size(); ++i) { + auto *entity = static_cast(constructed[i]); + if (entity && !visible(entity)) { existingReplicasToDestroy.Push(entity, _FILE_AND_LINE_); } - }); + } } } // namespace Framework::Networking::Replication diff --git a/code/framework/src/networking/replication/replication_manager.cpp b/code/framework/src/networking/replication/replication_manager.cpp index 01819bffa..7f36cb38c 100644 --- a/code/framework/src/networking/replication/replication_manager.cpp +++ b/code/framework/src/networking/replication/replication_manager.cpp @@ -64,6 +64,15 @@ namespace Framework::Networking::Replication { ReplicationManager::ReplicationManager() = default; + ReplicationManager::~ReplicationManager() { + // _rpc outlives this manager (peer member order); drop the client slots so a late + // ForceState/SetOwner can't dispatch into a freed `this`. + if (_rpc && !_isServer) { + _rpc->UnregisterSlot(kForceStateId); + _rpc->UnregisterSlot(kSetOwnerId); + } + } + void ReplicationManager::ConfigureGrid(float cellSize, float worldMin, float worldMax) { _gridCellSize = cellSize; _gridMin = worldMin; @@ -78,8 +87,10 @@ namespace Framework::Networking::Replication { SetNetworkIDManager(networkIDManager); peer->AttachPlugin(this); - // The owning client applies forced state pushed by the server (teleports, engine, ...). - if (_rpc) { + // ForceState/SetOwner are strictly server->owner pushes: the server is always the sender and + // never a legitimate receiver. Register the handlers on the client only, so a peer cannot + // Signal them back at the server to teleport entities or reassign ownership it doesn't hold. + if (_rpc && !_isServer) { _rpc->RegisterSlot(kForceStateId, &OnForceState, this, 0); _rpc->RegisterSlot(kSetOwnerId, &OnSetOwner, this, 0); } @@ -97,14 +108,18 @@ namespace Framework::Networking::Replication { _rpc->Signal(kForceStateId, &bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, MafiaNet::RakNetGUID(entity->ownerGUID), false, false); } + const std::unordered_set *ReplicationManager::EntitiesOwnedBy(uint64_t guid) const { + const auto it = _ownedByGuid.find(guid); + return it != _ownedByGuid.end() ? &it->second : nullptr; + } + void ReplicationManager::SetOwner(NetworkEntity *entity, uint64_t guid) { if (!entity) { return; } entity->ownerGUID = guid; - // The new owner is otherwise blind to the change: the server withholds serialize to whoever - // owns an entity, so it would never receive the updated ownerGUID. Tell it directly. Other - // peers, and any previous owner that just lost authority, learn it through normal serialize. + // Serialize to an owner is withheld, so the grant can't ride normal replication: tell the new + // owner directly. Other peers (and any prior owner) pick it up through serialize. if (_rpc && _isServer && guid != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { MafiaNet::BitStream bs; MafiaNet::NetworkID networkId = entity->GetNetworkID(); @@ -134,11 +149,21 @@ namespace Framework::Networking::Replication { if (!entity) { return; } - // Only a viewer entity owns a viewer mapping. Owned non-viewer entities (e.g. a vehicle owned - // by a player) share the player's GUID, so we must NOT clear the mapping for those. + // Only a viewer entity owns a viewer mapping; owned non-viewer entities share the owner GUID. if (entity->isViewer && entity->ownerGUID != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { ClearViewer(entity->ownerGUID); } + // Scrub the interest indices so this delete can't dangle before the next Tick() rebuild. + for (auto it = _ownedByGuid.begin(); it != _ownedByGuid.end();) { + it->second.erase(entity); + if (it->second.empty()) { + it = _ownedByGuid.erase(it); + } + else { + ++it; + } + } + _alwaysVisible.erase(entity); if (_onEntityDestroyed) { _onEntityDestroyed(entity->GetNetworkID()); } @@ -190,12 +215,20 @@ namespace Framework::Networking::Replication { _gridReady = true; } - // GridSectorizer has no incremental removal in the default build, so we rebuild every tick. - // Entities are inserted as a tiny box around their XZ position (GridSectorizer asserts on a - // zero-area entry). + // Rebuilt from scratch each tick: the grid (no incremental removal) and the interest indices + // (kept authoritative against direct ownerGUID/alwaysVisible writes). Entities go in as a tiny + // box around their XZ position — GridSectorizer asserts on a zero-area entry. _grid.Clear(); + _ownedByGuid.clear(); + _alwaysVisible.clear(); ForEachEntity([this](NetworkEntity *entity) { _grid.AddEntry(entity, entity->position.x - kPointEpsilon, entity->position.z - kPointEpsilon, entity->position.x + kPointEpsilon, entity->position.z + kPointEpsilon); + if (entity->ownerGUID != MafiaNet::UNASSIGNED_RAKNET_GUID.g) { + _ownedByGuid[entity->ownerGUID].insert(entity); + } + if (entity->alwaysVisible) { + _alwaysVisible.insert(entity); + } }); } diff --git a/code/framework/src/networking/replication/replication_manager.h b/code/framework/src/networking/replication/replication_manager.h index 6e9b3b6b5..b9283ee6f 100644 --- a/code/framework/src/networking/replication/replication_manager.h +++ b/code/framework/src/networking/replication/replication_manager.h @@ -33,6 +33,7 @@ namespace Framework::Networking::Replication { class ReplicationManager final : public MafiaNet::ReplicaManager3 { public: ReplicationManager(); + ~ReplicationManager(); void Init(MafiaNet::RakPeerInterface *peer, MafiaNet::NetworkIDManager *networkIDManager, MafiaNet::RPC4 *rpc, bool isServer); @@ -67,6 +68,12 @@ namespace Framework::Networking::Replication { NetworkEntity *GetViewer(uint64_t guid) const; void ClearViewer(uint64_t guid); + // Interest candidate indices, rebuilt each Tick() from live entities (see QueryReplicaList). + const std::unordered_set *EntitiesOwnedBy(uint64_t guid) const; + const std::unordered_set &AlwaysVisibleEntities() const { + return _alwaysVisible; + } + // --- Interest management --- // Configure the spatial index extent. Defaults cover a 20km² map at 100m cells (~40k cells). // Pick bounds that enclose the playable area; entities outside clamp to edge cells (still @@ -120,6 +127,10 @@ namespace Framework::Networking::Replication { MafiaNet::RPC4 *_rpc = nullptr; GridSectorizer _grid; std::unordered_map _viewers; + // Rebuilt from live entities each Tick(); DestroyEntity scrubs them so an intra-tick delete + // can't dangle. + std::unordered_map> _ownedByGuid; + std::unordered_set _alwaysVisible; fu2::function _onClientDisconnect; fu2::function _onEntityCreated; fu2::function _onEntityDestroyed; From d608d6d65fd7e2568eb6eef49338a2fabd368dff Mon Sep 17 00:00:00 2001 From: Segfault <5221072+Segfaultd@users.noreply.github.com> Date: Sun, 7 Jun 2026 12:03:24 +0200 Subject: [PATCH 48/48] Networking: drop unused hash field from ServerResources The per-resource hash was always written as 0 and never read on the client; file integrity and deltas are handled natively by DirectoryDeltaTransfer. Remove it from the wire format and both resource structs. --- code/framework/src/integrations/client/instance.cpp | 1 - code/framework/src/integrations/client/scripting/module.h | 1 - code/framework/src/integrations/server/instance.cpp | 2 +- code/framework/src/networking/rpc/server_resources.h | 2 -- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/code/framework/src/integrations/client/instance.cpp b/code/framework/src/integrations/client/instance.cpp index 746bc3166..a636abc8c 100644 --- a/code/framework/src/integrations/client/instance.cpp +++ b/code/framework/src/integrations/client/instance.cpp @@ -349,7 +349,6 @@ namespace Framework::Integrations::Client { Client::Scripting::ServerResourceInfo info; info.name = resInfo.name; info.version = resInfo.version; - info.hash = resInfo.hash; _pendingServerResources.push_back(info); } Logging::GetLogger(FRAMEWORK_INNER_CLIENT)->debug("Received resource list from server with {} resources", _pendingServerResources.size()); diff --git a/code/framework/src/integrations/client/scripting/module.h b/code/framework/src/integrations/client/scripting/module.h index 874f3dc72..7f2cd11dc 100644 --- a/code/framework/src/integrations/client/scripting/module.h +++ b/code/framework/src/integrations/client/scripting/module.h @@ -27,7 +27,6 @@ namespace Framework::Integrations::Client::Scripting { struct ServerResourceInfo { std::string name; std::string version; - uint32_t hash = 0; }; /** diff --git a/code/framework/src/integrations/server/instance.cpp b/code/framework/src/integrations/server/instance.cpp index fff2d79a2..db8d0f94e 100644 --- a/code/framework/src/integrations/server/instance.cpp +++ b/code/framework/src/integrations/server/instance.cpp @@ -263,7 +263,7 @@ namespace Framework::Integrations::Server { resources.tickRate = _opts.worldConfig.tickInterval; if (_scriptingModule) { for (const auto &resource : _scriptingModule->GetClientResourceList()) { - resources.resources.push_back({resource.name, resource.version, 0}); // Hash computed on demand + resources.resources.push_back({resource.name, resource.version}); } } net->SendRPC(resources, guid); diff --git a/code/framework/src/networking/rpc/server_resources.h b/code/framework/src/networking/rpc/server_resources.h index a9f0cda61..4439712ab 100644 --- a/code/framework/src/networking/rpc/server_resources.h +++ b/code/framework/src/networking/rpc/server_resources.h @@ -22,12 +22,10 @@ namespace Framework::Networking::RPC { struct ResourceInfo { std::string name; std::string version; - uint32_t hash = 0; void Serialize(MafiaNet::BitStream *bs, bool write) { bs->Serialize(write, name); bs->Serialize(write, version); - bs->Serialize(write, hash); } };