summaryrefslogtreecommitdiffstats
path: root/src/Client
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-02-28 19:09:43 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-02-28 19:09:43 +0100
commit46c110f7a14e4b5d0e8bd27259f7744ae8a36382 (patch)
tree94693ecffb8f1c553c12ea3a30920b2008e27b11 /src/Client
parent8f85624a76934b14e0ba0f49413f471f8f4aa4f1 (diff)
downloadmad-46c110f7a14e4b5d0e8bd27259f7744ae8a36382.tar
mad-46c110f7a14e4b5d0e8bd27259f7744ae8a36382.zip
DaemonListRequest und DaemonStateUpdateRequest benutzen jetzt XML
Diffstat (limited to 'src/Client')
-rw-r--r--src/Client/CommandManager.cpp1
-rw-r--r--src/Client/CommandParser.cpp1
-rw-r--r--src/Client/InformationManager.cpp47
-rw-r--r--src/Client/InformationManager.h10
-rw-r--r--src/Client/Requests/DaemonListRequest.cpp11
-rw-r--r--src/Client/Requests/DaemonListRequest.h9
6 files changed, 45 insertions, 34 deletions
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 <Common/Logger.h>
#include <Common/XmlRequest.h>
#include <Net/Packets/FSInfoPacket.h>
-#include <Net/Packets/HostListPacket.h>
#include <cmath>
#include <iostream>
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 <Common/Requests/StatusRequest.h>
#include <Common/Requests/UserListRequest.h>
#include <Common/Tokenizer.h>
-#include <Net/Packets/HostListPacket.h>
#include <iostream>
#include <cstdio>
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) {
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 <Common/HostInfo.h>
#include <Common/Initializable.h>
-#include <Common/Request.h>
+#include <Common/XmlRequest.h>
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<Net::Packets::HostListPacket> &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 <Common/Request.h>
-#include <Net/Packets/HostListPacket.h>
+#include <Common/XmlRequest.h>
namespace Mad {
namespace Client {
namespace Requests {
-class DaemonListRequest : public Common::Request<Net::Packets::HostListPacket> {
+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<Net::Packets::HostListPacket>(slot) {}
+ DaemonListRequest(slot_type slot) : Common::XmlRequest(slot) {}
};
}