From 46c110f7a14e4b5d0e8bd27259f7744ae8a36382 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 28 Feb 2009 19:09:43 +0100 Subject: DaemonListRequest und DaemonStateUpdateRequest benutzen jetzt XML --- src/Client/CommandManager.cpp | 1 - src/Client/CommandParser.cpp | 1 - src/Client/InformationManager.cpp | 47 +++++++++++++++++++------------ src/Client/InformationManager.h | 10 +++---- src/Client/Requests/DaemonListRequest.cpp | 11 +++++--- src/Client/Requests/DaemonListRequest.h | 9 +++--- 6 files changed, 45 insertions(+), 34 deletions(-) (limited to 'src/Client') diff --git a/src/Client/CommandManager.cpp b/src/Client/CommandManager.cpp index 90d15ae..d98b041 100644 --- a/src/Client/CommandManager.cpp +++ b/src/Client/CommandManager.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include diff --git a/src/Client/CommandParser.cpp b/src/Client/CommandParser.cpp index ff93aec..878e413 100644 --- a/src/Client/CommandParser.cpp +++ b/src/Client/CommandParser.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include diff --git a/src/Client/InformationManager.cpp b/src/Client/InformationManager.cpp index cef0ce1..616e09b 100644 --- a/src/Client/InformationManager.cpp +++ b/src/Client/InformationManager.cpp @@ -21,8 +21,6 @@ #include "Requests/DaemonListRequest.h" #include #include -#include -#include namespace Mad { @@ -31,10 +29,15 @@ namespace Client { InformationManager InformationManager::informationManager; -void InformationManager::DaemonStateUpdateRequest::handlePacket(Net::Connection *connection, const Net::Packet &packet) { - if(packet.getType() != Net::Packet::DAEMON_STATE_UPDATE) { +void InformationManager::DaemonStateUpdateRequestHandler::handlePacket(Net::Connection *connection, uint16_t requestId, const Common::XmlPacket &packet) { + if(packet.getType() != "UpdateHostState") { Common::Logger::log(Common::Logger::ERROR, "Received an unexpected packet."); - connection->send(Net::Packets::ErrorPacket(Net::Packet::ERROR, packet.getRequestId(), Common::Exception(Common::Exception::UNEXPECTED_PACKET))); + + Common::XmlPacket ret; + ret.setType("Error"); + ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + + connection->send(ret.encode(requestId)); signalFinished().emit(); return; @@ -42,26 +45,26 @@ void InformationManager::DaemonStateUpdateRequest::handlePacket(Net::Connection // TODO Require authentication - Net::Packets::HostStatePacket hostStatePacket(packet); - - std::map::iterator host = informationManager.get()->daemons.find(hostStatePacket.getName()); + std::map::iterator host = informationManager.get()->daemons.find(packet["name"]); if(host != informationManager.get()->daemons.end()) - host->second.setState(hostStatePacket.getState()); + host->second.setState(packet["state"]); else Common::Logger::log(Common::Logger::WARNING, "Received a state update for an unknown host."); - connection->send(Net::Packet(Net::Packet::OK, packet.getRequestId())); + Common::XmlPacket ret; + ret.setType("OK"); + connection->send(ret.encode(requestId)); signalFinished().emit(); } void InformationManager::doInit() { - Common::RequestManager::get()->registerPacketType(Net::Packet::DAEMON_STATE_UPDATE); + Common::RequestManager::get()->registerPacketType("UpdateHostState"); } void InformationManager::doDeinit() { - Common::RequestManager::get()->unregisterPacketType(Net::Packet::DAEMON_STATE_UPDATE); + Common::RequestManager::get()->unregisterPacketType("UpdateHostState"); } void InformationManager::updateDaemonList(Net::Connection *con) { @@ -69,7 +72,7 @@ void InformationManager::updateDaemonList(Net::Connection *con) { return; Common::RequestManager::get()->sendRequest(con, - std::auto_ptr( + std::auto_ptr( new Requests::DaemonListRequest(sigc::mem_fun(this, &InformationManager::daemonListRequestFinished)) ) ); @@ -77,13 +80,21 @@ void InformationManager::updateDaemonList(Net::Connection *con) { updating = true; } -void InformationManager::daemonListRequestFinished(const Common::Request &request) { +void InformationManager::daemonListRequestFinished(const Common::XmlRequest &request) { try { - const std::vector &hostInfo = request.getResult().getHostInfo(); + const Common::XmlPacket &packet = request.getResult(); + + const Common::XmlPacket::Element &hostInfo = packet["hosts"]; + + daemons.clear(); + + for(size_t i = 0; i < hostInfo.getSize(); ++i) { + Common::HostInfo info; + info.setName(hostInfo[i]["name"]); + info.setIP(hostInfo[i]["address"]); + info.setState(hostInfo[i]["state"]); - for(std::vector::const_iterator daemon = hostInfo.begin(); daemon != hostInfo.end(); ++daemon) { - daemons.clear(); - daemons.insert(std::make_pair(daemon->getName(), *daemon)); + daemons.insert(std::make_pair(info.getName(), info)); } } catch(Common::Exception &e) { diff --git a/src/Client/InformationManager.h b/src/Client/InformationManager.h index 80dab9f..890622c 100644 --- a/src/Client/InformationManager.h +++ b/src/Client/InformationManager.h @@ -25,7 +25,7 @@ #include #include -#include +#include namespace Mad { @@ -42,12 +42,12 @@ namespace Client { class InformationManager : public Common::Initializable { private: - class DaemonStateUpdateRequest : public Common::RequestHandler { + class DaemonStateUpdateRequestHandler : public Common::XmlRequestHandler { protected: - virtual void handlePacket(Net::Connection *connection, const Net::Packet &packet); + virtual void handlePacket(Net::Connection *connection, uint16_t requestId, const Common::XmlPacket &packet); public: - DaemonStateUpdateRequest() {} + DaemonStateUpdateRequestHandler() {} }; static InformationManager informationManager; @@ -62,7 +62,7 @@ class InformationManager : public Common::Initializable { InformationManager() : updating(false) {} - void daemonListRequestFinished(const Common::Request &request); + void daemonListRequestFinished(const Common::XmlRequest &request); protected: virtual void doInit(); diff --git a/src/Client/Requests/DaemonListRequest.cpp b/src/Client/Requests/DaemonListRequest.cpp index 690aaea..ec80828 100644 --- a/src/Client/Requests/DaemonListRequest.cpp +++ b/src/Client/Requests/DaemonListRequest.cpp @@ -25,16 +25,19 @@ namespace Client { namespace Requests { void DaemonListRequest::sendRequest(Net::Connection *connection, uint16_t requestId) { - connection->send(Net::Packet(Net::Packet::LIST_DAEMONS, requestId)); + Common::XmlPacket packet; + + packet.setType("ListHosts"); + connection->send(packet.encode(requestId)); } -void DaemonListRequest::handlePacket(Net::Connection*, const Net::Packet &packet) { - if(packet.getType() != Net::Packet::OK) { +void DaemonListRequest::handlePacket(Net::Connection*, uint16_t, const Common::XmlPacket &packet) { + if(packet.getType() != "OK") { finishWithError(Common::Exception(Common::Exception::UNEXPECTED_PACKET)); return; // TODO Logging } - finish(Net::Packets::HostListPacket(packet)); + finish(packet); } } diff --git a/src/Client/Requests/DaemonListRequest.h b/src/Client/Requests/DaemonListRequest.h index fbf0e70..ca37dbd 100644 --- a/src/Client/Requests/DaemonListRequest.h +++ b/src/Client/Requests/DaemonListRequest.h @@ -20,20 +20,19 @@ #ifndef MAD_CLIENT_REQUEST_DAEMONLISTREQUEST_H_ #define MAD_CLIENT_REQUEST_DAEMONLISTREQUEST_H_ -#include -#include +#include namespace Mad { namespace Client { namespace Requests { -class DaemonListRequest : public Common::Request { +class DaemonListRequest : public Common::XmlRequest { protected: virtual void sendRequest(Net::Connection *connection, uint16_t requestId); - virtual void handlePacket(Net::Connection *connection, const Net::Packet &packet); + virtual void handlePacket(Net::Connection*, uint16_t, const Common::XmlPacket &packet); public: - DaemonListRequest(slot_type slot) : Common::Request(slot) {} + DaemonListRequest(slot_type slot) : Common::XmlRequest(slot) {} }; } -- cgit v1.2.3