From 039c218a7b1f2eae4f8e8305bc8e8bf70a67beab Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 17 Sep 2008 05:33:01 +0200 Subject: Interface der Request-Klassen verbessert; muss noch vereinfacht werden --- src/Client/CommandParser.cpp | 71 ++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 25 deletions(-) (limited to 'src/Client/CommandParser.cpp') diff --git a/src/Client/CommandParser.cpp b/src/Client/CommandParser.cpp index 3cb5749..407b9c8 100644 --- a/src/Client/CommandParser.cpp +++ b/src/Client/CommandParser.cpp @@ -22,6 +22,7 @@ #include "Requests/DaemonListRequest.h" #include "Requests/DaemonStatusRequest.h" #include +#include #include #include #include @@ -144,14 +145,14 @@ void CommandParser::helpCommand(const std::vector &args) { void CommandParser::listHostsCommand(const std::vector&) { activeRequests++; - Requests::DaemonListRequest::send(connection, sigc::mem_fun(this, &CommandParser::daemonListRequestFinished)); + Common::RequestManager::getRequestManager()->sendRequest(connection, std::auto_ptr(new Requests::DaemonListRequest(sigc::mem_fun(this, &CommandParser::daemonListRequestFinished)))); } void CommandParser::statusCommand(const std::vector &args) { if(args.size() == 1) - Requests::CoreStatusRequest::send(connection, sigc::mem_fun(this, &CommandParser::coreStatusRequestFinished)); + Common::RequestManager::getRequestManager()->sendRequest(connection, std::auto_ptr(new Requests::CoreStatusRequest(sigc::mem_fun(this, &CommandParser::coreStatusRequestFinished)))); else if(args.size() == 2) - Requests::DaemonStatusRequest::send(connection, sigc::mem_fun(this, &CommandParser::daemonStatusRequestFinished), sigc::mem_fun(this, &CommandParser::errorCallback), args[1]); + Common::RequestManager::getRequestManager()->sendRequest(connection, std::auto_ptr(new Requests::DaemonStatusRequest(args[1], sigc::mem_fun(this, &CommandParser::daemonStatusRequestFinished)))); else { std::cerr << args[0] << ": Too many arguments." << std::endl; printUsage("status"); @@ -163,47 +164,67 @@ void CommandParser::statusCommand(const std::vector &args) { void CommandParser::exitCommand(const std::vector&) { activeRequests++; - disconnect = true; - Common::Requests::DisconnectRequest::send(connection, sigc::mem_fun(this, &CommandParser::requestFinished)); + Common::RequestManager::getRequestManager()->sendRequest(connection, std::auto_ptr(new Common::Requests::DisconnectRequest(sigc::mem_fun(this, &CommandParser::disconnectRequestFinished)))); } -void CommandParser::coreStatusRequestFinished(const Net::Packets::HostStatusPacket &packet) { - std::cout << "Server status:" << std::endl; - - printHostStatus(packet); +void CommandParser::coreStatusRequestFinished(const Common::Request &request) { + try { + const Net::Packets::HostStatusPacket &packet = request.getResult(); + std::cout << "Server status:" << std::endl; + printHostStatus(packet); + } + catch(Common::Exception &exception) { + std::cerr << "An error occurred during your request: " << exception.strerror() << "." << std::endl << std::endl; + } requestFinished(); } -void CommandParser::daemonListRequestFinished(const Net::Packets::NameListPacket &packet) { - const std::vector& hosts = packet.getNameList(); +void CommandParser::daemonListRequestFinished(const Common::Request &request) { + try { + const std::vector& hosts = request.getResult().getNameList(); - if(hosts.empty()) { - std::cout << "There aren't any active hosts." << std::endl << std::endl; - } - else { - std::cout << "Active hosts:" << std::endl; + if(hosts.empty()) { + std::cout << "There aren't any active hosts." << std::endl << std::endl; + } + else { + std::cout << "Active hosts:" << std::endl; - for(std::vector::const_iterator host = hosts.begin(); host != hosts.end(); ++host) - std::cout << "\t" << *host << std::endl; + for(std::vector::const_iterator host = hosts.begin(); host != hosts.end(); ++host) + std::cout << "\t" << *host << std::endl; - std::cout << std::endl; + std::cout << std::endl; + } + } + catch(Common::Exception &exception) { + std::cerr << "An error occurred during your request: " << exception.strerror() << "." << std::endl << std::endl; } requestFinished(); } -void CommandParser::daemonStatusRequestFinished(const Net::Packets::HostStatusPacket &packet) { - std::cout << "Host status:" << std::endl; - - printHostStatus(packet); +void CommandParser::daemonStatusRequestFinished(const Common::Request &request) { + try { + const Net::Packets::HostStatusPacket &packet = request.getResult(); + std::cout << "Host status:" << std::endl; + printHostStatus(packet); + } + catch(Common::Exception &exception) { + std::cerr << "An error occurred during your request: " << exception.strerror() << "." << std::endl << std::endl; + } requestFinished(); } -void CommandParser::errorCallback(const Common::Exception &exception) { - std::cerr << "An error occurred during your request: " << exception.strerror() << "." << std::endl << std::endl; +void CommandParser::disconnectRequestFinished(const Common::Request<> &request) { + try { + request.getResult(); + disconnect = true; + } + catch(Common::Exception &exception) { + std::cerr << "An error occurred during your request: " << exception.strerror() << "." << std::endl << std::endl; + } requestFinished(); } -- cgit v1.2.3