mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
Use std::unique_ptr for ENetPeer
This commit is contained in:
parent
e7a583adc0
commit
b71c1c3e8c
5 changed files with 19 additions and 17 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@ enum
|
|||
NumberRows
|
||||
};
|
||||
|
||||
CNetStatsTable::CNetStatsTable(const ENetPeer* peer)
|
||||
: m_Peer(peer)
|
||||
CNetStatsTable::CNetStatsTable(const ENetPeer& peer)
|
||||
: m_Peer(&peer)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue