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,
|
||||
true/*change_port_if_bound*/);
|
||||
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);
|
||||
if (p)
|
||||
{
|
||||
|
@ -959,6 +959,12 @@ void STKHost::handleDirectSocketRequest(Network* direct_socket,
|
||||
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
|
||||
Log::info("STKHost", "Received unknown command '%s'",
|
||||
std::string(buffer, len).c_str());
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/server.hpp"
|
||||
#include "network/stk_host.hpp"
|
||||
#include "network/stk_peer.hpp"
|
||||
#include "online/request_manager.hpp"
|
||||
#include "states_screens/networking_lobby.hpp"
|
||||
#include "states_screens/online_lan.hpp"
|
||||
@ -234,7 +235,8 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
||||
return;
|
||||
}
|
||||
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(),
|
||||
[] (const irr::core::stringw& text) {},
|
||||
[this] (GUIEngine::LabelWidget* lw,
|
||||
@ -242,7 +244,7 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
||||
{
|
||||
TransportAddress server_addr(
|
||||
StringUtils::wideToUtf8(tb->getText()));
|
||||
if (server_addr.isUnset())
|
||||
if (server_addr.getIP() == 0)
|
||||
{
|
||||
core::stringw err = _("Invalid server address: %s.",
|
||||
tb->getText());
|
||||
@ -269,9 +271,10 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
|
||||
return false;
|
||||
}
|
||||
|
||||
m_entered_server_address.copy(server_addr);
|
||||
m_entered_server_address.copy(
|
||||
STKHost::get()->getServerPeerForClient()->getAddress());
|
||||
auto cl = LobbyProtocol::create<ClientLobby>();
|
||||
cl->setAddress(server_addr);
|
||||
cl->setAddress(m_entered_server_address);
|
||||
cl->requestStart();
|
||||
return true;
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user