Big, big, major commit this time:
[quassel.git] / network / server.h
index fcea80b..5e61958 100644 (file)
 #define _SERVER_H_
 
 #include <QtCore>
+#include <QTimer>
 #include <QtNetwork>
 
-#include "messages.h"
+#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...
@@ -45,18 +48,21 @@ class Server : public QThread {
     void run();
 
     // 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(const QString &input /*, Buffer *source = 0 */);
+    void putRawLine(QString input);
+    void putCmd(QString cmd, QStringList params, QString prefix = 0);
 
   signals:
     //void outputLine(const QString & /*, Buffer *target = 0 */);
 
-    void recvLine(const QString&);
+    void recvRawServerMsg(QString);
+    void recvLine(QString); // temp, should send a message to the GUI
 
   private slots:
     void socketHasData();
@@ -65,40 +71,34 @@ class Server : public QThread {
     void socketDisconnected();
     void socketStateChanged(QAbstractSocket::SocketState);
 
-  private:
-    QTcpSocket *socket;
-    QTextStream stream;
+    /* Message Handlers */
+    /* handleXxxxFromServer(QString prefix, QStringList params); */
+    void handleNoticeFromServer(QString, QStringList);
+    void handlePingFromServer(QString, QStringList);
 
-    static void handleServerMsg(Message *);
-    static void handleUserMsg(Message *);
-
-};
+    void defaultHandlerForServer(QString cmd, QString prefix, QStringList params);
 
-/*
-class TcpConnection : public QThread {
-  Q_OBJECT
+  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); }
 
-  public:
-    void run();
-    QAbstractSocket::SocketState state() const;
+    class ParseError : public Exception {
+      public:
+        ParseError(QString cmd, QString prefix, QStringList params);
+    };
 
-  public slots:
-    void connectToHost(const QString &host, quint16 port = DEFAULT_PORT);
-    void disconnectFromHost();
-    void sendLine(const QString &);
+    class UnknownCmdError : public Exception {
+      public:
+        UnknownCmdError(QString cmd, QString prefix, QStringList params);
+    };
+};
 
-  signals:
-    void recvLine(QString);
-    void error(QAbstractSocket::SocketError);
-    void connected();
-    void disconnected();
-    void stateChanged(QAbstractSocket::SocketState);
+class Buffer {};
 
-  private:
-    QTcpSocket socket;
-    QTextStream stream;
-};
-*/
 
 #endif