From 6bd38c1e5d9e3a46494c4527cd7ddd4af74b9486 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Tue, 6 Jul 2010 20:51:45 +0000 Subject: [PATCH] Report errors when hosting/joining fails This was SVN commit r7709. --- .../data/mods/public/gui/common/network.js | 4 ++- .../mods/public/gui/gamesetup/gamesetup_mp.js | 26 ++++++++++++++-- source/gui/scripting/ScriptFunctions.cpp | 31 +++++++++++++++---- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/binaries/data/mods/public/gui/common/network.js b/binaries/data/mods/public/gui/common/network.js index a46dde84fa..49ae780f9f 100644 --- a/binaries/data/mods/public/gui/common/network.js +++ b/binaries/data/mods/public/gui/common/network.js @@ -13,7 +13,9 @@ function getDisconnectReason(id) function reportDisconnect(reason) { + var reasontext = (typeof reason == 'number' ? getDisconnectReason(reason) : reason); + messageBox(400, 200, - "Lost connection to the server.\n\nReason: " + getDisconnectReason(reason) + ".", + "Lost connection to the server.\n\nReason: " + reasontext + ".", "Disconnected", 2); } diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js b/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js index 9218fc125b..47ef46d9f0 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js @@ -71,13 +71,35 @@ function switchSetupPage(oldpage, newpage) function startHost(playername, servername) { - Engine.StartNetworkHost(playername); + try + { + Engine.StartNetworkHost(playername); + } + catch (e) + { + cancelSetup(); + messageBox(400, 200, + "Cannot host game: " + e.message + ".", + "Error", 2); + } + startConnectionStatus("server"); // TODO: ought to do something(?) with servername } function startJoin(playername, ip) { - Engine.StartNetworkJoin(playername, ip); + try + { + Engine.StartNetworkJoin(playername, ip); + } + catch (e) + { + cancelSetup(); + messageBox(400, 200, + "Cannot join game: " + e.message + ".", + "Error", 2); + } + startConnectionStatus("client"); } diff --git a/source/gui/scripting/ScriptFunctions.cpp b/source/gui/scripting/ScriptFunctions.cpp index 0c865d01aa..f0a51cb7f3 100644 --- a/source/gui/scripting/ScriptFunctions.cpp +++ b/source/gui/scripting/ScriptFunctions.cpp @@ -190,24 +190,38 @@ void SetNetworkGameAttributes(void* cbdata, CScriptVal attribs) g_NetServer->UpdateGameAttributes(gameAttribs); } -void StartNetworkHost(void* UNUSED(cbdata), std::wstring playerName) +void StartNetworkHost(void* cbdata, std::wstring playerName) { + CGUIManager* guiManager = static_cast (cbdata); + debug_assert(!g_NetClient); debug_assert(!g_NetServer); debug_assert(!g_Game); g_NetServer = new CNetServer(); - bool ok = g_NetServer->SetupConnection(); - debug_assert(ok); // TODO: need better error handling + if (!g_NetServer->SetupConnection()) + { + guiManager->GetScriptInterface().ReportError("Failed to start server"); + SAFE_DELETE(g_NetServer); + return; + } g_Game = new CGame(); g_NetClient = new CNetClient(g_Game); g_NetClient->SetUserName(playerName); - g_NetClient->SetupConnection("127.0.0.1"); + + if (!g_NetClient->SetupConnection("127.0.0.1")) + { + guiManager->GetScriptInterface().ReportError("Failed to connect to server"); + SAFE_DELETE(g_NetClient); + SAFE_DELETE(g_Game); + } } -void StartNetworkJoin(void* UNUSED(cbdata), std::wstring playerName, std::string serverAddress) +void StartNetworkJoin(void* cbdata, std::wstring playerName, std::string serverAddress) { + CGUIManager* guiManager = static_cast (cbdata); + debug_assert(!g_NetClient); debug_assert(!g_NetServer); debug_assert(!g_Game); @@ -215,7 +229,12 @@ void StartNetworkJoin(void* UNUSED(cbdata), std::wstring playerName, std::string g_Game = new CGame(); g_NetClient = new CNetClient(g_Game); g_NetClient->SetUserName(playerName); - g_NetClient->SetupConnection(serverAddress); + if (!g_NetClient->SetupConnection(serverAddress)) + { + guiManager->GetScriptInterface().ReportError("Failed to connect to server"); + SAFE_DELETE(g_NetClient); + SAFE_DELETE(g_Game); + } } void DisconnectNetworkGame(void* UNUSED(cbdata))