diff --git a/include/Nazara/Network/ENetPacket.hpp b/include/Nazara/Network/ENetPacket.hpp index efef5e843..55fc3fd10 100644 --- a/include/Nazara/Network/ENetPacket.hpp +++ b/include/Nazara/Network/ENetPacket.hpp @@ -10,6 +10,7 @@ #include #include #include +#include namespace Nz { @@ -42,7 +43,8 @@ namespace Nz { ENetPacketRef() = default; - ENetPacketRef(ENetPacket* packet) + ENetPacketRef(MemoryPool* pool, ENetPacket* packet) : + m_pool(pool) { Reset(packet); } @@ -51,13 +53,10 @@ namespace Nz ENetPacketRef() { Reset(packet); + m_pool = packet.m_pool; } - ENetPacketRef(ENetPacketRef&& packet) noexcept : - m_packet(packet.m_packet) - { - packet.m_packet = nullptr; - } + ENetPacketRef(ENetPacketRef&&) noexcept = default; ~ENetPacketRef() { @@ -76,30 +75,17 @@ namespace Nz return m_packet; } - ENetPacketRef& operator=(ENetPacket* packet) - { - Reset(packet); - - return *this; - } - ENetPacketRef& operator=(const ENetPacketRef& packet) { Reset(packet); - + m_pool = packet.m_pool; return *this; } - ENetPacketRef& operator=(ENetPacketRef&& packet) noexcept - { - m_packet = packet.m_packet; - packet.m_packet = nullptr; + ENetPacketRef& operator=(ENetPacketRef&&) noexcept = default; - return *this; - } - - MemoryPool* m_pool = nullptr; - ENetPacket* m_packet = nullptr; + MovablePtr> m_pool; + MovablePtr m_packet; }; } diff --git a/src/Nazara/Network/ENetHost.cpp b/src/Nazara/Network/ENetHost.cpp index 8d1cdd963..4a0234b3e 100644 --- a/src/Nazara/Network/ENetHost.cpp +++ b/src/Nazara/Network/ENetHost.cpp @@ -210,7 +210,7 @@ namespace Nz { event->type = ENetEventType::None; event->peer = nullptr; - event->packet = nullptr; + event->packet.Reset(); if (DispatchIncomingCommands(event)) return 1; @@ -313,7 +313,10 @@ namespace Nz ENetPacketRef ENetHost::AllocatePacket(ENetPacketFlags flags) { std::size_t poolIndex; - ENetPacketRef enetPacket = m_packetPool.Allocate(poolIndex); + + ENetPacket* packet = m_packetPool.Allocate(poolIndex); + + ENetPacketRef enetPacket(&m_packetPool, packet); enetPacket->flags = flags; enetPacket->poolIndex = poolIndex; enetPacket.m_pool = &m_packetPool;