diff options
author | est31 <MTest31@outlook.com> | 2015-07-17 16:40:41 +0200 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2015-07-23 07:38:13 +0200 |
commit | 3b50b2766aeb09c9fc0ad0ea07426bb2187df3d7 (patch) | |
tree | 5ae54f8dcfc2b496a4937dc8ccf524d7c99f4e23 /src/network | |
parent | 1e0e85f82e030e761c36ba5a12427bec0fb4e4f2 (diff) | |
download | minetest-3b50b2766aeb09c9fc0ad0ea07426bb2187df3d7.tar.gz minetest-3b50b2766aeb09c9fc0ad0ea07426bb2187df3d7.tar.bz2 minetest-3b50b2766aeb09c9fc0ad0ea07426bb2187df3d7.zip |
Optional reconnect functionality
Enable the server to request the client to reconnect.
This can be done with the now extended minetest.request_shutdown([reason], [reconnect]) setting.
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/clientpackethandler.cpp | 23 | ||||
-rw-r--r-- | src/network/networkprotocol.h | 9 |
2 files changed, 27 insertions, 5 deletions
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 15d5456fa..2133543d9 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -215,11 +215,28 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA; *pkt >> denyCode; - if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { + if (denyCode == SERVER_ACCESSDENIED_SHUTDOWN || + denyCode == SERVER_ACCESSDENIED_CRASH) { *pkt >> m_access_denied_reason; - } - else if (denyCode < SERVER_ACCESSDENIED_MAX) { + if (m_access_denied_reason == "") { + m_access_denied_reason = accessDeniedStrings[denyCode]; + } + u8 reconnect; + *pkt >> reconnect; + m_access_denied_reconnect = reconnect & 1; + } else if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { + *pkt >> m_access_denied_reason; + } else if (denyCode < SERVER_ACCESSDENIED_MAX) { m_access_denied_reason = accessDeniedStrings[denyCode]; + } else { + // Allow us to add new error messages to the + // protocol without raising the protocol version, if we want to. + // Until then (which may be never), this is outside + // of the defined protocol. + *pkt >> m_access_denied_reason; + if (m_access_denied_reason == "") { + m_access_denied_reason = "Unknown"; + } } } // 13/03/15 Legacy code from 0.4.12 and lesser. must stay 1 year diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index e4b566740..feb18e509 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -202,7 +202,8 @@ enum ToClientCommand TOCLIENT_ACCESS_DENIED = 0x0A, /* u8 reason - std::string custom reason (if reason == SERVER_ACCESSDENIED_CUSTOM_STRING) + std::string custom reason (if needed, otherwise "") + u8 (bool) reconnect */ TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks TOCLIENT_ADDNODE = 0x21, @@ -937,6 +938,8 @@ enum AccessDeniedCode { SERVER_ACCESSDENIED_ALREADY_CONNECTED, SERVER_ACCESSDENIED_SERVER_FAIL, SERVER_ACCESSDENIED_CUSTOM_STRING, + SERVER_ACCESSDENIED_SHUTDOWN, + SERVER_ACCESSDENIED_CRASH, SERVER_ACCESSDENIED_MAX, }; @@ -954,8 +957,10 @@ const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { "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." + "Server authentication failed. This is likely a server error.", "", + "Server shutting down.", + "This server has experienced an internal error. You will now be disconnected." }; #endif |