summaryrefslogtreecommitdiffstats
path: root/src/madc.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-09-10 03:26:49 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-09-10 03:26:49 +0200
commit707344b4d161cb5a11e7f78d7622cb7cd1a791f6 (patch)
tree8879f226c610e25fc532d64f40f2fe382e6d8371 /src/madc.cpp
parent8dd9bc2815347435c8f92bb329a0209b50660618 (diff)
downloadmad-707344b4d161cb5a11e7f78d7622cb7cd1a791f6.tar
mad-707344b4d161cb5a11e7f78d7622cb7cd1a791f6.zip
Client erweitert; Status-Befehl angefangen
Diffstat (limited to 'src/madc.cpp')
-rw-r--r--src/madc.cpp51
1 files changed, 24 insertions, 27 deletions
diff --git a/src/madc.cpp b/src/madc.cpp
index af39f2d..f7dc143 100644
--- a/src/madc.cpp
+++ b/src/madc.cpp
@@ -21,7 +21,7 @@
#include "Net/IPAddress.h"
#include "Common/RequestManager.h"
#include "Common/Util.h"
-#include "Client/RequestProcessor.h"
+#include "Client/CommandParser.h"
#include <iostream>
#include <cstring>
@@ -32,38 +32,36 @@
#include <readline/history.h>
-static Mad::Client::RequestProcessor *processor;
+static Mad::Client::CommandParser *parser;
+static struct pollfd fds[2];
+
static void usage(const std::string &cmd) {
std::cerr << "Usage: " << cmd << " address[:port]" << std::endl;
}
static void handleCommand(char *cmd) {
- if(!cmd) {
- processor->requestDisconnect();
- rl_callback_handler_remove();
-
+ if(!cmd)
+ parser->requestDisconnect();
+ else if(!*cmd)
return;
+ else {
+ parser->parse(cmd);
+ add_history(cmd);
}
- if(!*cmd)
- return;
-
- std::vector<std::string> splitCmd = Mad::Common::Util::split(cmd);
-
- if(splitCmd.empty())
- return;
-
- if(splitCmd[0] == "quit") {
- processor->requestDisconnect();
-
+ if(parser->requestsActive()) {
rl_callback_handler_remove();
+ fds[0].events = 0;
}
- else {
- std::cerr << "Unknown command \"" << splitCmd[0] << "\"." << std::endl;
- }
+}
+
+static void activateReadline() {
+ if(parser->willDisconnect())
+ return;
- add_history(cmd);
+ rl_callback_handler_install("mad: ", handleCommand);
+ fds[0].events = POLLIN;
}
int main(int argc, char *argv[]) {
@@ -93,26 +91,25 @@ int main(int argc, char *argv[]) {
requestManager.registerConnection(connection);
- processor = new Mad::Client::RequestProcessor(&requestManager, connection);
+ parser = new Mad::Client::CommandParser(&requestManager, connection);
+ parser->signalFinished().connect(sigc::ptr_fun(activateReadline));
- struct pollfd fds[2];
fds[0].fd = STDIN_FILENO;
- fds[0].events = POLLIN;
- rl_callback_handler_install("mad: ", handleCommand);
+ activateReadline();
while(connection->isConnected()) {
fds[1] = connection->getPollfd();
if(poll(fds, 2, 10000) > 0) {
- if(fds[0].revents)
+ if(fds[0].revents & POLLIN)
rl_callback_read_char();
connection->sendReceive(fds[1].revents);
}
}
- delete processor;
+ delete parser;
requestManager.unregisterConnection(connection);
}