Changeset View
Changeset View
Standalone View
Standalone View
source/network/NetSession.cpp
Show All 31 Lines | |||||
CNetClientSession::CNetClientSession(CNetClient& client) : | CNetClientSession::CNetClientSession(CNetClient& client) : | ||||
m_Client(client), m_FileTransferer(this), m_Host(nullptr), m_Server(nullptr), | m_Client(client), m_FileTransferer(this), m_Host(nullptr), m_Server(nullptr), | ||||
m_Stats(nullptr), m_IncomingMessages(16), m_OutgoingMessages(16), | m_Stats(nullptr), m_IncomingMessages(16), m_OutgoingMessages(16), | ||||
m_LoopRunning(false), m_ShouldShutdown(false), m_MeanRTT(0), m_LastReceivedTime(0) | m_LoopRunning(false), m_ShouldShutdown(false), m_MeanRTT(0), m_LastReceivedTime(0) | ||||
{ | { | ||||
} | } | ||||
CNetClientSession::CNetClientSession(CNetClient& client, ENetHost* enetClient) : CNetClientSession(client) | |||||
{ | |||||
m_Host = enetClient; | |||||
} | |||||
CNetClientSession::~CNetClientSession() | CNetClientSession::~CNetClientSession() | ||||
{ | { | ||||
ENSURE(!m_LoopRunning); | ENSURE(!m_LoopRunning); | ||||
delete m_Stats; | delete m_Stats; | ||||
if (m_Host && m_Server) | if (m_Host && m_Server) | ||||
{ | { | ||||
// Disconnect immediately (we can't wait for acks) | // Disconnect immediately (we can't wait for acks) | ||||
enet_peer_disconnect_now(m_Server, NDR_SERVER_SHUTDOWN); | enet_peer_disconnect_now(m_Server, NDR_SERVER_SHUTDOWN); | ||||
enet_host_destroy(m_Host); | enet_host_destroy(m_Host); | ||||
m_Host = NULL; | m_Host = NULL; | ||||
m_Server = NULL; | m_Server = NULL; | ||||
} | } | ||||
} | } | ||||
bool CNetClientSession::Connect(const CStr& server, const u16 port, ENetHost* enetClient) | bool CNetClientSession::Connect(const CStr& server, const u16 port, ENetHost* enetClient) | ||||
{ | { | ||||
ENSURE(!m_LoopRunning); | ENSURE(!m_LoopRunning); | ||||
ENSURE(!m_Host); | |||||
ENSURE(!m_Server); | ENSURE(!m_Server); | ||||
if (m_Host) | |||||
{ | |||||
// Cannot pass a client if we already have a host: code logic error. | |||||
ENSURE(!enetClient); | |||||
} | |||||
else | |||||
{ | |||||
// Create ENet host | // Create ENet host | ||||
ENetHost* host; | ENetHost* host; | ||||
if (enetClient != nullptr) | if (enetClient != nullptr) | ||||
host = enetClient; | host = enetClient; | ||||
else | else | ||||
host = enet_host_create(NULL, 1, CHANNEL_COUNT, 0, 0); | host = enet_host_create(NULL, 1, CHANNEL_COUNT, 0, 0); | ||||
if (!host) | if (!host) | ||||
return false; | return false; | ||||
m_Host = host; | |||||
} | |||||
// Bind to specified host | // Bind to specified host | ||||
ENetAddress addr; | ENetAddress addr; | ||||
addr.port = port; | addr.port = port; | ||||
if (enet_address_set_host(&addr, server.c_str()) < 0) | if (enet_address_set_host(&addr, server.c_str()) < 0) | ||||
return false; | return false; | ||||
// Initiate connection to server | // Initiate connection to server | ||||
ENetPeer* peer = enet_host_connect(host, &addr, CHANNEL_COUNT, 0); | ENetPeer* peer = enet_host_connect(m_Host, &addr, CHANNEL_COUNT, 0); | ||||
if (!peer) | if (!peer) | ||||
return false; | return false; | ||||
m_Host = host; | |||||
m_Server = peer; | 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); | ||||
return true; | return true; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 191 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator