#define _SERVER_H_
#include <QtCore>
+#include <QTimer>
#include <QtNetwork>
-class Server {
+#include "quassel.h"
+
+#define DEFAULT_PORT 6667
+
+/*! \file */
+
+/*! \class Server
+ * 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();
+ bool isConnected() { return socket.state() == QAbstractSocket::ConnectedState; }
-};
+ 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