Allow non-saved password user to create wan server
This commit is contained in:
parent
cd5cb5ef6d
commit
18eb0a613a
53
src/main.cpp
53
src/main.cpp
@ -887,7 +887,6 @@ int handleCmdLine()
|
||||
int n;
|
||||
std::string s;
|
||||
|
||||
bool try_login = false;
|
||||
irr::core::stringw login, password;
|
||||
|
||||
if (CommandLine::has("--unit-testing"))
|
||||
@ -1011,24 +1010,33 @@ int handleCmdLine()
|
||||
} // --type
|
||||
|
||||
|
||||
if(CommandLine::has("--login", &s) )
|
||||
{
|
||||
if (CommandLine::has("--login", &s))
|
||||
login = s.c_str();
|
||||
try_login = true;
|
||||
} // --login
|
||||
|
||||
if(CommandLine::has("--password", &s))
|
||||
if (CommandLine::has("--password", &s))
|
||||
password = s.c_str();
|
||||
if (try_login)
|
||||
|
||||
bool can_wan = false;
|
||||
if (!login.empty() && !password.empty())
|
||||
{
|
||||
irr::core::stringw s;
|
||||
Online::XMLRequest* request =
|
||||
PlayerManager::requestSignIn(login, password);
|
||||
|
||||
if (request->isSuccess())
|
||||
while (PlayerManager::getCurrentOnlineState() != PlayerProfile::OS_SIGNED_IN)
|
||||
{
|
||||
Log::info("Main", "Logged in from command-line.");
|
||||
Online::RequestManager::get()->update(0.0f);
|
||||
StkTime::sleep(1);
|
||||
}
|
||||
Log::info("Main", "Logged in from command-line.");
|
||||
can_wan = true;
|
||||
delete request;
|
||||
}
|
||||
|
||||
if (!can_wan && CommandLine::has("--login-id", &n) &&
|
||||
CommandLine::has("--token", &s))
|
||||
{
|
||||
NetworkConfig::get()->setCurrentUserId(n);
|
||||
NetworkConfig::get()->setCurrentUserToken(s);
|
||||
can_wan = true;
|
||||
}
|
||||
|
||||
// Networking command lines
|
||||
@ -1080,29 +1088,30 @@ int handleCmdLine()
|
||||
|
||||
if (CommandLine::has("--wan-server", &s))
|
||||
{
|
||||
// Try to use saved user token if exists
|
||||
PlayerProfile* player = PlayerManager::getCurrentPlayer();
|
||||
if (player && player->wasOnlineLastTime() && player->wasOnlineLastTime() &&
|
||||
player->hasSavedSession())
|
||||
if (!can_wan && player && player->wasOnlineLastTime() &&
|
||||
player->wasOnlineLastTime() && player->hasSavedSession())
|
||||
{
|
||||
while (true)
|
||||
while (PlayerManager::getCurrentOnlineState() != PlayerProfile::OS_SIGNED_IN)
|
||||
{
|
||||
Online::RequestManager::get()->update(0.0f);
|
||||
StkTime::sleep(1);
|
||||
if (PlayerManager::getCurrentOnlineState() == PlayerProfile::OS_SIGNED_IN)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
can_wan = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Log::warn("main", "No saved online player session to create a wan server");
|
||||
}
|
||||
if (can_wan)
|
||||
{
|
||||
NetworkConfig::get()->setServerName(StringUtils::xmlDecode(s));
|
||||
NetworkConfig::get()->setIsServer(true);
|
||||
NetworkConfig::get()->setIsWAN();
|
||||
STKHost::create();
|
||||
Log::info("main", "Creating a WAN server '%s'.", s.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
Log::warn("main", "No saved online player session to create a wan server");
|
||||
}
|
||||
}
|
||||
else if (CommandLine::has("--lan-server", &s))
|
||||
{
|
||||
|
@ -17,6 +17,7 @@
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
#include "network/network_config.hpp"
|
||||
#include "online/xml_request.hpp"
|
||||
|
||||
NetworkConfig *NetworkConfig::m_network_config = NULL;
|
||||
bool NetworkConfig::m_disable_lan = false;
|
||||
@ -41,6 +42,8 @@ NetworkConfig::NetworkConfig()
|
||||
m_is_public_server = false;
|
||||
m_max_players = 4;
|
||||
m_direct_connect = false;
|
||||
m_cur_user_id = 0;
|
||||
m_cur_user_token = "";
|
||||
m_server_name = "";
|
||||
m_password = "";
|
||||
m_server_discovery_port = 2757;
|
||||
@ -106,3 +109,10 @@ std::pair<RaceManager::MinorRaceModeType, bool>
|
||||
return { RaceManager::MINOR_MODE_NORMAL_RACE, false };
|
||||
|
||||
} // getLocalGameMode
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void NetworkConfig::setUserDetails(Online::XMLRequest* r,
|
||||
const std::string& name)
|
||||
{
|
||||
assert(!m_cur_user_token.empty());
|
||||
} // setUserDetails
|
||||
|
@ -28,6 +28,11 @@
|
||||
|
||||
#include "irrString.h"
|
||||
|
||||
namespace Online
|
||||
{
|
||||
class XMLRequest;
|
||||
}
|
||||
|
||||
class NetworkConfig
|
||||
{
|
||||
private:
|
||||
@ -79,6 +84,10 @@ private:
|
||||
/** If this is a server, the server name. */
|
||||
irr::core::stringw m_server_name;
|
||||
|
||||
/** Used by wan server. */
|
||||
uint32_t m_cur_user_id;
|
||||
std::string m_cur_user_token;
|
||||
|
||||
NetworkConfig();
|
||||
|
||||
public:
|
||||
@ -198,6 +207,16 @@ public:
|
||||
// ------------------------------------------------------------------------
|
||||
bool isDirectConnect() const { return m_direct_connect; }
|
||||
// ------------------------------------------------------------------------
|
||||
void setCurrentUserId(uint32_t id) { m_cur_user_id = id ; }
|
||||
// ------------------------------------------------------------------------
|
||||
void setCurrentUserToken(const std::string& t) { m_cur_user_token = t; }
|
||||
// ------------------------------------------------------------------------
|
||||
uint32_t getCurrentUserId() const { return m_cur_user_id; }
|
||||
// ------------------------------------------------------------------------
|
||||
const std::string& getCurrentUserToken() const { return m_cur_user_token; }
|
||||
// ------------------------------------------------------------------------
|
||||
void setUserDetails(Online::XMLRequest* r, const std::string& name);
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
}; // class NetworkConfig
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "config/user_config.hpp"
|
||||
#include "guiengine/message_queue.hpp"
|
||||
#include "guiengine/screen.hpp"
|
||||
#include "network/network_config.hpp"
|
||||
#include "online/online_profile.hpp"
|
||||
#include "online/profile_manager.hpp"
|
||||
#include "states_screens/main_menu_screen.hpp"
|
||||
@ -208,9 +209,18 @@ namespace Online
|
||||
core::stringw username("");
|
||||
uint32_t userid(0);
|
||||
|
||||
#ifdef DEBUG
|
||||
int token_fetched = input->get("token", &m_token);
|
||||
int username_fetched = input->get("username", &username);
|
||||
int userid_fetched = input->get("userid", &userid);
|
||||
assert(token_fetched && username_fetched && userid_fetched);
|
||||
#else
|
||||
input->get("token", &m_token);
|
||||
input->get("username", &username);
|
||||
input->get("userid", &userid);
|
||||
#endif
|
||||
NetworkConfig::get()->setCurrentUserId(userid);
|
||||
NetworkConfig::get()->setCurrentUserToken(m_token);
|
||||
setLastOnlineName(username);
|
||||
|
||||
OnlineProfile* profile = new OnlineProfile(userid, username, true);
|
||||
@ -218,7 +228,6 @@ namespace Online
|
||||
// existing profile, and then delete profile. Only the returned
|
||||
// pointer is save to use.
|
||||
m_profile = ProfileManager::get()->addPersistent(profile);
|
||||
assert(token_fetched && username_fetched && userid_fetched);
|
||||
m_online_state = OS_SIGNED_IN;
|
||||
if(rememberPassword())
|
||||
{
|
||||
|
@ -215,6 +215,15 @@ void CreateServerScreen::createServer()
|
||||
std::string server_string = NetworkConfig::get()->isWAN() ?
|
||||
"--public-server --wan-server=" : "--lan-server=";
|
||||
server_string += StringUtils::xmlEncode(name);
|
||||
if (NetworkConfig::get()->isWAN())
|
||||
{
|
||||
char token[1024];
|
||||
sprintf(token, " --login-id=%d --token=%s",
|
||||
NetworkConfig::get()->getCurrentUserId(),
|
||||
NetworkConfig::get()->getCurrentUserToken().c_str());
|
||||
server_string += token;
|
||||
}
|
||||
|
||||
char option[1024];
|
||||
sprintf(option, " --no-graphics --type=%d --difficulty=%d "
|
||||
"--max-players=%d --network-console --no-console-log "
|
||||
|
Loading…
Reference in New Issue
Block a user