X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=network%2Fserver.h;h=b0077c19072d3c4499bfcf1de64cd9079784d99d;hp=cc46899a65fdba2a1402407777609a42f58cc6bd;hb=e368a1672c4f917bfa6adb52dae3b5ebfcd0db18;hpb=46ec32173bb8e4fac0b6a161f9cce875875159a5 diff --git a/network/server.h b/network/server.h index cc46899a..b0077c19 100644 --- a/network/server.h +++ b/network/server.h @@ -22,22 +22,81 @@ #define _SERVER_H_ #include +#include #include -class Server { +#include "quassel.h" + +#define DEFAULT_PORT 6667 + + +/** + * This is a server object, managing a single connection to an IRC server, handling the associated channels and so on. + * We have this run in its own thread mainly to not block other server objects or the core if something goes wrong, + * e.g. if some scripts starts running wild... + */ + +class Server : public QThread { Q_OBJECT + public: + Server(); + ~Server(); + static void init(); + void run(); - private: + // serverState state(); -}; + public slots: + // void setServerOptions(); + void connectToIrc(const QString &host, quint16 port = DEFAULT_PORT); + void disconnectFromIrc(); + + void putRawLine(QString input); + void putCmd(QString cmd, QStringList params, QString prefix = 0); -class Connection : public QThread { + signals: + //void outputLine(const QString & /*, Buffer *target = 0 */); + void recvRawServerMsg(QString); + void recvLine(QString); // temp, should send a message to the GUI + private slots: + void socketHasData(); + void socketError(QAbstractSocket::SocketError); + void socketConnected(); + void socketDisconnected(); + void socketStateChanged(QAbstractSocket::SocketState); + /* Message Handlers */ + /* handleXxxxFromServer(QString prefix, QStringList params); */ + void handleNoticeFromServer(QString, QStringList); + void handlePingFromServer(QString, QStringList); + + void defaultHandlerForServer(QString cmd, QString prefix, QStringList params); + + private: + QTcpSocket socket; + QTextStream stream; + + void handleServerMsg(QString rawMsg); + void handleUserMsg(QString usrMsg); + //static inline void dispatchServerMsg(Message *msg) { msg->getServer()->handleServerMsg(msg); } + //static inline void dispatchUserMsg(Message *msg) { msg->getServer()->handleUserMsg(msg); } + + class ParseError : public Exception { + public: + ParseError(QString cmd, QString prefix, QStringList params); + }; + + class UnknownCmdError : public Exception { + public: + UnknownCmdError(QString cmd, QString prefix, QStringList params); + }; }; +class Buffer {}; + #endif