diff options
Diffstat (limited to 'src/Client/InformationManager.cpp')
-rw-r--r-- | src/Client/InformationManager.cpp | 47 |
1 files changed, 29 insertions, 18 deletions
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 <Common/Logger.h> #include <Common/RequestManager.h> -#include <Net/Packets/ErrorPacket.h> -#include <Net/Packets/HostStatePacket.h> 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<std::string, Common::HostInfo>::iterator host = informationManager.get()->daemons.find(hostStatePacket.getName()); + std::map<std::string, Common::HostInfo>::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<DaemonStateUpdateRequest>(Net::Packet::DAEMON_STATE_UPDATE); + Common::RequestManager::get()->registerPacketType<DaemonStateUpdateRequestHandler>("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<Common::RequestBase>( + std::auto_ptr<Common::XmlRequest>( 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<Net::Packets::HostListPacket> &request) { +void InformationManager::daemonListRequestFinished(const Common::XmlRequest &request) { try { - const std::vector<Common::HostInfo> &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<Common::HostInfo>::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) { |