From b71c1c3e8cff4ffe9c326bfd53cf1bc988a8a20a Mon Sep 17 00:00:00 2001 From: phosit Date: Thu, 16 Apr 2026 19:12:13 +0200 Subject: [PATCH] Use std::unique_ptr for ENetPeer --- source/network/NetClientSession.cpp | 19 ++++++------------- source/network/NetClientSession.h | 2 +- source/network/NetHost.h | 9 +++++++++ source/network/NetStats.cpp | 4 ++-- source/network/NetStats.h | 2 +- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/source/network/NetClientSession.cpp b/source/network/NetClientSession.cpp index f7a85d878e..b84e854018 100644 --- a/source/network/NetClientSession.cpp +++ b/source/network/NetClientSession.cpp @@ -44,12 +44,6 @@ CNetClientSession::~CNetClientSession() ENSURE(!m_LoopRunning); delete m_Stats; - - if (m_Server) - { - // Disconnect immediately (we can't wait for acks) - enet_peer_disconnect_now(m_Server, NDR_SERVER_SHUTDOWN); - } } bool CNetClientSession::Connect(const CStr& server, const u16 port, ENetHost* enetClient) @@ -71,13 +65,12 @@ bool CNetClientSession::Connect(const CStr& server, const u16 port, ENetHost* en return false; // Initiate connection to server - ENetPeer* peer = enet_host_connect(m_Host.get(), &addr, CHANNEL_COUNT, 0); - if (!peer) + m_Server.reset(enet_host_connect(m_Host.get(), &addr, CHANNEL_COUNT, 0)); + if (!m_Server) return false; - m_Server = peer; - m_Stats = new CNetStatsTable(m_Server); + m_Stats = new CNetStatsTable(*m_Server); if (CProfileViewer::IsInitialised()) g_ProfileViewer.AddRootTable(m_Stats); @@ -124,7 +117,7 @@ void CNetClientSession::Poll() if (event.type == ENET_EVENT_TYPE_CONNECT) { - ENSURE(event.peer == m_Server); + ENSURE(event.peer == m_Server.get()); // Report the server address immediately. char hostname[256] = "(error)"; @@ -137,7 +130,7 @@ void CNetClientSession::Poll() } else if (event.type == ENET_EVENT_TYPE_DISCONNECT) { - ENSURE(event.peer == m_Server); + ENSURE(event.peer == m_Server.get()); // Report immediately. LOGMESSAGE("Net client: Disconnected"); @@ -153,7 +146,7 @@ void CNetClientSession::Flush() { ENetPacket* packet; while (m_OutgoingMessages.pop(packet)) - if (enet_peer_send(m_Server, CNetHost::DEFAULT_CHANNEL, packet) < 0) + if (enet_peer_send(m_Server.get(), CNetHost::DEFAULT_CHANNEL, packet) < 0) { // Report the error, but do so silently if we know we are disconnected. if (m_Connected) diff --git a/source/network/NetClientSession.h b/source/network/NetClientSession.h index a6bda26387..9c5d9a4ccb 100644 --- a/source/network/NetClientSession.h +++ b/source/network/NetClientSession.h @@ -125,7 +125,7 @@ private: std::atomic m_ShouldShutdown{false}; std::unique_ptr m_Host; - ENetPeer* m_Server{nullptr}; + std::unique_ptr m_Server; CNetStatsTable* m_Stats{nullptr}; }; diff --git a/source/network/NetHost.h b/source/network/NetHost.h index 49da8fb8cf..7912cc9ee5 100644 --- a/source/network/NetHost.h +++ b/source/network/NetHost.h @@ -92,6 +92,15 @@ struct DestroyHost } }; +struct DestroyPeer +{ + void operator()(ENetPeer* peer) const noexcept + { + // Disconnect immediately (we can't wait for acks) + enet_peer_disconnect_now(peer, NDR_SERVER_SHUTDOWN); + } +}; + class CNetHost { public: diff --git a/source/network/NetStats.cpp b/source/network/NetStats.cpp index d3572f9bdb..5df0f7fac9 100644 --- a/source/network/NetStats.cpp +++ b/source/network/NetStats.cpp @@ -37,8 +37,8 @@ enum NumberRows }; -CNetStatsTable::CNetStatsTable(const ENetPeer* peer) - : m_Peer(peer) +CNetStatsTable::CNetStatsTable(const ENetPeer& peer) + : m_Peer(&peer) { } diff --git a/source/network/NetStats.h b/source/network/NetStats.h index 51b3c95c72..930360223a 100644 --- a/source/network/NetStats.h +++ b/source/network/NetStats.h @@ -44,7 +44,7 @@ class CNetStatsTable : public AbstractProfileTable NONCOPYABLE(CNetStatsTable); public: CNetStatsTable(); - CNetStatsTable(const ENetPeer* peer); + CNetStatsTable(const ENetPeer& peer); CStr GetName() override; CStr GetTitle() override;