diff options
-rw-r--r-- | src/camera.cpp | 38 | ||||
-rw-r--r-- | src/camera.h | 2 | ||||
-rw-r--r-- | src/client.h | 4 | ||||
-rw-r--r-- | src/client/clientlauncher.cpp | 56 | ||||
-rw-r--r-- | src/client/clientlauncher.h | 2 | ||||
-rw-r--r-- | src/game.cpp | 116 | ||||
-rw-r--r-- | src/game.h | 2 | ||||
-rw-r--r-- | src/network/clientpackethandler.cpp | 10 | ||||
-rw-r--r-- | src/network/networkprotocol.h | 48 |
9 files changed, 129 insertions, 149 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index 5200f71ba..111a4b241 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -119,34 +119,20 @@ Camera::~Camera() m_wieldmgr->drop(); } -bool Camera::successfullyCreated(std::wstring& error_message) +bool Camera::successfullyCreated(std::string &error_message) { - if (m_playernode == NULL) - { - error_message = L"Failed to create the player scene node"; - return false; - } - if (m_headnode == NULL) - { - error_message = L"Failed to create the head scene node"; - return false; - } - if (m_cameranode == NULL) - { - error_message = L"Failed to create the camera scene node"; - return false; - } - if (m_wieldmgr == NULL) - { - error_message = L"Failed to create the wielded item scene manager"; - return false; - } - if (m_wieldnode == NULL) - { - error_message = L"Failed to create the wielded item scene node"; - return false; + if (!m_playernode) { + error_message = "Failed to create the player scene node"; + } else if (!m_headnode) { + error_message = "Failed to create the head scene node"; + } else if (!m_cameranode) { + error_message = "Failed to create the camera scene node"; + } else if (!m_wieldmgr) { + error_message = "Failed to create the wielded item scene manager"; + } else if (!m_wieldnode) { + error_message = "Failed to create the wielded item scene node"; } - return true; + return error_message.empty(); } // Returns the fractional part of x diff --git a/src/camera.h b/src/camera.h index b53738860..b0d190a3a 100644 --- a/src/camera.h +++ b/src/camera.h @@ -110,7 +110,7 @@ public: } // Checks if the constructor was able to create the scene nodes - bool successfullyCreated(std::wstring& error_message); + bool successfullyCreated(std::string &error_message); // Step the camera: updates the viewing range and view bobbing. void step(f32 dtime); diff --git a/src/client.h b/src/client.h index ab5842678..9db9764dd 100644 --- a/src/client.h +++ b/src/client.h @@ -480,7 +480,7 @@ public: bool accessDenied() { return m_access_denied; } - std::wstring accessDeniedReason() + std::string accessDeniedReason() { return m_access_denied_reason; } bool itemdefReceived() @@ -589,7 +589,7 @@ private: u64 m_map_seed; std::string m_password; bool m_access_denied; - std::wstring m_access_denied_reason; + std::string m_access_denied_reason; std::queue<ClientEvent> m_client_event_queue; bool m_itemdef_received; bool m_nodedef_received; diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index ca5e12482..7b2aaa74f 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -156,7 +156,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) // If an error occurs, this is set to something by menu(). // It is then displayed before the menu shows on the next call to menu() - std::wstring error_message = L""; + std::string error_message; bool first_loop = true; @@ -184,7 +184,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) */ guiroot = guienv->addStaticText(L"", core::rect<s32>(0, 0, 10000, 10000)); - bool game_has_run = launch_game(&error_message, game_params, cmd_args); + bool game_has_run = launch_game(error_message, game_params, cmd_args); // If skip_main_menu, we only want to startup once if (skip_main_menu && !first_loop) @@ -207,7 +207,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) } if (current_playername.length() > PLAYERNAME_SIZE-1) { - error_message = wgettext("Player name too long."); + error_message = gettext("Player name too long."); playername = current_playername.substr(0, PLAYERNAME_SIZE-1); g_settings->set("name", playername); continue; @@ -245,25 +245,24 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) } //try catch (con::PeerNotFoundException &e) { - error_message = wgettext("Connection error (timed out?)"); - errorstream << wide_to_narrow(error_message) << std::endl; + error_message = gettext("Connection error (timed out?)"); + errorstream << error_message << std::endl; } #ifdef NDEBUG catch (std::exception &e) { - std::string narrow_message = "Some exception: \""; - narrow_message += e.what(); - narrow_message += "\""; - errorstream << narrow_message << std::endl; - error_message = narrow_to_wide(narrow_message); + std::string error_message = "Some exception: \""; + error_message += e.what(); + error_message += "\""; + errorstream << error_message << std::endl; } #endif // If no main menu, show error and exit if (skip_main_menu) { - if (error_message != L"") { + if (!error_message.empty()) { verbosestream << "error_message = " - << wide_to_narrow(error_message) << std::endl; + << error_message << std::endl; retval = false; } break; @@ -312,7 +311,7 @@ bool ClientLauncher::init_engine(int log_level) return device != NULL; } -bool ClientLauncher::launch_game(std::wstring *error_message, +bool ClientLauncher::launch_game(std::string &error_message, GameParams &game_params, const Settings &cmd_args) { // Initialize menu data @@ -320,9 +319,9 @@ bool ClientLauncher::launch_game(std::wstring *error_message, menudata.address = address; menudata.name = playername; menudata.port = itos(game_params.socket_port); - menudata.errormessage = wide_to_narrow(*error_message); + menudata.errormessage = error_message; - *error_message = L""; + error_message.clear(); if (cmd_args.exists("password")) menudata.password = cmd_args.get("password"); @@ -367,11 +366,11 @@ bool ClientLauncher::launch_game(std::wstring *error_message, } } - if (menudata.errormessage != "") { + if (!menudata.errormessage.empty()) { /* The calling function will pass this back into this function upon the * next iteration (if any) causing it to be displayed by the GUI */ - *error_message = narrow_to_wide(menudata.errormessage); + error_message = menudata.errormessage; return false; } @@ -410,25 +409,25 @@ bool ClientLauncher::launch_game(std::wstring *error_message, if (current_address == "") { // If local game if (worldspec.path == "") { - *error_message = wgettext("No world selected and no address " + error_message = gettext("No world selected and no address " "provided. Nothing to do."); - errorstream << wide_to_narrow(*error_message) << std::endl; + errorstream << error_message << std::endl; return false; } if (!fs::PathExists(worldspec.path)) { - *error_message = wgettext("Provided world path doesn't exist: ") - + narrow_to_wide(worldspec.path); - errorstream << wide_to_narrow(*error_message) << std::endl; + error_message = gettext("Provided world path doesn't exist: ") + + worldspec.path; + errorstream << error_message << std::endl; return false; } // Load gamespec for required game gamespec = findWorldSubgame(worldspec.path); if (!gamespec.isValid() && !game_params.game_spec.isValid()) { - *error_message = wgettext("Could not find or load game \"") - + narrow_to_wide(worldspec.gameid) + L"\""; - errorstream << wide_to_narrow(*error_message) << std::endl; + error_message = gettext("Could not find or load game \"") + + worldspec.gameid + "\""; + errorstream << error_message << std::endl; return false; } @@ -444,10 +443,9 @@ bool ClientLauncher::launch_game(std::wstring *error_message, } if (!gamespec.isValid()) { - *error_message = wgettext("Invalid gamespec."); - *error_message += L" (world_gameid=" - + narrow_to_wide(worldspec.gameid) + L")"; - errorstream << wide_to_narrow(*error_message) << std::endl; + error_message = gettext("Invalid gamespec."); + error_message += " (world.gameid=" + worldspec.gameid + ")"; + errorstream << error_message << std::endl; return false; } } diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h index c3e0ae866..09f8c039a 100644 --- a/src/client/clientlauncher.h +++ b/src/client/clientlauncher.h @@ -92,7 +92,7 @@ protected: void init_args(GameParams &game_params, const Settings &cmd_args); bool init_engine(int log_level); - bool launch_game(std::wstring *error_message, GameParams &game_params, + bool launch_game(std::string &error_message, GameParams &game_params, const Settings &cmd_args); void main_menu(MainMenuData *menudata); diff --git a/src/game.cpp b/src/game.cpp index 8a9f3e1ea..8a0cda126 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1423,7 +1423,7 @@ public: // If address is "", local server is used and address is updated std::string *address, u16 port, - std::wstring *error_message, + std::string &error_message, ChatBackend *chat_backend, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode); @@ -1445,9 +1445,8 @@ protected: // Client creation bool createClient(const std::string &playername, - const std::string &password, std::string *address, u16 port, - std::wstring *error_message); - bool initGui(std::wstring *error_message); + const std::string &password, std::string *address, u16 port); + bool initGui(); // Client connection bool connectToServer(const std::string &playername, @@ -1575,7 +1574,7 @@ private: video::IVideoDriver *driver; scene::ISceneManager *smgr; bool *kill; - std::wstring *error_message; + std::string *error_message; IGameDef *gamedef; // Convenience (same as *client) scene::ISceneNode *skybox; @@ -1692,7 +1691,7 @@ bool Game::startup(bool *kill, const std::string &password, std::string *address, // can change if simple_singleplayer_mode u16 port, - std::wstring *error_message, + std::string &error_message, ChatBackend *chat_backend, const SubgameSpec &gamespec, bool simple_singleplayer_mode) @@ -1700,7 +1699,7 @@ bool Game::startup(bool *kill, // "cache" this->device = device; this->kill = kill; - this->error_message = error_message; + this->error_message = &error_message; this->random_input = random_input; this->input = input; this->chat_backend = chat_backend; @@ -1714,7 +1713,7 @@ bool Game::startup(bool *kill, if (!init(map_dir, address, port, gamespec)) return false; - if (!createClient(playername, password, address, port, error_message)) + if (!createClient(playername, password, address, port)) return false; return true; @@ -1934,10 +1933,10 @@ bool Game::createSingleplayerServer(const std::string map_dir, } if (bind_addr.isIPv6() && !g_settings->getBool("enable_ipv6")) { - *error_message = L"Unable to listen on " + - narrow_to_wide(bind_addr.serializeString()) + - L" because IPv6 is disabled"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Unable to listen on " + + bind_addr.serializeString() + + " because IPv6 is disabled"; + errorstream << *error_message << std::endl; return false; } @@ -1950,8 +1949,7 @@ bool Game::createSingleplayerServer(const std::string map_dir, } bool Game::createClient(const std::string &playername, - const std::string &password, std::string *address, u16 port, - std::wstring *error_message) + const std::string &password, std::string *address, u16 port) { showOverlayMessage(wgettext("Creating client..."), 0, 10); @@ -1966,19 +1964,19 @@ bool Game::createClient(const std::string &playername, return false; if (!could_connect) { - if (*error_message == L"" && !connect_aborted) { + if (error_message->empty() && !connect_aborted) { // Should not happen if error messages are set properly - *error_message = L"Connection failed for unknown reason"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Connection failed for unknown reason"; + errorstream << *error_message << std::endl; } return false; } if (!getServerContent(&connect_aborted)) { - if (*error_message == L"" && !connect_aborted) { + if (error_message->empty() && !connect_aborted) { // Should not happen if error messages are set properly - *error_message = L"Connection failed for unknown reason"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Connection failed for unknown reason"; + errorstream << *error_message << std::endl; } return false; } @@ -1997,9 +1995,8 @@ bool Game::createClient(const std::string &playername, if (m_cache_enable_clouds) { clouds = new Clouds(smgr->getRootSceneNode(), smgr, -1, time(0)); if (!clouds) { - *error_message = L"Memory allocation error"; - *error_message += narrow_to_wide(" (clouds)"); - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Memory allocation error (clouds)"; + errorstream << *error_message << std::endl; return false; } } @@ -2012,9 +2009,8 @@ bool Game::createClient(const std::string &playername, local_inventory = new Inventory(itemdef_manager); if (!(sky && local_inventory)) { - *error_message = L"Memory allocation error"; - *error_message += narrow_to_wide(" (sky or local inventory)"); - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Memory allocation error (sky or local inventory)"; + errorstream << *error_message << std::endl; return false; } @@ -2028,7 +2024,7 @@ bool Game::createClient(const std::string &playername, crack_animation_length = 5; } - if (!initGui(error_message)) + if (!initGui()) return false; /* Set window caption @@ -2046,15 +2042,15 @@ bool Game::createClient(const std::string &playername, hud = new Hud(driver, smgr, guienv, gamedef, player, local_inventory); if (!hud) { - *error_message = L"Memory error: could not create HUD"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Memory error: could not create HUD"; + errorstream << *error_message << std::endl; return false; } return true; } -bool Game::initGui(std::wstring *error_message) +bool Game::initGui() { // First line of debug text guitext = guienv->addStaticText( @@ -2095,8 +2091,8 @@ bool Game::initGui(std::wstring *error_message) gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(), -1, chat_backend, client); if (!gui_chat_console) { - *error_message = L"Could not allocate memory for chat console"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Could not allocate memory for chat console"; + errorstream << *error_message << std::endl; return false; } @@ -2146,16 +2142,16 @@ bool Game::connectToServer(const std::string &playername, local_server_mode = true; } } catch (ResolveError &e) { - *error_message = L"Couldn't resolve address: " + narrow_to_wide(e.what()); - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = std::string("Couldn't resolve address: ") + e.what(); + errorstream << *error_message << std::endl; return false; } if (connect_address.isIPv6() && !g_settings->getBool("enable_ipv6")) { - *error_message = L"Unable to connect to " + - narrow_to_wide(connect_address.serializeString()) + - L" because IPv6 is disabled"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Unable to connect to " + + connect_address.serializeString() + + " because IPv6 is disabled"; + errorstream << *error_message << std::endl; return false; } @@ -2205,9 +2201,9 @@ bool Game::connectToServer(const std::string &playername, // Break conditions if (client->accessDenied()) { - *error_message = L"Access denied. Reason: " + *error_message = "Access denied. Reason: " + client->accessDeniedReason(); - errorstream << wide_to_narrow(*error_message) << std::endl; + errorstream << *error_message << std::endl; break; } @@ -2253,16 +2249,12 @@ bool Game::getServerContent(bool *aborted) } // Error conditions - if (client->accessDenied()) { - *error_message = L"Access denied. Reason: " - + client->accessDeniedReason(); - errorstream << wide_to_narrow(*error_message) << std::endl; + if (!checkConnection()) return false; - } if (client->getState() < LC_Init) { - *error_message = L"Client disconnected"; - errorstream << wide_to_narrow(*error_message) << std::endl; + *error_message = "Client disconnected"; + errorstream << *error_message << std::endl; return false; } @@ -2336,9 +2328,9 @@ inline void Game::updateInteractTimers(GameRunData *runData, f32 dtime) inline bool Game::checkConnection() { if (client->accessDenied()) { - *error_message = L"Access denied. Reason: " + *error_message = "Access denied. Reason: " + client->accessDeniedReason(); - errorstream << wide_to_narrow(*error_message) << std::endl; + errorstream << *error_message << std::endl; return false; } @@ -4219,7 +4211,7 @@ void the_game(bool *kill, const std::string &address, // If empty local server is created u16 port, - std::wstring &error_message, + std::string &error_message, ChatBackend &chat_backend, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode) @@ -4235,24 +4227,24 @@ void the_game(bool *kill, try { if (game.startup(kill, random_input, input, device, map_dir, - playername, password, &server_address, port, - &error_message, &chat_backend, gamespec, - simple_singleplayer_mode)) { - + playername, password, &server_address, port, + error_message, &chat_backend, gamespec, + simple_singleplayer_mode)) { game.run(); game.shutdown(); } } catch (SerializationError &e) { - error_message = L"A serialization error occurred:\n" - + narrow_to_wide(e.what()) + L"\n\nThe server is probably " - L" running a different version of " PROJECT_NAME "."; - errorstream << wide_to_narrow(error_message) << std::endl; + error_message = std::string("A serialization error occurred:\n") + + e.what() + "\n\nThe server is probably " + " running a different version of " PROJECT_NAME "."; + errorstream << error_message << std::endl; } catch (ServerError &e) { - error_message = narrow_to_wide(e.what()); - errorstream << "ServerError: " << e.what() << std::endl; + error_message = e.what(); + errorstream << "ServerError: " << error_message << std::endl; } catch (ModError &e) { - errorstream << "ModError: " << e.what() << std::endl; - error_message = narrow_to_wide(e.what()) + wstrgettext("\nCheck debug.txt for details."); + error_message = e.what() + strgettext("\nCheck debug.txt for details."); + errorstream << "ModError: " << error_message << std::endl; } } + diff --git a/src/game.h b/src/game.h index 61f780bee..358b26c37 100644 --- a/src/game.h +++ b/src/game.h @@ -145,7 +145,7 @@ void the_game(bool *kill, const std::string &password, const std::string &address, // If "", local server is used u16 port, - std::wstring &error_message, + std::string &error_message, ChatBackend &chat_backend, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode); diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 5acf04f91..4afe2a2ce 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -140,7 +140,7 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) // to be processed even if the serialisation format has // not been agreed yet, the same as TOCLIENT_INIT. m_access_denied = true; - m_access_denied_reason = L"Unknown"; + m_access_denied_reason = "Unknown"; if (pkt->getCommand() == TOCLIENT_ACCESS_DENIED) { if (pkt->getSize() < 1) @@ -149,7 +149,9 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA; *pkt >> denyCode; if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { - *pkt >> m_access_denied_reason; + std::wstring wide_reason; + *pkt >> wide_reason; + m_access_denied_reason = wide_to_narrow(wide_reason); } else if (denyCode < SERVER_ACCESSDENIED_MAX) { m_access_denied_reason = accessDeniedStrings[denyCode]; @@ -159,7 +161,9 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) // for compat with old clients else { if (pkt->getSize() >= 2) { - *pkt >> m_access_denied_reason; + std::wstring wide_reason; + *pkt >> wide_reason; + m_access_denied_reason = wide_to_narrow(wide_reason); } } } diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 599b70006..3a52ddacd 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -861,36 +861,36 @@ enum ToServerCommand }; enum AccessDeniedCode { - SERVER_ACCESSDENIED_WRONG_PASSWORD = 0, - SERVER_ACCESSDENIED_UNEXPECTED_DATA = 1, - SERVER_ACCESSDENIED_SINGLEPLAYER = 2, - SERVER_ACCESSDENIED_WRONG_VERSION = 3, - SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME = 4, - SERVER_ACCESSDENIED_WRONG_NAME = 5, - SERVER_ACCESSDENIED_TOO_MANY_USERS = 6, - SERVER_ACCESSDENIED_EMPTY_PASSWORD = 7, - SERVER_ACCESSDENIED_ALREADY_CONNECTED = 8, - SERVER_ACCESSDENIED_SERVER_FAIL = 9, - SERVER_ACCESSDENIED_CUSTOM_STRING = 10, - SERVER_ACCESSDENIED_MAX = 11, + SERVER_ACCESSDENIED_WRONG_PASSWORD, + SERVER_ACCESSDENIED_UNEXPECTED_DATA, + SERVER_ACCESSDENIED_SINGLEPLAYER, + SERVER_ACCESSDENIED_WRONG_VERSION, + SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME, + SERVER_ACCESSDENIED_WRONG_NAME, + SERVER_ACCESSDENIED_TOO_MANY_USERS, + SERVER_ACCESSDENIED_EMPTY_PASSWORD, + SERVER_ACCESSDENIED_ALREADY_CONNECTED, + SERVER_ACCESSDENIED_SERVER_FAIL, + SERVER_ACCESSDENIED_CUSTOM_STRING, + SERVER_ACCESSDENIED_MAX, }; enum NetProtoCompressionMode { NETPROTO_COMPRESSION_ZLIB = 0, }; -const static std::wstring accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { - L"Invalid password", - L"Your client sent something server didn't expect. Try reconnecting or updating your client", - L"The server is running in simple singleplayer mode. You cannot connect.", - L"Your client's version is not supported.\nPlease contact server administrator.", - L"Name contains unallowed characters", - L"Name is not allowed", - L"Too many users.", - L"Empty passwords are disallowed. Set a password and try again.", - L"Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", - L"Server authenticator failed. Maybe the servers has some problems." - L"", +const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { + "Invalid password", + "Your client sent something the server didn't expect. Try reconnecting or updating your client", + "The server is running in simple singleplayer mode. You cannot connect.", + "Your client's version is not supported.\nPlease contact server administrator.", + "Player name contains disallowed characters.", + "Player name not allowed.", + "Too many users.", + "Empty passwords are disallowed. Set a password and try again.", + "Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", + "Server authention failed. This is likely a server error." + "", }; #endif |