summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestHandlers
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-06-18 22:03:02 +0200
committerMatthias Schiffer <matthias@gamezock.de>2009-06-18 22:03:02 +0200
commit7234fe326d16d6bf9f4374a09ddc6ef790e6723f (patch)
tree437d4c40eeb1e9b34b369e4b82064a1572c7dac9 /src/Common/RequestHandlers
parentbf561f8226e97f4ace4f04bddf198175e91ee7f0 (diff)
downloadmad-7234fe326d16d6bf9f4374a09ddc6ef790e6723f.tar
mad-7234fe326d16d6bf9f4374a09ddc6ef790e6723f.zip
Globale Variablen durch Application-Klasse ersetzt
Diffstat (limited to 'src/Common/RequestHandlers')
-rw-r--r--src/Common/RequestHandlers/DisconnectRequestHandler.cpp3
-rw-r--r--src/Common/RequestHandlers/DisconnectRequestHandler.h3
-rw-r--r--src/Common/RequestHandlers/FSInfoRequestHandler.cpp2
-rw-r--r--src/Common/RequestHandlers/FSInfoRequestHandler.h4
-rw-r--r--src/Common/RequestHandlers/SimpleRequestHandler.cpp3
-rw-r--r--src/Common/RequestHandlers/SimpleRequestHandler.h8
-rw-r--r--src/Common/RequestHandlers/SimpleRequestHandlerGroup.cpp41
-rw-r--r--src/Common/RequestHandlers/SimpleRequestHandlerGroup.h19
-rw-r--r--src/Common/RequestHandlers/StatusRequestHandler.cpp6
-rw-r--r--src/Common/RequestHandlers/StatusRequestHandler.h4
10 files changed, 69 insertions, 24 deletions
diff --git a/src/Common/RequestHandlers/DisconnectRequestHandler.cpp b/src/Common/RequestHandlers/DisconnectRequestHandler.cpp
index 6c89ab2..11256b1 100644
--- a/src/Common/RequestHandlers/DisconnectRequestHandler.cpp
+++ b/src/Common/RequestHandlers/DisconnectRequestHandler.cpp
@@ -19,7 +19,6 @@
#include "DisconnectRequestHandler.h"
#include <Core/Exception.h>
-#include <Core/Logger.h>
namespace Mad {
namespace Common {
@@ -27,7 +26,7 @@ namespace RequestHandlers {
void DisconnectRequestHandler::handlePacket(boost::shared_ptr<const XmlPacket> packet) {
if(packet->getType() != "Disconnect") {
- Core::Logger::log(Core::Logger::ERROR, "Received an unexpected packet.");
+ getApplication()->log(Core::LoggerBase::ERROR, "Received an unexpected packet.");
XmlPacket ret;
ret.setType("Error");
diff --git a/src/Common/RequestHandlers/DisconnectRequestHandler.h b/src/Common/RequestHandlers/DisconnectRequestHandler.h
index 963f603..d94bc73 100644
--- a/src/Common/RequestHandlers/DisconnectRequestHandler.h
+++ b/src/Common/RequestHandlers/DisconnectRequestHandler.h
@@ -29,6 +29,9 @@ namespace RequestHandlers {
class DisconnectRequestHandler : public RequestHandler {
protected:
virtual void handlePacket(boost::shared_ptr<const XmlPacket> packet);
+
+ public:
+ DisconnectRequestHandler(Application *application) : RequestHandler(application) {}
};
}
diff --git a/src/Common/RequestHandlers/FSInfoRequestHandler.cpp b/src/Common/RequestHandlers/FSInfoRequestHandler.cpp
index 7ac4644..c036f7b 100644
--- a/src/Common/RequestHandlers/FSInfoRequestHandler.cpp
+++ b/src/Common/RequestHandlers/FSInfoRequestHandler.cpp
@@ -28,7 +28,7 @@ void FSInfoRequestHandler::handleRequest(boost::shared_ptr<const Common::XmlPack
// TODO Require authentication
std::vector<SystemManager::FSInfo> fsInfo;
- SystemManager::get()->getFSInfo(&fsInfo);
+ getApplication()->getSystemManager()->getFSInfo(&fsInfo);
ret->setType("OK");
ret->addList("filesystems");
diff --git a/src/Common/RequestHandlers/FSInfoRequestHandler.h b/src/Common/RequestHandlers/FSInfoRequestHandler.h
index 167e116..27a1af3 100644
--- a/src/Common/RequestHandlers/FSInfoRequestHandler.h
+++ b/src/Common/RequestHandlers/FSInfoRequestHandler.h
@@ -28,10 +28,10 @@ namespace RequestHandlers {
class FSInfoRequestHandler : public SimpleRequestHandler {
private:
- static void handleRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret);
+ void handleRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret);
public:
- FSInfoRequestHandler() : SimpleRequestHandler("FSInfo", &FSInfoRequestHandler::handleRequest) {}
+ FSInfoRequestHandler(Application *application) : SimpleRequestHandler(application, "FSInfo", boost::bind(&FSInfoRequestHandler::handleRequest, this, _1, _2)) {}
};
}
diff --git a/src/Common/RequestHandlers/SimpleRequestHandler.cpp b/src/Common/RequestHandlers/SimpleRequestHandler.cpp
index b6de0f4..b6a22bf 100644
--- a/src/Common/RequestHandlers/SimpleRequestHandler.cpp
+++ b/src/Common/RequestHandlers/SimpleRequestHandler.cpp
@@ -19,7 +19,6 @@
#include "SimpleRequestHandler.h"
-#include <Core/Logger.h>
#include <Core/Exception.h>
namespace Mad {
@@ -28,7 +27,7 @@ namespace RequestHandlers {
void SimpleRequestHandler::handlePacket(boost::shared_ptr<const XmlPacket> packet) {
if(packet->getType() != type) {
- Core::Logger::log(Core::Logger::ERROR, "Received an unexpected packet.");
+ getApplication()->log(Core::LoggerBase::ERROR, "Received an unexpected packet.");
XmlPacket ret;
ret.setType("Error");
diff --git a/src/Common/RequestHandlers/SimpleRequestHandler.h b/src/Common/RequestHandlers/SimpleRequestHandler.h
index 5d388d3..0c295b5 100644
--- a/src/Common/RequestHandlers/SimpleRequestHandler.h
+++ b/src/Common/RequestHandlers/SimpleRequestHandler.h
@@ -26,20 +26,16 @@ namespace Mad {
namespace Common {
namespace RequestHandlers {
-class SimpleRequestHandlerGroup;
-
class SimpleRequestHandler : public RequestHandler {
private:
- friend class SimpleRequestHandlerGroup;
-
std::string type;
boost::function2<void, boost::shared_ptr<const XmlPacket>, XmlPacket*> handler;
protected:
virtual void handlePacket(boost::shared_ptr<const XmlPacket> packet);
- SimpleRequestHandler(const std::string &type0, const boost::function2<void, boost::shared_ptr<const XmlPacket>, XmlPacket*> &handler0)
- : type(type0), handler(handler0) {}
+ SimpleRequestHandler(Application *application, const std::string &type0, const boost::function2<void, boost::shared_ptr<const XmlPacket>, XmlPacket*> &handler0)
+ : RequestHandler(application), type(type0), handler(handler0) {}
};
}
diff --git a/src/Common/RequestHandlers/SimpleRequestHandlerGroup.cpp b/src/Common/RequestHandlers/SimpleRequestHandlerGroup.cpp
index 9c80e23..845021d 100644
--- a/src/Common/RequestHandlers/SimpleRequestHandlerGroup.cpp
+++ b/src/Common/RequestHandlers/SimpleRequestHandlerGroup.cpp
@@ -20,17 +20,52 @@
#include "SimpleRequestHandlerGroup.h"
#include "SimpleRequestHandler.h"
+#include <Core/Exception.h>
+
namespace Mad {
namespace Common {
namespace RequestHandlers {
-boost::shared_ptr<RequestHandler> SimpleRequestHandlerGroup::createRequestHandler(const std::string &type) {
- std::map<std::string, boost::function2<void, boost::shared_ptr<const XmlPacket>, XmlPacket*> >::iterator handler = handlers.find(type);
+void SimpleRequestHandlerGroup::GroupRequestHandler::handlePacket(boost::shared_ptr<const XmlPacket> packet) {
+ if(packet->getType() != type) {
+ getApplication()->log(Core::LoggerBase::ERROR, "Received an unexpected packet.");
+
+ XmlPacket ret;
+ ret.setType("Error");
+ ret.add("ErrorCode", Core::Exception::UNEXPECTED_PACKET);
+
+ sendPacket(ret);
+
+ signalFinished();
+ return;
+ }
+
+ // TODO Require authentication
+
+ XmlPacket ret;
+
+ try {
+ handler(packet, &ret, getConnection());
+ }
+ catch(Core::Exception e) {
+ ret.setType("Error");
+ ret.add("ErrorCode", e.getErrorCode());
+ ret.add("SubCode", e.getSubCode());
+ ret.add("SubSubCode", e.getSubSubCode());
+ ret.add("Where", e.getWhere());
+ }
+
+ sendPacket(ret);
+ signalFinished();
+}
+
+boost::shared_ptr<RequestHandler> SimpleRequestHandlerGroup::createRequestHandler(Application *application, const std::string &type) {
+ std::map<std::string, boost::function3<void, boost::shared_ptr<const XmlPacket>, XmlPacket*, Connection*> >::iterator handler = handlers.find(type);
if(handler == handlers.end())
return boost::shared_ptr<RequestHandler>();
else
- return boost::shared_ptr<SimpleRequestHandler>(new SimpleRequestHandler(type, handler->second));
+ return boost::shared_ptr<GroupRequestHandler>(new GroupRequestHandler(application, type, handler->second));
}
}
diff --git a/src/Common/RequestHandlers/SimpleRequestHandlerGroup.h b/src/Common/RequestHandlers/SimpleRequestHandlerGroup.h
index 86009f3..32e46ce 100644
--- a/src/Common/RequestHandlers/SimpleRequestHandlerGroup.h
+++ b/src/Common/RequestHandlers/SimpleRequestHandlerGroup.h
@@ -28,11 +28,24 @@ namespace RequestHandlers {
class SimpleRequestHandlerGroup : public RequestHandlerGroup {
private:
+ class GroupRequestHandler : public RequestHandler {
+ private:
+ std::string type;
+ boost::function3<void, boost::shared_ptr<const XmlPacket>, XmlPacket*, Connection*> handler;
+
+ protected:
+ virtual void handlePacket(boost::shared_ptr<const XmlPacket> packet);
+
+ public:
+ GroupRequestHandler(Application *application, const std::string &type0, const boost::function3<void, boost::shared_ptr<const XmlPacket>, XmlPacket*, Connection*> &handler0)
+ : RequestHandler(application), type(type0), handler(handler0) {}
+ };
+
std::set<std::string> types;
- std::map<std::string, boost::function2<void, boost::shared_ptr<const XmlPacket>, XmlPacket*> > handlers;
+ std::map<std::string, boost::function3<void, boost::shared_ptr<const XmlPacket>, XmlPacket*, Connection*> > handlers;
protected:
- void registerHandler(const std::string &type, const boost::function2<void, boost::shared_ptr<const XmlPacket>, XmlPacket*> &handler) {
+ void registerHandler(const std::string &type, const boost::function3<void, boost::shared_ptr<const XmlPacket>, XmlPacket*, Connection*> &handler) {
types.insert(type);
handlers.insert(std::make_pair(type, handler));
}
@@ -44,7 +57,7 @@ class SimpleRequestHandlerGroup : public RequestHandlerGroup {
return types;
}
- virtual boost::shared_ptr<RequestHandler> createRequestHandler(const std::string &type);
+ virtual boost::shared_ptr<RequestHandler> createRequestHandler(Application *application, const std::string &type);
};
}
diff --git a/src/Common/RequestHandlers/StatusRequestHandler.cpp b/src/Common/RequestHandlers/StatusRequestHandler.cpp
index 7abcd7f..50dbe11 100644
--- a/src/Common/RequestHandlers/StatusRequestHandler.cpp
+++ b/src/Common/RequestHandlers/StatusRequestHandler.cpp
@@ -32,7 +32,7 @@ void StatusRequestHandler::handleRequest(boost::shared_ptr<const Common::XmlPack
try {
unsigned long uptime, idleTime;
- SystemManager::get()->getUptimeInfo(&uptime, &idleTime);
+ getApplication()->getSystemManager()->getUptimeInfo(&uptime, &idleTime);
ret->add("uptime", uptime);
ret->add("idleTime", idleTime);
@@ -42,7 +42,7 @@ void StatusRequestHandler::handleRequest(boost::shared_ptr<const Common::XmlPack
try {
unsigned long totalMem, freeMem, totalSwap, freeSwap;
- SystemManager::get()->getMemoryInfo(&totalMem, &freeMem, &totalSwap, &freeSwap);
+ getApplication()->getSystemManager()->getMemoryInfo(&totalMem, &freeMem, &totalSwap, &freeSwap);
ret->add("totalMem", totalMem);
ret->add("freeMem", freeMem);
@@ -55,7 +55,7 @@ void StatusRequestHandler::handleRequest(boost::shared_ptr<const Common::XmlPack
unsigned long currentLoad, nProcesses;
float loadAvg1, loadAvg5, loadAvg15;
- SystemManager::get()->getLoadInfo(&currentLoad, &nProcesses, &loadAvg1, &loadAvg5, &loadAvg15);
+ getApplication()->getSystemManager()->getLoadInfo(&currentLoad, &nProcesses, &loadAvg1, &loadAvg5, &loadAvg15);
ret->add("currentLoad", currentLoad);
ret->add("nProcesses", nProcesses);
diff --git a/src/Common/RequestHandlers/StatusRequestHandler.h b/src/Common/RequestHandlers/StatusRequestHandler.h
index 5583733..24158c9 100644
--- a/src/Common/RequestHandlers/StatusRequestHandler.h
+++ b/src/Common/RequestHandlers/StatusRequestHandler.h
@@ -28,10 +28,10 @@ namespace RequestHandlers {
class StatusRequestHandler : public SimpleRequestHandler {
private:
- static void handleRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret);
+ void handleRequest(boost::shared_ptr<const Common::XmlPacket> packet, Common::XmlPacket *ret);
public:
- StatusRequestHandler() : SimpleRequestHandler("GetStatus", &StatusRequestHandler::handleRequest) {}
+ StatusRequestHandler(Application *application) : SimpleRequestHandler(application, "GetStatus", boost::bind(&StatusRequestHandler::handleRequest, this, _1, _2)) {}
};
}