From 31699e830debae70b495dcec47c7fcae5331cff0 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Tue, 6 Jul 2010 19:54:17 +0000 Subject: [PATCH] Handle disconnections better. Remove local sessions (just use ENet for everything instead) because they add far too much complexity. Fix memory leaks. This was SVN commit r7706. --- .../data/mods/public/gui/common/network.js | 19 +++ .../mods/public/gui/gamesetup/gamesetup.js | 5 +- .../mods/public/gui/gamesetup/gamesetup.xml | 1 + .../mods/public/gui/gamesetup/gamesetup_mp.js | 16 +- .../public/gui/gamesetup/gamesetup_mp.xml | 8 +- source/graphics/MapReader.cpp | 4 +- source/gui/scripting/ScriptFunctions.cpp | 2 +- source/main.cpp | 8 + source/network/NetClient.cpp | 28 ++-- source/network/NetClient.h | 14 +- source/network/NetHost.h | 12 ++ source/network/NetMessage.cpp | 19 ++- source/network/NetServer.cpp | 131 +++++++--------- source/network/NetServer.h | 44 +++--- source/network/NetSession.cpp | 142 ++++-------------- source/network/NetSession.h | 141 ++++++----------- source/network/fsm.cpp | 2 +- source/network/fsm.h | 3 +- source/network/tests/test_Net.h | 5 +- source/ps/GameSetup/GameSetup.cpp | 2 +- 20 files changed, 262 insertions(+), 344 deletions(-) create mode 100644 binaries/data/mods/public/gui/common/network.js diff --git a/binaries/data/mods/public/gui/common/network.js b/binaries/data/mods/public/gui/common/network.js new file mode 100644 index 0000000000..a46dde84fa --- /dev/null +++ b/binaries/data/mods/public/gui/common/network.js @@ -0,0 +1,19 @@ +function getDisconnectReason(id) +{ + // Must be kept in sync with source/network/NetHost.h + switch (id) + { + case 0: return "Unknown reason"; + case 1: return "Unexpected shutdown"; + case 2: return "Incorrect network protocol version"; + case 3: return "Game has already started"; + default: return "[Invalid value "+id+"]"; + } +} + +function reportDisconnect(reason) +{ + messageBox(400, 200, + "Lost connection to the server.\n\nReason: " + getDisconnectReason(reason) + ".", + "Disconnected", 2); +} diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup.js b/binaries/data/mods/public/gui/gamesetup/gamesetup.js index 15986d95c2..20ae46590b 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -89,8 +89,9 @@ function handleNetMessage(message) case "disconnected": Engine.DisconnectNetworkGame(); Engine.PopGuiPage(); - messageBox(400, 200, "Connection to the server has been lost.", "Disconnected", 2); + reportDisconnect(message.reason); break; + default: error("Unrecognised netstatus type "+message.status); break; @@ -118,7 +119,7 @@ function handleNetMessage(message) break; case "start": - Engine.PushGuiPage("page_loading.xml", { "attribs": g_GameAttributes }); + Engine.SwitchGuiPage("page_loading.xml", { "attribs": g_GameAttributes }); break; case "chat": diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup.xml b/binaries/data/mods/public/gui/gamesetup/gamesetup.xml index 04fc080dd0..37ed42eca0 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup.xml +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup.xml @@ -2,6 +2,7 @@ +