forked from mirrors/0ad
Use std::unique_ptr for ENetPeer
This commit is contained in:
@@ -44,12 +44,6 @@ CNetClientSession::~CNetClientSession()
|
|||||||
ENSURE(!m_LoopRunning);
|
ENSURE(!m_LoopRunning);
|
||||||
|
|
||||||
delete m_Stats;
|
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)
|
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;
|
return false;
|
||||||
|
|
||||||
// Initiate connection to server
|
// Initiate connection to server
|
||||||
ENetPeer* peer = enet_host_connect(m_Host.get(), &addr, CHANNEL_COUNT, 0);
|
m_Server.reset(enet_host_connect(m_Host.get(), &addr, CHANNEL_COUNT, 0));
|
||||||
if (!peer)
|
if (!m_Server)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_Server = peer;
|
|
||||||
|
|
||||||
m_Stats = new CNetStatsTable(m_Server);
|
m_Stats = new CNetStatsTable(*m_Server);
|
||||||
if (CProfileViewer::IsInitialised())
|
if (CProfileViewer::IsInitialised())
|
||||||
g_ProfileViewer.AddRootTable(m_Stats);
|
g_ProfileViewer.AddRootTable(m_Stats);
|
||||||
|
|
||||||
@@ -124,7 +117,7 @@ void CNetClientSession::Poll()
|
|||||||
|
|
||||||
if (event.type == ENET_EVENT_TYPE_CONNECT)
|
if (event.type == ENET_EVENT_TYPE_CONNECT)
|
||||||
{
|
{
|
||||||
ENSURE(event.peer == m_Server);
|
ENSURE(event.peer == m_Server.get());
|
||||||
|
|
||||||
// Report the server address immediately.
|
// Report the server address immediately.
|
||||||
char hostname[256] = "(error)";
|
char hostname[256] = "(error)";
|
||||||
@@ -137,7 +130,7 @@ void CNetClientSession::Poll()
|
|||||||
}
|
}
|
||||||
else if (event.type == ENET_EVENT_TYPE_DISCONNECT)
|
else if (event.type == ENET_EVENT_TYPE_DISCONNECT)
|
||||||
{
|
{
|
||||||
ENSURE(event.peer == m_Server);
|
ENSURE(event.peer == m_Server.get());
|
||||||
|
|
||||||
// Report immediately.
|
// Report immediately.
|
||||||
LOGMESSAGE("Net client: Disconnected");
|
LOGMESSAGE("Net client: Disconnected");
|
||||||
@@ -153,7 +146,7 @@ void CNetClientSession::Flush()
|
|||||||
{
|
{
|
||||||
ENetPacket* packet;
|
ENetPacket* packet;
|
||||||
while (m_OutgoingMessages.pop(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.
|
// Report the error, but do so silently if we know we are disconnected.
|
||||||
if (m_Connected)
|
if (m_Connected)
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ private:
|
|||||||
std::atomic<bool> m_ShouldShutdown{false};
|
std::atomic<bool> m_ShouldShutdown{false};
|
||||||
|
|
||||||
std::unique_ptr<ENetHost, DestroyHost> m_Host;
|
std::unique_ptr<ENetHost, DestroyHost> m_Host;
|
||||||
ENetPeer* m_Server{nullptr};
|
std::unique_ptr<ENetPeer, DestroyPeer> m_Server;
|
||||||
CNetStatsTable* m_Stats{nullptr};
|
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
|
class CNetHost
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ enum
|
|||||||
NumberRows
|
NumberRows
|
||||||
};
|
};
|
||||||
|
|
||||||
CNetStatsTable::CNetStatsTable(const ENetPeer* peer)
|
CNetStatsTable::CNetStatsTable(const ENetPeer& peer)
|
||||||
: m_Peer(peer)
|
: m_Peer(&peer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class CNetStatsTable : public AbstractProfileTable
|
|||||||
NONCOPYABLE(CNetStatsTable);
|
NONCOPYABLE(CNetStatsTable);
|
||||||
public:
|
public:
|
||||||
CNetStatsTable();
|
CNetStatsTable();
|
||||||
CNetStatsTable(const ENetPeer* peer);
|
CNetStatsTable(const ENetPeer& peer);
|
||||||
|
|
||||||
CStr GetName() override;
|
CStr GetName() override;
|
||||||
CStr GetTitle() override;
|
CStr GetTitle() override;
|
||||||
|
|||||||
Reference in New Issue
Block a user