#define _SERVER_H_
#include <QtCore>
+#include <QTimer>
#include <QtNetwork>
+#include "global.h"
+#include "buffer.h"
+#include "message.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,
+ * We have this running 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...
*/
Q_OBJECT
public:
- Server();
+ Server(QString network);
~Server();
- void run();
-
// serverState state();
+ bool isConnected() { return socket.state() == QAbstractSocket::ConnectedState; }
+ QString getNetwork() { return network; }
public slots:
// void setServerOptions();
- void connectToIrc(const QString &host, quint16 port = DEFAULT_PORT);
- void disconnectFromIrc();
+ void connectToIrc(QString net);
+ void disconnectFromIrc(QString net);
+ void userInput(QString net, QString buffer, QString msg);
+
+ void putRawLine(QString input);
+ void putCmd(QString cmd, QStringList params, QString prefix = 0);
- void putRawLine(const QString &input /*, Buffer *source = 0 */);
+ //void exitThread();
signals:
- //void outputLine(const QString & /*, Buffer *target = 0 */);
+ void recvRawServerMsg(QString);
+ void displayStatusMsg(QString);
+ void displayMsg(QString buffer, Message msg);
+ void disconnected();
+
+ void nickAdded(QString network, QString nick, VarMap props);
+ void nickRemoved(QString network, QString nick);
+ void nickUpdated(QString network, QString nick, VarMap props);
+ void modeSet(QString network, QString target, QString mode);
+ void topicSet(QString network, QString buffer, QString topic);
+ void setNicks(QString network, QString buffer, QStringList nicks);
+ void ownNickSet(QString network, QString newNick);
- void recvLine(const QString&);
private slots:
+ void run();
void socketHasData();
void socketError(QAbstractSocket::SocketError);
void socketConnected();
void socketDisconnected();
void socketStateChanged(QAbstractSocket::SocketState);
- private:
- QTcpSocket *socket;
- QTextStream stream;
+ /* Message Handlers */
-};
-
-/*
-class TcpConnection : public QThread {
- Q_OBJECT
+ /* handleUser(QString, Buffer *) */
+ void handleUserJoin(QString, Buffer *);
+ void handleUserQuote(QString, Buffer *);
+ void handleUserSay(QString, Buffer *);
- public:
- void run();
- QAbstractSocket::SocketState state() const;
+ /* handleServer(QString, QStringList); */
+ void handleServerJoin(QString, QStringList);
+ void handleServerNotice(QString, QStringList);
+ void handleServerPing(QString, QStringList);
+ void handleServerPrivmsg(QString, QStringList);
- public slots:
- void connectToHost(const QString &host, quint16 port = DEFAULT_PORT);
- void disconnectFromHost();
- void sendLine(const QString &);
+ void handleServer001(QString, QStringList); // RPL_WELCOME
+ void handleServer331(QString, QStringList); // RPL_NOTOPIC
+ void handleServer332(QString, QStringList); // RPL_TOPIC
+ void handleServer333(QString, QStringList); // Topic set by...
+ void handleServer353(QString, QStringList); // RPL_NAMREPLY
- signals:
- void recvLine(QString);
- void error(QAbstractSocket::SocketError);
- void connected();
- void disconnected();
- void stateChanged(QAbstractSocket::SocketState);
+ void defaultServerHandler(QString cmd, QString prefix, QStringList params);
+ void defaultUserHandler(QString cmd, QString msg, Buffer *buf);
private:
+ QString network;
QTcpSocket socket;
- QTextStream stream;
+ QHash<QString, Buffer*> buffers;
+
+ QString currentNick;
+ QString currentServer;
+ VarMap networkSettings;
+ VarMap identity;
+ VarMap nicks; // stores all known nicks for the server
+
+ void handleServerMsg(QString rawMsg);
+ void handleUserMsg(QString buffer, QString usrMsg);
+
+ QString nickFromMask(QString mask);
+ QString userFromMask(QString mask);
+ QString hostFromMask(QString mask);
+
+ class ParseError : public Exception {
+ public:
+ ParseError(QString cmd, QString prefix, QStringList params);
+ };
+
+ class UnknownCmdError : public Exception {
+ public:
+ UnknownCmdError(QString cmd, QString prefix, QStringList params);
+ };
};
-*/
#endif