summaryrefslogtreecommitdiffstats
path: root/src/Client/InformationManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Client/InformationManager.cpp')
-rw-r--r--src/Client/InformationManager.cpp47
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) {