From 04abfb658d9a16e9354542e6ccf5a615cf909a7a Mon Sep 17 00:00:00 2001 From: lotodore Date: Thu, 3 Oct 2013 00:41:07 +0200 Subject: [PATCH] WebSocket protocol support can now be configured and is only used in the dedicated server. --- src/config/configfile.cpp | 4 +++- src/game_defs.h | 5 ++++- src/net/common/servermanager.cpp | 5 +++-- src/net/common/servermanagerirc.cpp | 4 ++-- src/net/servermanager.h | 2 +- src/net/servermanagerirc.h | 2 +- src/session.cpp | 10 +++++++++- 7 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/config/configfile.cpp b/src/config/configfile.cpp index 9c0b18e9..d9fc1a5f 100644 --- a/src/config/configfile.cpp +++ b/src/config/configfile.cpp @@ -64,7 +64,7 @@ ConfigFile::ConfigFile(char *argv0, bool readonly) : noWriteAccess(readonly) myConfigState = OK; // !!!! Revisionsnummer der Configdefaults !!!!! - configRev = 100; + configRev = 101; //standard defaults logOnOffDefault = "1"; @@ -220,7 +220,9 @@ ConfigFile::ConfigFile(char *argv0, bool readonly) : noWriteAccess(readonly) configList.push_back(ConfigInfo("ServerPassword", CONFIG_TYPE_STRING, "")); configList.push_back(ConfigInfo("ServerUseIpv6", CONFIG_TYPE_INT, "0")); configList.push_back(ConfigInfo("ServerUseSctp", CONFIG_TYPE_INT, "0")); + configList.push_back(ConfigInfo("ServerUseWebSocket", CONFIG_TYPE_INT, "0")); configList.push_back(ConfigInfo("ServerPort", CONFIG_TYPE_INT, "7234")); + configList.push_back(ConfigInfo("ServerWebSocketPort", CONFIG_TYPE_INT, "7233")); configList.push_back(ConfigInfo("ServerUsePutAvatars", CONFIG_TYPE_INT, "0")); configList.push_back(ConfigInfo("ServerPutAvatarsAddress", CONFIG_TYPE_STRING, "")); configList.push_back(ConfigInfo("ServerPutAvatarsUser", CONFIG_TYPE_STRING, "")); diff --git a/src/game_defs.h b/src/game_defs.h index bef056ce..aade5fd8 100644 --- a/src/game_defs.h +++ b/src/game_defs.h @@ -64,7 +64,10 @@ enum ServerMode { enum ServerTransportProtocol { TRANSPORT_PROTOCOL_TCP = 1, TRANSPORT_PROTOCOL_SCTP = 2, - TRANSPORT_PROTOCOL_TCP_SCTP = 3 + TRANSPORT_PROTOCOL_TCP_SCTP = 3, + TRANSPORT_PROTOCOL_WEBSOCKET = 4, + TRANSPORT_PROTOCOL_TCP_WEBSOCKET = 5, + TRANSPORT_PROTOCOL_TCP_SCTP_WEBSOCKET = 7 }; enum GameState { diff --git a/src/net/common/servermanager.cpp b/src/net/common/servermanager.cpp index 9f928b73..b75e6961 100644 --- a/src/net/common/servermanager.cpp +++ b/src/net/common/servermanager.cpp @@ -78,7 +78,7 @@ ServerManager::~ServerManager() } void -ServerManager::Init(unsigned serverPort, bool ipv6, ServerTransportProtocol proto, const string &logDir) +ServerManager::Init(unsigned serverPort, unsigned websocketPort, bool ipv6, int proto, const string &logDir) { GetLobbyThread().Init(logDir); @@ -93,9 +93,10 @@ ServerManager::Init(unsigned serverPort, bool ipv6, ServerTransportProtocol prot sctpAcceptHelper->Listen(serverPort, ipv6, logDir, m_lobbyThread); m_acceptHelperPool.push_back(sctpAcceptHelper); }*/ + if (proto & TRANSPORT_PROTOCOL_WEBSOCKET) { boost::shared_ptr webAcceptHelper(new ServerAcceptWebHelper(GetGui(), m_ioService)); - webAcceptHelper->Listen(7233, true, logDir, m_lobbyThread); + webAcceptHelper->Listen(websocketPort, ipv6, logDir, m_lobbyThread); m_acceptHelperPool.push_back(webAcceptHelper); } } diff --git a/src/net/common/servermanagerirc.cpp b/src/net/common/servermanagerirc.cpp index 6e55a0bb..3b7b028b 100644 --- a/src/net/common/servermanagerirc.cpp +++ b/src/net/common/servermanagerirc.cpp @@ -52,7 +52,7 @@ ServerManagerIrc::~ServerManagerIrc() } void -ServerManagerIrc::Init(unsigned serverPort, bool ipv6, ServerTransportProtocol proto, const string &logDir) +ServerManagerIrc::Init(unsigned serverPort, unsigned websocketPort, bool ipv6, int proto, const string &logDir) { boost::shared_ptr tmpIrcAdminThread; boost::shared_ptr tmpIrcLobbyThread; @@ -83,7 +83,7 @@ ServerManagerIrc::Init(unsigned serverPort, bool ipv6, ServerTransportProtocol p m_adminBot->Init(m_lobbyThread, tmpIrcAdminThread, myConfig.readConfigString("CacheDir")); m_lobbyBot->Init(m_lobbyThread, tmpIrcLobbyThread); - ServerManager::Init(serverPort, ipv6, proto, logDir); + ServerManager::Init(serverPort, websocketPort, ipv6, proto, logDir); } void diff --git a/src/net/servermanager.h b/src/net/servermanager.h index 1c88ecfa..09b7468d 100644 --- a/src/net/servermanager.h +++ b/src/net/servermanager.h @@ -54,7 +54,7 @@ public: virtual ~ServerManager(); // Set the parameters. - virtual void Init(unsigned serverPort, bool ipv6, ServerTransportProtocol proto, const std::string &logDir); + virtual void Init(unsigned serverPort, unsigned websocketPort, bool ipv6, int proto, const std::string &logDir); // Main start function. virtual void RunAll(); diff --git a/src/net/servermanagerirc.h b/src/net/servermanagerirc.h index 63ce6500..3126a98a 100644 --- a/src/net/servermanagerirc.h +++ b/src/net/servermanagerirc.h @@ -45,7 +45,7 @@ public: virtual ~ServerManagerIrc(); // Set the parameters. - virtual void Init(unsigned serverPort, bool ipv6, ServerTransportProtocol proto, const std::string &logDir); + virtual void Init(unsigned serverPort, unsigned websocketPort, bool ipv6, int proto, const std::string &logDir); // Main start function. virtual void RunAll(); diff --git a/src/session.cpp b/src/session.cpp index f68b7bae..5a067ba0 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -330,10 +330,18 @@ void Session::startNetworkServer(bool dedicated) myNetServer = ServerManagerFactory::CreateServerManager(*myConfig, *myGui, mode, *myAvatarManager); + int protocol = TRANSPORT_PROTOCOL_TCP; + if (dedicated && myConfig->readConfigInt("ServerUseWebSocket") == 1) { + protocol |= TRANSPORT_PROTOCOL_WEBSOCKET; + } + if (myConfig->readConfigInt("ServerUseSctp") == 1) { + protocol |= TRANSPORT_PROTOCOL_SCTP; + } myNetServer->Init( myConfig->readConfigInt("ServerPort"), + myConfig->readConfigInt("ServerWebSocketPort"), myConfig->readConfigInt("ServerUseIpv6") == 1, - myConfig->readConfigInt("ServerUseSctp") == 1 ? TRANSPORT_PROTOCOL_TCP_SCTP : TRANSPORT_PROTOCOL_TCP, + protocol, myQtToolsInterface->stringFromUtf8(myConfig->readConfigString("LogDir")) );