Changeset View
Changeset View
Standalone View
Standalone View
source/network/NetClient.cpp
Show First 20 Lines • Show All 189 Lines • ▼ Show 20 Lines | |||||
void CNetClient::SetControllerSecret(const std::string& secret) | void CNetClient::SetControllerSecret(const std::string& secret) | ||||
{ | { | ||||
m_ControllerSecret = secret; | m_ControllerSecret = secret; | ||||
} | } | ||||
bool CNetClient::SetupConnection(ENetHost* enetClient) | bool CNetClient::SetupConnection(ENetHost* enetClient) | ||||
{ | { | ||||
bool ok = false; | |||||
if (m_Session) | |||||
{ | |||||
ok = m_Session->Connect(m_ServerAddress, m_ServerPort, nullptr); | |||||
} | |||||
else | |||||
{ | |||||
CNetClientSession* session = new CNetClientSession(*this); | CNetClientSession* session = new CNetClientSession(*this); | ||||
bool ok = session->Connect(m_ServerAddress, m_ServerPort, enetClient); | ok = session->Connect(m_ServerAddress, m_ServerPort, enetClient); | ||||
SetAndOwnSession(session); | SetAndOwnSession(session); | ||||
} | |||||
m_PollingThread = std::thread(Threading::HandleExceptions<CNetClientSession::RunNetLoop>::Wrapper, m_Session); | m_PollingThread = std::thread(Threading::HandleExceptions<CNetClientSession::RunNetLoop>::Wrapper, m_Session); | ||||
return ok; | return ok; | ||||
} | } | ||||
void CNetClient::SetupServerData(CStr address, u16 port, bool stun) | void CNetClient::SetupServerData(CStr address, u16 port, bool stun) | ||||
{ | { | ||||
ENSURE(!m_Session); | |||||
m_ServerAddress = address; | m_ServerAddress = address; | ||||
m_ServerPort = port; | m_ServerPort = port; | ||||
m_UseSTUN = stun; | m_UseSTUN = stun; | ||||
} | } | ||||
bool CNetClient::SetupConnectionViaLobby(const CStr& hostJID, bool localIP) | |||||
{ | |||||
if (!g_XmppClient) | |||||
return false; | |||||
m_UseSTUN = true; | |||||
m_HostJID = hostJID; | |||||
ENetAddress hostAddr{ ENET_HOST_ANY, ENET_PORT_ANY }; | |||||
ENetHost* enetClient = enet_host_create(&hostAddr, 1, 1, 0, 0); | |||||
CStr ip; | |||||
u16 port; | |||||
if (!StunClient::FindPublicIP(*enetClient, ip, port)) | |||||
{ | |||||
enet_host_destroy(enetClient); | |||||
return false; | |||||
} | |||||
CNetClientSession* session = new CNetClientSession(*this, enetClient); | |||||
SetAndOwnSession(session); | |||||
LOGWARNING("NetClient: found external address at %s:%i", ip.c_str(), port); | |||||
g_XmppClient->SendIqGetConnectionData(m_HostJID, m_Password, localIP, ip, port); | |||||
return true; | |||||
} | |||||
void CNetClient::HandleGetServerDataFailed(const CStr& error) | void CNetClient::HandleGetServerDataFailed(const CStr& error) | ||||
{ | { | ||||
if (m_Session) | if (m_Session) | ||||
return; | return; | ||||
PushGuiMessage( | PushGuiMessage( | ||||
"type", "serverdata", | "type", "serverdata", | ||||
"status", "failed", | "status", "failed", | ||||
"reason", error | "reason", error | ||||
); | ); | ||||
} | } | ||||
bool CNetClient::TryToConnect(const CStr& hostJID) | bool CNetClient::TryToConnect(const CStr& hostJID) | ||||
{ | { | ||||
if (m_Session) | |||||
return false; | |||||
if (m_ServerAddress.empty()) | if (m_ServerAddress.empty()) | ||||
{ | { | ||||
PushGuiMessage( | PushGuiMessage( | ||||
"type", "netstatus", | "type", "netstatus", | ||||
"status", "disconnected", | "status", "disconnected", | ||||
"reason", static_cast<i32>(NDR_SERVER_REFUSED)); | "reason", static_cast<i32>(NDR_SERVER_REFUSED)); | ||||
return false; | return false; | ||||
} | } | ||||
ENetHost* enetClient = nullptr; | ENetHost* enetClient = nullptr; | ||||
if (g_XmppClient && m_UseSTUN) | if (false && g_XmppClient && m_UseSTUN) | ||||
{ | { | ||||
ENetAddress hostAddr{ ENET_HOST_ANY, ENET_PORT_ANY }; | ENetAddress hostAddr{ ENET_HOST_ANY, ENET_PORT_ANY }; | ||||
enetClient = enet_host_create(&hostAddr, 1, 1, 0, 0); | enetClient = enet_host_create(&hostAddr, 1, 1, 0, 0); | ||||
if (!enetClient) | if (!enetClient) | ||||
{ | { | ||||
PushGuiMessage( | PushGuiMessage( | ||||
"type", "netstatus", | "type", "netstatus", | ||||
Show All 21 Lines | if (ip == m_ServerAddress) | ||||
g_XmppClient->SendIqGetConnectionData(m_HostJID, m_Password, true); | g_XmppClient->SendIqGetConnectionData(m_HostJID, m_Password, true); | ||||
// Return true anyways - we're on a success path here. | // Return true anyways - we're on a success path here. | ||||
return true; | return true; | ||||
} | } | ||||
g_XmppClient->SendStunEndpointToHost(ip, port, hostJID); | g_XmppClient->SendStunEndpointToHost(ip, port, hostJID); | ||||
SDL_Delay(1000); | SDL_Delay(1000); | ||||
} | |||||
StunClient::SendHolePunchingMessages(*enetClient, m_ServerAddress, m_ServerPort); | StunClient::SendHolePunchingMessages(*enetClient, m_ServerAddress, m_ServerPort); | ||||
} | |||||
if (!g_NetClient->SetupConnection(enetClient)) | if (!g_NetClient->SetupConnection(enetClient)) | ||||
{ | { | ||||
PushGuiMessage( | PushGuiMessage( | ||||
"type", "netstatus", | "type", "netstatus", | ||||
"status", "disconnected", | "status", "disconnected", | ||||
"reason", static_cast<i32>(NDR_UNKNOWN)); | "reason", static_cast<i32>(NDR_UNKNOWN)); | ||||
return false; | return false; | ||||
▲ Show 20 Lines • Show All 686 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator