Use std::unique_ptr for ENetPeer

This commit is contained in:
phosit 2026-04-16 19:12:13 +02:00
parent e7a583adc0
commit b71c1c3e8c
No known key found for this signature in database
GPG key ID: C9430B600671C268
5 changed files with 19 additions and 17 deletions

View file

@ -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)

View file

@ -125,7 +125,7 @@ private:
std::atomic<bool> m_ShouldShutdown{false};
std::unique_ptr<ENetHost, DestroyHost> m_Host;
ENetPeer* m_Server{nullptr};
std::unique_ptr<ENetPeer, DestroyPeer> m_Server;
CNetStatsTable* m_Stats{nullptr};
};

View file

@ -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:

View file

@ -37,8 +37,8 @@ enum
NumberRows
};
CNetStatsTable::CNetStatsTable(const ENetPeer* peer)
: m_Peer(peer)
CNetStatsTable::CNetStatsTable(const ENetPeer& peer)
: m_Peer(&peer)
{
}

View file

@ -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;