From 09494f0681def3c6cf585eda25b8bb236560ddac Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 16 Oct 2006 16:43:52 +0000 Subject: [PATCH] Prepare some changes in the file layout. --- network/builtin_cmds.cpp | 10 ++++++++-- network/messages.cpp | 28 +++++++++++++++++++--------- network/messages.h | 22 ++++++++++++++-------- network/server.cpp | 13 +++++++++++++ network/server.h | 6 ++++++ 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/network/builtin_cmds.cpp b/network/builtin_cmds.cpp index 3bffb1f0..c7c3a9d8 100644 --- a/network/builtin_cmds.cpp +++ b/network/builtin_cmds.cpp @@ -22,19 +22,25 @@ #include "messages.h" +/** This macro marks strings as translateable for Qt's linguist tools */ #define _(str) QT_TR_NOOP(str) + /** Defines the message codes according to RFCs 1495/281x. * Named commands have a negative enum value. */ +/** \NOTE: Function handlers _must_ be global functions or static methods! */ + +/** Set handler addresses to 0 to use the default (server) handler. */ + BuiltinCmd builtins[] = { { _("admin"), _("Get information about the administrator of a server."), _("[server]"), _("server: Server"), - &Message::test1 }, + 0, 0 }, - { 0, 0, 0, 0, 0 } + { 0, 0, 0, 0, 0, 0 } }; diff --git a/network/messages.cpp b/network/messages.cpp index e0fc29b3..912c3623 100644 --- a/network/messages.cpp +++ b/network/messages.cpp @@ -23,6 +23,8 @@ extern BuiltinCmd builtins[]; +recvHandlerType Message::defaultRecvHandler; +sendHandlerType Message::defaultSendHandler; QHash Message::cmdTypes; Message::Message(QString _cmd, QStringList args) { @@ -30,25 +32,36 @@ Message::Message(QString _cmd, QStringList args) { params = args; } -void Message::init() { +void Message::init(recvHandlerType _r, sendHandlerType _s) { + defaultRecvHandler = _r; + defaultSendHandler = _s; + // Register builtin commands for(int i = 0; ; i++) { - if(!builtins[i].handler) break; + if(builtins[i].cmd.isEmpty()) break; CmdType c; c.cmd = builtins[i].cmd.toLower(); c.cmdDescr = builtins[i].cmdDescr; c.args = builtins[i].args; c.argsDescr = builtins[i].argsDescr; - c.handler = builtins[i].handler; + c.recvHandler = ( builtins[i].recvHandler ? builtins[i].recvHandler : defaultRecvHandler); + c.sendHandler = ( builtins[i].sendHandler ? builtins[i].sendHandler : defaultSendHandler); cmdTypes.insert(c.cmd, c); } } -cmdhandler Message::getCmdHandler() { +recvHandlerType Message::getRecvHandler() { + CmdType c = cmdTypes[cmd]; + if(c.recvHandler) return c.recvHandler; + qDebug() << "No recvHandler defined for " << cmd << "!"; + return 0; +} + +sendHandlerType Message::getSendHandler() { CmdType c = cmdTypes[cmd]; - if(c.handler) return c.handler; - qDebug() << "No handler defined for " << cmd << "!"; + if(c.sendHandler) return c.sendHandler; + qDebug() << "No sendHandler defined for " << cmd << "!"; return 0; } @@ -66,6 +79,3 @@ void Message::parseParams(QString str) { } */ -void Message::test1(QStringList foo) { qDebug() << "Test 1! " << cmd; }; - -void Message::test2(QStringList bar) { qDebug() << "Test 2!"; }; diff --git a/network/messages.h b/network/messages.h index 0ac7cfff..c1a48ee4 100644 --- a/network/messages.h +++ b/network/messages.h @@ -25,9 +25,12 @@ #include #include +class Server; +class Buffer; class Message; -typedef void (Message::* cmdhandler)(QStringList); +typedef void (*sendHandlerType)(Message *); // handler for commands sent by the user +typedef void (*recvHandlerType)(Message *); // handler for incoming messages /** * This contains information that depends (solely) on the message type, such as the handler function and help texts. @@ -38,7 +41,8 @@ struct CmdType { QString cmdDescr; QString args; QString argsDescr; - cmdhandler handler; + recvHandlerType recvHandler; + sendHandlerType sendHandler; }; @@ -56,16 +60,17 @@ class Message { virtual ~Message() {}; - static void init(); + static void init(recvHandlerType defaultRevcHandler, sendHandlerType defaultSendHandler); //static registerCmd(); //static unregisterCmd(); - cmdhandler getCmdHandler(); - - void test1(QStringList); - void test2(QStringList); + recvHandlerType getRecvHandler(); + sendHandlerType getSendHandler(); protected: + static recvHandlerType defaultRecvHandler; + static sendHandlerType defaultSendHandler; + static QHash cmdTypes; }; @@ -79,7 +84,8 @@ struct BuiltinCmd { QString cmdDescr; QString args; QString argsDescr; - cmdhandler handler; + recvHandlerType recvHandler; + sendHandlerType sendHandler; }; #endif diff --git a/network/server.cpp b/network/server.cpp index d493e67c..ae8cd570 100644 --- a/network/server.cpp +++ b/network/server.cpp @@ -29,6 +29,10 @@ Server::~Server() { delete socket; } +void Server::init() { + Message::init(&handleServerMsg, &handleUserMsg); +} + void Server::run() { connect(socket, SIGNAL(connected()), this, SLOT(socketConnected())); connect(socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected())); @@ -88,4 +92,13 @@ void Server::socketStateChanged(QAbstractSocket::SocketState state) { qDebug() << "Socket state changed: " << state; } +void Server::handleServerMsg(Message *msg) { + + +} + +void Server::handleUserMsg(Message *msg) { + + +} diff --git a/network/server.h b/network/server.h index ce79fc88..fcea80bb 100644 --- a/network/server.h +++ b/network/server.h @@ -24,6 +24,8 @@ #include #include +#include "messages.h" + #define DEFAULT_PORT 6667 /** @@ -38,6 +40,7 @@ class Server : public QThread { public: Server(); ~Server(); + static void init(); void run(); @@ -66,6 +69,9 @@ class Server : public QThread { QTcpSocket *socket; QTextStream stream; + static void handleServerMsg(Message *); + static void handleUserMsg(Message *); + }; /* -- 2.20.1