summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-09-16 04:54:36 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-09-16 04:54:36 +0200
commitd08a98b8304eb2c831907254095d6829fb98a95b (patch)
tree5ae7b3dfa427b3680ded829a8d5c12e8ed16ae3a /src
parenta37ee55e14db26ca273ddeca5b0ab0fb8c8de77c (diff)
downloadmad-d08a98b8304eb2c831907254095d6829fb98a95b.tar
mad-d08a98b8304eb2c831907254095d6829fb98a95b.zip
Korrekte Reaktion auf Fehler in DaemonStatusRequest
Diffstat (limited to 'src')
-rw-r--r--src/Client/CommandParser.cpp10
-rw-r--r--src/Client/CommandParser.h6
-rw-r--r--src/Client/Requests/DaemonStatusRequest.cpp13
-rw-r--r--src/Client/Requests/DaemonStatusRequest.h8
4 files changed, 33 insertions, 4 deletions
diff --git a/src/Client/CommandParser.cpp b/src/Client/CommandParser.cpp
index b9368b5..ab1165b 100644
--- a/src/Client/CommandParser.cpp
+++ b/src/Client/CommandParser.cpp
@@ -21,6 +21,7 @@
#include "Requests/CoreStatusRequest.h"
#include "Requests/DaemonListRequest.h"
#include "Requests/DaemonStatusRequest.h"
+#include <Common/Exception.h>
#include <Common/Requests/DisconnectRequest.h>
#include <Net/Packets/HostStatusPacket.h>
#include <Net/Packets/NameListPacket.h>
@@ -150,7 +151,7 @@ void CommandParser::statusCommand(const std::vector<std::string> &args) {
if(args.size() == 1)
Requests::CoreStatusRequest::send(connection, sigc::mem_fun(this, &CommandParser::coreStatusRequestFinished));
else if(args.size() == 2)
- Requests::DaemonStatusRequest::send(connection, sigc::mem_fun(this, &CommandParser::daemonStatusRequestFinished), args[1]);
+ Requests::DaemonStatusRequest::send(connection, sigc::mem_fun(this, &CommandParser::daemonStatusRequestFinished), sigc::mem_fun(this, &CommandParser::errorCallback), args[1]);
else {
std::cerr << args[0] << ": Too many arguments." << std::endl;
printUsage("status");
@@ -201,6 +202,13 @@ void CommandParser::daemonStatusRequestFinished(const Net::Packets::HostStatusPa
requestFinished();
}
+void CommandParser::errorCallback(const Common::Exception &exception) {
+ std::cerr << "An error occurred during your request." << std::endl;
+ std::cerr << "Error code: " << exception.getErrorCode() << std::endl << std::endl;
+
+ requestFinished();
+}
+
bool CommandParser::split(const std::string &str, std::vector<std::string> &ret) {
std::string temp;
bool quoteSingle = false, quoteDouble = false, escape = false;
diff --git a/src/Client/CommandParser.h b/src/Client/CommandParser.h
index e2b4d58..08b21a1 100644
--- a/src/Client/CommandParser.h
+++ b/src/Client/CommandParser.h
@@ -26,6 +26,10 @@
namespace Mad {
+namespace Common {
+class Exception;
+}
+
namespace Net {
class Connection;
@@ -74,6 +78,8 @@ class CommandParser {
void daemonListRequestFinished(const Net::Packets::NameListPacket &packet);
void daemonStatusRequestFinished(const Net::Packets::HostStatusPacket &packet);
+ void errorCallback(const Common::Exception &exception);
+
void requestFinished() {
activeRequests--;
diff --git a/src/Client/Requests/DaemonStatusRequest.cpp b/src/Client/Requests/DaemonStatusRequest.cpp
index 7a7b47e..719ae5c 100644
--- a/src/Client/Requests/DaemonStatusRequest.cpp
+++ b/src/Client/Requests/DaemonStatusRequest.cpp
@@ -19,16 +19,20 @@
#include "DaemonStatusRequest.h"
#include <Common/RequestManager.h>
+#include <Net/Packets/ErrorPacket.h>
#include <Net/Packets/HostStatusPacket.h>
namespace Mad {
namespace Client {
namespace Requests {
-bool DaemonStatusRequest::send(Net::Connection *connection, const sigc::slot<void,const Net::Packets::HostStatusPacket&> &callback, const std::string &daemon0) {
+bool DaemonStatusRequest::send(Net::Connection *connection, const sigc::slot<void,const Net::Packets::HostStatusPacket&> &callback,
+ const sigc::slot<void,const Common::Exception&> &errorCallback, const std::string &daemon0)
+{
DaemonStatusRequest *request = new DaemonStatusRequest(daemon0);
request->finished.connect(callback);
+ request->error.connect(errorCallback);
if(Mad::Common::RequestManager::getRequestManager()->sendRequest(connection, request))
return true;
@@ -45,7 +49,12 @@ bool DaemonStatusRequest::sendRequest(Net::Connection *connection, uint16_t requ
}
void DaemonStatusRequest::handlePacket(Net::Connection*, const Net::Packet &packet) {
- if(packet.getType() != Net::Packet::OK) {
+ if(packet.getType() == Net::Packet::ERROR) {
+ error(Net::Packets::ErrorPacket(packet).getException());
+ signalFinished().emit();
+ return;
+ }
+ else if(packet.getType() != Net::Packet::OK) {
signalFinished().emit();
return; // TODO Logging
}
diff --git a/src/Client/Requests/DaemonStatusRequest.h b/src/Client/Requests/DaemonStatusRequest.h
index 34d3a90..f5c130d 100644
--- a/src/Client/Requests/DaemonStatusRequest.h
+++ b/src/Client/Requests/DaemonStatusRequest.h
@@ -27,6 +27,10 @@
namespace Mad {
+namespace Common {
+class Exception;
+}
+
namespace Net {
namespace Packets {
class HostStatusPacket;
@@ -39,13 +43,15 @@ namespace Requests {
class DaemonStatusRequest : public Common::Request {
private:
sigc::signal<void,const Net::Packets::HostStatusPacket&> finished;
+ sigc::signal<void,const Common::Exception&> error;
std::string daemon;
DaemonStatusRequest(const std::string &daemon0) : daemon(daemon0) {}
public:
- static bool send(Net::Connection *connection, const sigc::slot<void,const Net::Packets::HostStatusPacket&> &callback, const std::string &daemon0);
+ static bool send(Net::Connection *connection, const sigc::slot<void,const Net::Packets::HostStatusPacket&> &callback,
+ const sigc::slot<void,const Common::Exception&> &errorCallback, const std::string &daemon0);
virtual bool sendRequest(Net::Connection *connection, uint16_t requestId);
virtual void handlePacket(Net::Connection*, const Net::Packet &packet);