X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fserver.h;h=1b92f16dde6f2374d0a0ed34ddf2eb2665295989;hp=bcc7ffdbfb317af2d1e1632ba1673dc2b85c647c;hb=902c95728306e5ba115de84800fc8d5d239c9d62;hpb=cfbd7e0ec3624307cfb612fe4804d58c34b7eec9 diff --git a/src/core/server.h b/src/core/server.h index bcc7ffdb..1b92f16d 100644 --- a/src/core/server.h +++ b/src/core/server.h @@ -29,10 +29,14 @@ #include #include "message.h" -#include "serverinfo.h" +#include "signalproxy.h" -#define DEFAULT_PORT 6667 +class NetworkInfo; +class IrcServerHandler; +class UserInputHandler; +class CtcpHandler; +class CoreSession; /*! * This is a server object, managing a single connection to an IRC server, handling the associated channels and so on. @@ -43,152 +47,83 @@ class Server : public QThread { Q_OBJECT - public: - Server(UserId uid, QString network); - ~Server(); - - UserId userId() const { return user; } - // serverState state(); - bool isConnected() const { return socket.state() == QAbstractSocket::ConnectedState; } - QString getNetwork() { return network; } - QStringList providesUserHandlers(); - - enum CtcpType {CtcpQuery, CtcpReply}; - - public slots: - // void setServerOptions(); - void sendState(); - 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 exitThread(); - - signals: - void serverState(QString net, VarMap data); - void recvRawServerMsg(QString); - void displayStatusMsg(QString); - //void displayMsg(Message msg); - void displayMsg(Message::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); - void connected(QString network); - void disconnected(QString network); - - void nickAdded(QString network, QString nick, VarMap props); - void nickRenamed(QString network, QString oldnick, QString newnick); - 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 ownNickSet(QString network, QString newNick); - void queryRequested(QString network, QString nick); - - - private slots: - void run(); - void socketHasData(); - void socketError(QAbstractSocket::SocketError); - void socketConnected(); - void socketDisconnected(); - void socketStateChanged(QAbstractSocket::SocketState); - - /* Message Handlers */ - - /* void handleUser(QString, QString); */ - void handleUserAway(QString, QString); - void handleUserDeop(QString, QString); - void handleUserDevoice(QString, QString); - void handleUserInvite(QString, QString); - void handleUserJoin(QString, QString); - void handleUserKick(QString, QString); - void handleUserList(QString, QString); - void handleUserMode(QString, QString); - void handleUserMsg(QString, QString); - void handleUserNick(QString, QString); - void handleUserOp(QString, QString); - void handleUserPart(QString, QString); - void handleUserQuery(QString, QString); - void handleUserQuit(QString, QString); - void handleUserQuote(QString, QString); - void handleUserSay(QString, QString); - void handleUserTopic(QString, QString); - void handleUserVoice(QString, QString); - void handleUserMe(QString, QString); - - /* void handleServer(QString, QStringList); */ - void handleServerJoin(QString, QStringList); - void handleServerKick(QString, QStringList); - void handleServerMode(QString, QStringList); - void handleServerNick(QString, QStringList); - void handleServerNotice(QString, QStringList); - void handleServerPart(QString, QStringList); - void handleServerPing(QString, QStringList); - void handleServerPrivmsg(QString, QStringList); - void handleServerQuit(QString, QStringList); - void handleServerTopic(QString, QStringList); - - void handleServer001(QString, QStringList); // RPL_WELCOME - void handleServer005(QString, QStringList); // RPL_ISUPPORT - 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 - void handleServer432(QString, QStringList); // ERR_ERRONEUSNICKNAME - void handleServer433(QString, QStringList); // ERR_NICKNAMEINUSE - - void handleCtcpAction(CtcpType, QString, QString, QString); - void handleCtcpPing(CtcpType, QString, QString, QString); - void handleCtcpVersion(CtcpType, QString, QString, QString); - - void defaultServerHandler(QString cmd, QString prefix, QStringList params); - void defaultUserHandler(QString buf, QString cmd, QString msg); - void defaultCtcpHandler(CtcpType ctcptype, QString prefix, QString cmd, QString target, QString param); - - private: - UserId user; - QString network; - QTcpSocket socket; - //QHash buffers; - - QString ownNick; - QString currentServer; - VarMap networkSettings; - VarMap identity; - QHash nicks; // stores all known nicks for the server - QHash topics; // stores topics for each buffer - VarMap serverSupports; // stores results from RPL_ISUPPORT - - void handleServerMsg(QByteArray rawMsg); - void handleUserInput(QString buffer, QString usrMsg); - - // CTCP Stuff - QString XDELIM; - QHash ctcpMDequoteHash; - QHash ctcpXDelimDequoteHash; - QString ctcpDequote(QString); - QString ctcpXdelimDequote(QString); - QStringList parseCtcp(CtcpType, QString, QString, QString); - - QString ctcpPack(QString ctcpTag, QString message); - void ctcpQuery(QString bufname, QString ctcpTag, QString message); - void ctcpReply(QString bufname, QString ctcpTag, QString message); - - QString updateNickFromMask(QString mask); +public: + Server(UserId uid, uint networkId, QString network); + ~Server(); + + UserId userId() const { return _userId; } + + // serverState state(); + bool isConnected() const { return socket.state() == QAbstractSocket::ConnectedState; } + + uint networkId() const; + QString networkName(); // hasbeen getNetwork() + + NetworkInfo *networkInfo() { return _networkInfo; } + IrcServerHandler *ircServerHandler() {return _ircServerHandler; } + UserInputHandler *userInputHandler() {return _userInputHandler; } + CtcpHandler *ctcpHandler() {return _ctcpHandler; } + +public slots: + // void setServerOptions(); + void connectToIrc(QString net); + void disconnectFromIrc(QString net); + void userInput(uint netid, QString buffer, QString msg); + + void putRawLine(QString input); + void putCmd(QString cmd, QStringList params, QString prefix = 0); + + //void exitThread(); + +signals: + void serverState(QString net, QVariantMap data); + void recvRawServerMsg(QString); + void displayStatusMsg(QString); + //void displayMsg(Message msg); + void displayMsg(Message::Type, QString target, QString text, QString sender = "", quint8 flags = Message::None); + void connected(uint networkId); + void disconnected(uint networkId); + + void synchronizeClients(); + + void queryRequested(QString network, QString nick); - class ParseError : public Exception { - public: - ParseError(QString cmd, QString prefix, QStringList params); - }; - class UnknownCmdError : public Exception { - public: - UnknownCmdError(QString cmd, QString prefix, QStringList params); - }; +private slots: + void run(); + void socketHasData(); + void socketError(QAbstractSocket::SocketError); + void socketConnected(); + void socketDisconnected(); + void socketStateChanged(QAbstractSocket::SocketState); + +private: + UserId _userId; + uint _networkId; + + QTcpSocket socket; + + IrcServerHandler *_ircServerHandler; + UserInputHandler *_userInputHandler; + CtcpHandler *_ctcpHandler; + + NetworkInfo *_networkInfo; + + QVariantMap networkSettings; + QVariantMap identity; + + CoreSession *coreSession() const; + + class ParseError : public Exception { + public: + ParseError(QString cmd, QString prefix, QStringList params); + }; + + class UnknownCmdError : public Exception { + public: + UnknownCmdError(QString cmd, QString prefix, QStringList params); + }; - // stuff needed for new separation of server information - ServerInfo *serverinfo; }; #endif