diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-06-18 22:03:02 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-06-18 22:03:02 +0200 |
commit | 7234fe326d16d6bf9f4374a09ddc6ef790e6723f (patch) | |
tree | 437d4c40eeb1e9b34b369e4b82064a1572c7dac9 /src/Common/RequestHandlers | |
parent | bf561f8226e97f4ace4f04bddf198175e91ee7f0 (diff) | |
download | mad-7234fe326d16d6bf9f4374a09ddc6ef790e6723f.tar mad-7234fe326d16d6bf9f4374a09ddc6ef790e6723f.zip |
Globale Variablen durch Application-Klasse ersetzt
Diffstat (limited to 'src/Common/RequestHandlers')
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(¤tLoad, &nProcesses, &loadAvg1, &loadAvg5, &loadAvg15); + getApplication()->getSystemManager()->getLoadInfo(¤tLoad, &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)) {} }; } |