Changeset View
Changeset View
Standalone View
Standalone View
source/network/NetServer.cpp
Show First 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | private: | ||||
u32 m_RejoinerHostID; | u32 m_RejoinerHostID; | ||||
}; | }; | ||||
/* | /* | ||||
* XXX: We use some non-threadsafe functions from the worker thread. | * XXX: We use some non-threadsafe functions from the worker thread. | ||||
* See http://trac.wildfiregames.com/ticket/654 | * See http://trac.wildfiregames.com/ticket/654 | ||||
*/ | */ | ||||
CNetServerWorker::CNetServerWorker(int autostartPlayers) : | CNetServerWorker::CNetServerWorker(const CStrW& serverName, int autostartPlayers) : | ||||
m_AutostartPlayers(autostartPlayers), | m_AutostartPlayers(autostartPlayers), | ||||
m_ServerName(serverName), | |||||
m_Shutdown(false), | m_Shutdown(false), | ||||
m_ScriptInterface(NULL), | m_ScriptInterface(NULL), | ||||
m_NextHostID(1), m_Host(NULL), m_HostGUID(), m_Stats(NULL), | m_NextHostID(1), m_Host(NULL), m_HostGUID(), m_Stats(NULL), | ||||
m_LastConnectionCheck(0) | m_LastConnectionCheck(0) | ||||
{ | { | ||||
m_State = SERVER_STATE_UNCONNECTED; | m_State = SERVER_STATE_UNCONNECTED; | ||||
m_ServerTurnManager = NULL; | m_ServerTurnManager = NULL; | ||||
m_ServerName = DEFAULT_SERVER_NAME; | |||||
m_WelcomeMessage = DEFAULT_WELCOME_MESSAGE; | |||||
} | } | ||||
CNetServerWorker::~CNetServerWorker() | CNetServerWorker::~CNetServerWorker() | ||||
{ | { | ||||
if (m_State != SERVER_STATE_UNCONNECTED) | if (m_State != SERVER_STATE_UNCONNECTED) | ||||
{ | { | ||||
// Tell the thread to shut down | // Tell the thread to shut down | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 717 Lines • ▼ Show 20 Lines | bool CNetServerWorker::OnClientHandshake(void* context, CFsmEvent* event) | ||||
if (message->m_ProtocolVersion != PS_PROTOCOL_VERSION) | if (message->m_ProtocolVersion != PS_PROTOCOL_VERSION) | ||||
{ | { | ||||
session->Disconnect(NDR_INCORRECT_PROTOCOL_VERSION); | session->Disconnect(NDR_INCORRECT_PROTOCOL_VERSION); | ||||
return false; | return false; | ||||
} | } | ||||
CSrvHandshakeResponseMessage handshakeResponse; | CSrvHandshakeResponseMessage handshakeResponse; | ||||
handshakeResponse.m_UseProtocolVersion = PS_PROTOCOL_VERSION; | handshakeResponse.m_UseProtocolVersion = PS_PROTOCOL_VERSION; | ||||
handshakeResponse.m_Message = server.m_WelcomeMessage; | handshakeResponse.m_ServerName = server.m_ServerName; | ||||
handshakeResponse.m_Flags = 0; | handshakeResponse.m_Flags = 0; | ||||
session->SendMessage(&handshakeResponse); | session->SendMessage(&handshakeResponse); | ||||
return true; | return true; | ||||
} | } | ||||
bool CNetServerWorker::OnAuthenticate(void* context, CFsmEvent* event) | bool CNetServerWorker::OnAuthenticate(void* context, CFsmEvent* event) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 135 Lines • ▼ Show 20 Lines | bool CNetServerWorker::OnAuthenticate(void* context, CFsmEvent* event) | ||||
session->SetUserName(username); | session->SetUserName(username); | ||||
session->SetGUID(message->m_GUID); | session->SetGUID(message->m_GUID); | ||||
session->SetHostID(newHostID); | session->SetHostID(newHostID); | ||||
session->SetLocalClient(message->m_IsLocalClient); | session->SetLocalClient(message->m_IsLocalClient); | ||||
CAuthenticateResultMessage authenticateResult; | CAuthenticateResultMessage authenticateResult; | ||||
authenticateResult.m_Code = isRejoining ? ARC_OK_REJOINING : ARC_OK; | authenticateResult.m_Code = isRejoining ? ARC_OK_REJOINING : ARC_OK; | ||||
authenticateResult.m_HostID = newHostID; | authenticateResult.m_HostID = newHostID; | ||||
authenticateResult.m_Message = L"Logged in"; | |||||
elexis: nucular separatus | |||||
session->SendMessage(&authenticateResult); | session->SendMessage(&authenticateResult); | ||||
server.OnUserJoin(session); | server.OnUserJoin(session); | ||||
if (isRejoining) | if (isRejoining) | ||||
{ | { | ||||
// Request a copy of the current game state from an existing player, | // Request a copy of the current game state from an existing player, | ||||
// so we can send it on to the new player | // so we can send it on to the new player | ||||
▲ Show 20 Lines • Show All 434 Lines • ▼ Show 20 Lines | |||||
void CNetServerWorker::SendHolePunchingMessage(const CStr& ipStr, u16 port) | void CNetServerWorker::SendHolePunchingMessage(const CStr& ipStr, u16 port) | ||||
{ | { | ||||
StunClient::SendHolePunchingMessages(m_Host, ipStr.c_str(), port); | StunClient::SendHolePunchingMessages(m_Host, ipStr.c_str(), port); | ||||
} | } | ||||
CNetServer::CNetServer(int autostartPlayers) : | CNetServer::CNetServer(const CStrW& serverName, int autostartPlayers) : | ||||
m_Worker(new CNetServerWorker(autostartPlayers)) | m_Worker(new CNetServerWorker(serverName, autostartPlayers)) | ||||
{ | { | ||||
} | } | ||||
CNetServer::~CNetServer() | CNetServer::~CNetServer() | ||||
{ | { | ||||
delete m_Worker; | delete m_Worker; | ||||
} | } | ||||
Show All 31 Lines |
Wildfire Games · Phabricator
nucular separatus