aboutsummaryrefslogtreecommitdiff
path: root/backends/networking/sdl_net/localwebserver.cpp
diff options
context:
space:
mode:
authorAlexander Tkachev2016-06-16 15:19:13 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commit5ac3adbd4fbf40c22fccab6ce8bf8dcab8f98eff (patch)
tree3b376dc1594ea7f4cddfaeedc6e7cacdc611021c /backends/networking/sdl_net/localwebserver.cpp
parent733d998e6a005af78b308817ea7326d1f5192069 (diff)
downloadscummvm-rg350-5ac3adbd4fbf40c22fccab6ce8bf8dcab8f98eff.tar.gz
scummvm-rg350-5ac3adbd4fbf40c22fccab6ce8bf8dcab8f98eff.tar.bz2
scummvm-rg350-5ac3adbd4fbf40c22fccab6ce8bf8dcab8f98eff.zip
CLOUD: Add IndexPageHandler
This commit also adds LocalWebserver's stopOnIdle(). That means server is not stopped immediately, but only when all clients are served.
Diffstat (limited to 'backends/networking/sdl_net/localwebserver.cpp')
-rw-r--r--backends/networking/sdl_net/localwebserver.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/backends/networking/sdl_net/localwebserver.cpp b/backends/networking/sdl_net/localwebserver.cpp
index 689bab4cb9..971f00af2a 100644
--- a/backends/networking/sdl_net/localwebserver.cpp
+++ b/backends/networking/sdl_net/localwebserver.cpp
@@ -40,7 +40,9 @@ DECLARE_SINGLETON(Networking::LocalWebserver);
namespace Networking {
-LocalWebserver::LocalWebserver(): _set(nullptr), _serverSocket(nullptr), _timerStarted(false), _clients(0) {}
+LocalWebserver::LocalWebserver(): _set(nullptr), _serverSocket(nullptr), _timerStarted(false), _stopOnIdle(false), _clients(0) {
+ _indexPageHandler.addPathHandler(*this);
+}
LocalWebserver::~LocalWebserver() {
stop();
@@ -110,11 +112,20 @@ void LocalWebserver::stop() {
}
}
+void LocalWebserver::stopOnIdle() { _stopOnIdle = true; }
+
void LocalWebserver::addPathHandler(Common::String path, ClientHandler handler) {
if (_pathHandlers.contains(path)) warning("LocalWebserver::addPathHandler: path already had a handler");
_pathHandlers[path] = handler;
}
+void LocalWebserver::removePathHandler(Common::String path) {
+ if (!_pathHandlers.contains(path)) warning("LocalWebserver::removePathHandler: no handler known for this path");
+ _pathHandlers.erase(path);
+}
+
+IndexPageHandler &LocalWebserver::indexPageHandler() { return _indexPageHandler; }
+
void LocalWebserver::handle() {
int numready = SDLNet_CheckSockets(_set, 0);
if (numready == -1) {
@@ -123,6 +134,16 @@ void LocalWebserver::handle() {
for (uint32 i = 0; i < MAX_CONNECTIONS; ++i)
handleClient(i);
+
+ if (_stopOnIdle) {
+ bool idle = true;
+ for (uint32 i = 0; i < MAX_CONNECTIONS; ++i)
+ if (_client[i].state() != INVALID) {
+ idle = false;
+ break;
+ }
+ if (idle) stop();
+ }
}
void LocalWebserver::handleClient(uint32 i) {