Allow re-enter password instantly for failed private server joining
This commit is contained in:
parent
1bd34e338e
commit
cc9980f2a4
@ -39,14 +39,18 @@
|
||||
#include "modes/profile_world.hpp"
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/network_timer_synchronizer.hpp"
|
||||
#include "network/protocols/client_lobby.hpp"
|
||||
#include "network/protocols/game_protocol.hpp"
|
||||
#include "network/protocol_manager.hpp"
|
||||
#include "network/race_event_manager.hpp"
|
||||
#include "network/rewind_manager.hpp"
|
||||
#include "network/server.hpp"
|
||||
#include "network/stk_host.hpp"
|
||||
#include "online/request_manager.hpp"
|
||||
#include "race/history.hpp"
|
||||
#include "race/race_manager.hpp"
|
||||
#include "states_screens/dialogs/server_info_dialog.hpp"
|
||||
#include "states_screens/online/server_selection.hpp"
|
||||
#include "states_screens/state_manager.hpp"
|
||||
#include "utils/profiler.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
@ -431,6 +435,10 @@ void MainLoop::run()
|
||||
if ((STKHost::existHost() && STKHost::get()->requestedShutdown()) ||
|
||||
m_request_abort)
|
||||
{
|
||||
bool was_lan = NetworkConfig::get()->isLAN();
|
||||
std::shared_ptr<Server> rejoin_server;
|
||||
if (auto cl = LobbyProtocol::get<ClientLobby>())
|
||||
rejoin_server = cl->getJoinedServer();
|
||||
bool exist_host = STKHost::existHost();
|
||||
core::stringw msg = _("Server connection timed out.");
|
||||
|
||||
@ -481,7 +489,19 @@ void MainLoop::run()
|
||||
NetworkConfig::get()->getResetScreens().data());
|
||||
MessageQueue::add(MessageQueue::MT_ERROR, msg);
|
||||
}
|
||||
NetworkConfig::get()->unsetNetworking();
|
||||
if (rejoin_server)
|
||||
{
|
||||
if (was_lan)
|
||||
NetworkConfig::get()->setIsLAN();
|
||||
else
|
||||
NetworkConfig::get()->setIsWAN();
|
||||
NetworkConfig::get()->setIsServer(false);
|
||||
ServerSelection::getInstance()->push();
|
||||
rejoin_server->setReconnectWhenQuitLobby(false);
|
||||
new ServerInfoDialog(rejoin_server);
|
||||
}
|
||||
else
|
||||
NetworkConfig::get()->unsetNetworking();
|
||||
}
|
||||
|
||||
if (m_request_abort)
|
||||
|
@ -925,6 +925,7 @@ void ClientLobby::connectionRefused(Event* event)
|
||||
break;
|
||||
}
|
||||
case RR_INCORRECT_PASSWORD:
|
||||
m_server->setReconnectWhenQuitLobby(true);
|
||||
STKHost::get()->setErrorMessage(
|
||||
_("Connection refused: Server password is incorrect."));
|
||||
break;
|
||||
|
@ -186,6 +186,7 @@ public:
|
||||
void handleClientCommand(const std::string& cmd);
|
||||
void updateAssetsToServer();
|
||||
ClientState getCurrentState() const { return m_state.load(); }
|
||||
std::shared_ptr<Server> getJoinedServer() const { return m_server; }
|
||||
};
|
||||
|
||||
#endif // CLIENT_LOBBY_HPP
|
||||
|
@ -39,6 +39,7 @@ Server::Server(const XMLNode& server_info) : m_supports_encrytion(true)
|
||||
const XMLNode& xml = *server_info.getNode("server-info");
|
||||
m_address.reset(new SocketAddress());
|
||||
|
||||
m_reconnect_when_quit_lobby = false;
|
||||
m_ipv6_connection = false;
|
||||
m_name = "";
|
||||
m_server_id = 0;
|
||||
|
@ -100,6 +100,8 @@ protected:
|
||||
|
||||
bool m_ipv6_connection;
|
||||
|
||||
bool m_reconnect_when_quit_lobby;
|
||||
|
||||
std::vector<std::tuple<
|
||||
/*rank*/int, core::stringw, /*scores*/double, /*playing time*/float
|
||||
> > m_players;
|
||||
@ -199,6 +201,11 @@ public:
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
virtual void saveServer() const {}
|
||||
// ------------------------------------------------------------------------
|
||||
bool reconnectWhenQuitLobby() const { return m_reconnect_when_quit_lobby; }
|
||||
// ------------------------------------------------------------------------
|
||||
void setReconnectWhenQuitLobby(bool val)
|
||||
{ m_reconnect_when_quit_lobby = val; }
|
||||
}; // Server
|
||||
|
||||
class UserDefinedServer : public Server
|
||||
|
@ -63,18 +63,19 @@ ServerInfoDialog::ServerInfoDialog(std::shared_ptr<Server> server)
|
||||
assert(m_join_widget != NULL);
|
||||
m_cancel_widget = getWidget<IconButtonWidget>("cancel");
|
||||
assert(m_cancel_widget != NULL);
|
||||
m_options_widget->setFocusForPlayer(PLAYER_ID_GAME_MASTER);
|
||||
|
||||
if (m_server->isPasswordProtected())
|
||||
{
|
||||
m_password = getWidget<TextBoxWidget>("password");
|
||||
m_password->setPasswordBox(true, L'*');
|
||||
assert(m_password != NULL);
|
||||
m_password->setFocusForPlayer(PLAYER_ID_GAME_MASTER);
|
||||
}
|
||||
else
|
||||
{
|
||||
Widget* password_box = getWidget("password-box");
|
||||
password_box->setCollapsed(true); // FIXME Doesn't reuse free space for other widgets
|
||||
m_options_widget->setFocusForPlayer(PLAYER_ID_GAME_MASTER);
|
||||
}
|
||||
|
||||
core::stringw difficulty = RaceManager::get()->getDifficultyName(
|
||||
|
Loading…
Reference in New Issue
Block a user