Allow using --connect-now with wan server with server-id

This commit is contained in:
Benau 2018-09-16 12:26:34 +08:00
parent 07e681e927
commit 2c35b0f03c
3 changed files with 38 additions and 20 deletions

View File

@ -22,6 +22,7 @@
#include "guiengine/widgets/model_view_widget.hpp"
#include "graphics/irr_driver.hpp"
#include "graphics/render_target.hpp"
#include "modes/profile_world.hpp"
#include <IAnimatedMesh.h>
#include <IAnimatedMeshSceneNode.h>
@ -55,7 +56,7 @@ m_rtt_size(rtt_size)
// so that the base class doesn't complain there is no icon defined
m_properties[PROP_ICON]="gui/main_help.png";
m_rtt_unsupported = false;
m_rtt_unsupported = ProfileWorld::isNoGraphics();
} // ModelViewWidget
// -----------------------------------------------------------------------------

View File

@ -224,6 +224,7 @@
#include "network/server_config.hpp"
#include "network/servers_manager.hpp"
#include "network/stk_host.hpp"
#include "network/stk_peer.hpp"
#include "online/profile_manager.hpp"
#include "online/request_manager.hpp"
#include "race/grand_prix_manager.hpp"
@ -608,6 +609,7 @@ void cmdLineHelp()
" --connect-now=ip Connect to a server with IP known now\n"
" (in format x.x.x.x:xxx(port)), the port should be its\n"
" public port.\n"
" --server-id=n Server id in stk addons for --connect-now.\n"
" --login=s Automatically log in (set the login).\n"
" --password=s Automatically log in (set the password).\n"
" --init-user Save the above login and password (if set) in config.\n"
@ -1243,6 +1245,31 @@ int handleCmdLine(bool has_server_config, bool has_parent_process)
{
NetworkConfig::get()->setIsPublicServer();
}
unsigned server_id = 0;
if ((NetworkConfig::get()->isServer() && ServerConfig::m_wan_server) ||
CommandLine::has("--server-id", &server_id))
{
PlayerProfile* player = PlayerManager::getCurrentPlayer();
// Try to use saved user token if exists
if (!can_wan && player && player->wasOnlineLastTime() &&
player->wasOnlineLastTime() && player->hasSavedSession())
{
while (PlayerManager::getCurrentOnlineState() !=
PlayerProfile::OS_SIGNED_IN)
{
Online::RequestManager::get()->update(0.0f);
StkTime::sleep(1);
}
can_wan = true;
}
else if (!can_wan)
{
Log::warn("main","No saved online player session to create "
"or connect to a wan server.");
}
}
if (CommandLine::has("--connect-now", &s))
{
TransportAddress server_addr(s);
@ -1257,6 +1284,12 @@ int handleCmdLine(bool has_server_config, bool has_parent_process)
STKHost::create();
auto cts = std::make_shared<ConnectToServer>(server);
cts->setup();
if (server_id != 0)
{
server->setServerId(server_id);
server->setSupportsEncryption(true);
cts->registerWithSTKServer();
}
Log::info("main", "Trying to connect to server '%s'.",
server_addr.toString().c_str());
if (!cts->tryConnect(2000, 15))
@ -1268,6 +1301,8 @@ int handleCmdLine(bool has_server_config, bool has_parent_process)
}
else
{
server_addr =
STKHost::get()->getServerPeerForClient()->getAddress();
auto cl = LobbyProtocol::create<ClientLobby>(server_addr, server);
cl->requestStart();
}
@ -1278,24 +1313,6 @@ int handleCmdLine(bool has_server_config, bool has_parent_process)
const std::string& server_name = ServerConfig::m_server_name;
if (ServerConfig::m_wan_server)
{
PlayerProfile* player = PlayerManager::getCurrentPlayer();
// Try to use saved user token if exists
if (!can_wan && player && player->wasOnlineLastTime() &&
player->wasOnlineLastTime() && player->hasSavedSession())
{
while (PlayerManager::getCurrentOnlineState() !=
PlayerProfile::OS_SIGNED_IN)
{
Online::RequestManager::get()->update(0.0f);
StkTime::sleep(1);
}
can_wan = true;
}
else if (!can_wan)
{
Log::warn("main",
"No saved online player session to create a wan server");
}
if (can_wan)
{
// Server owner online account will keep online as long as

View File

@ -44,7 +44,6 @@ private:
std::atomic<ConnectState> m_state;
void getClientServerInfo();
void registerWithSTKServer();
static TransportAddress m_server_address;
static int interceptCallback(ENetHost* host, ENetEvent* event);
static int m_retry_count;
@ -56,6 +55,7 @@ public:
virtual void setup() OVERRIDE;
virtual void asynchronousUpdate() OVERRIDE;
virtual void update(int ticks) OVERRIDE;
void registerWithSTKServer();
bool tryConnect(int timeout, int retry, bool another_port = false);
}; // class ConnectToServer