Add deve request for auto-server port detection
This commit is contained in:
parent
12e4ba0f18
commit
0ecc6e34b9
@ -315,6 +315,28 @@ bool ConnectToServer::handleDirectConnect(int timeout)
|
|||||||
/*max_in_bandwidth*/0, /*max_out_bandwidth*/0, &ea,
|
/*max_in_bandwidth*/0, /*max_out_bandwidth*/0, &ea,
|
||||||
true/*change_port_if_bound*/);
|
true/*change_port_if_bound*/);
|
||||||
assert(dc);
|
assert(dc);
|
||||||
|
if (m_server_address.getPort() == 0)
|
||||||
|
{
|
||||||
|
// Get the server port of server from (common) server discovery port
|
||||||
|
Log::info("ConnectToServer", "Detect port for server address.");
|
||||||
|
BareNetworkString s(std::string("stk-server-port"));
|
||||||
|
TransportAddress address(m_server_address.getIP(),
|
||||||
|
NetworkConfig::get()->getServerDiscoveryPort());
|
||||||
|
dc->sendRawPacket(s, address);
|
||||||
|
TransportAddress sender;
|
||||||
|
const int LEN = 2048;
|
||||||
|
char buffer[LEN];
|
||||||
|
int len = dc->receiveRawPacket(buffer, LEN, &sender, 2000);
|
||||||
|
if (len != 2)
|
||||||
|
{
|
||||||
|
Log::error("ConnectToServer", "Invalid port number");
|
||||||
|
delete dc;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
BareNetworkString server_port(buffer, len);
|
||||||
|
uint16_t port = server_port.getUInt16();
|
||||||
|
m_server_address.setPort(port);
|
||||||
|
}
|
||||||
ENetPeer* p = dc->connectTo(m_server_address);
|
ENetPeer* p = dc->connectTo(m_server_address);
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
|
@ -959,6 +959,12 @@ void STKHost::handleDirectSocketRequest(Network* direct_socket,
|
|||||||
Log::error("STKHost", "which is not localhost - rejected.");
|
Log::error("STKHost", "which is not localhost - rejected.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (command == "stk-server-port")
|
||||||
|
{
|
||||||
|
BareNetworkString s;
|
||||||
|
s.addUInt16(m_private_port);
|
||||||
|
direct_socket->sendRawPacket(s, sender);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Log::info("STKHost", "Received unknown command '%s'",
|
Log::info("STKHost", "Received unknown command '%s'",
|
||||||
std::string(buffer, len).c_str());
|
std::string(buffer, len).c_str());
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "network/network_config.hpp"
|
#include "network/network_config.hpp"
|
||||||
#include "network/server.hpp"
|
#include "network/server.hpp"
|
||||||
#include "network/stk_host.hpp"
|
#include "network/stk_host.hpp"
|
||||||
|
#include "network/stk_peer.hpp"
|
||||||
#include "online/request_manager.hpp"
|
#include "online/request_manager.hpp"
|
||||||
#include "states_screens/networking_lobby.hpp"
|
#include "states_screens/networking_lobby.hpp"
|
||||||
#include "states_screens/online_lan.hpp"
|
#include "states_screens/online_lan.hpp"
|
||||||
@ -234,7 +235,8 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
core::stringw instruction =
|
core::stringw instruction =
|
||||||
_("Enter the server address with IP followed by : and then port.");
|
_("Enter the server address with IP (optional) followed by : and"
|
||||||
|
" then port.");
|
||||||
auto gtfd = new GeneralTextFieldDialog(instruction.c_str(),
|
auto gtfd = new GeneralTextFieldDialog(instruction.c_str(),
|
||||||
[] (const irr::core::stringw& text) {},
|
[] (const irr::core::stringw& text) {},
|
||||||
[this] (GUIEngine::LabelWidget* lw,
|
[this] (GUIEngine::LabelWidget* lw,
|
||||||
@ -242,7 +244,7 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
|||||||
{
|
{
|
||||||
TransportAddress server_addr(
|
TransportAddress server_addr(
|
||||||
StringUtils::wideToUtf8(tb->getText()));
|
StringUtils::wideToUtf8(tb->getText()));
|
||||||
if (server_addr.isUnset())
|
if (server_addr.getIP() == 0)
|
||||||
{
|
{
|
||||||
core::stringw err = _("Invalid server address: %s.",
|
core::stringw err = _("Invalid server address: %s.",
|
||||||
tb->getText());
|
tb->getText());
|
||||||
@ -269,9 +271,10 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_entered_server_address.copy(server_addr);
|
m_entered_server_address.copy(
|
||||||
|
STKHost::get()->getServerPeerForClient()->getAddress());
|
||||||
auto cl = LobbyProtocol::create<ClientLobby>();
|
auto cl = LobbyProtocol::create<ClientLobby>();
|
||||||
cl->setAddress(server_addr);
|
cl->setAddress(m_entered_server_address);
|
||||||
cl->requestStart();
|
cl->requestStart();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user