X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=network%2Fserver.cpp;h=d9e0a5b958e7b0c3b54c6591a8e617dc25d78501;hp=4d00c2c1b73df7105e28f79c5e0ca32ae10fe6f8;hb=1c7d9f13b744cd517c0769f453fd8dc3106cd94c;hpb=855fa19ba139d5dbdbf26bb660251ff8fe620e12 diff --git a/network/server.cpp b/network/server.cpp index 4d00c2c1..d9e0a5b9 100644 --- a/network/server.cpp +++ b/network/server.cpp @@ -21,6 +21,7 @@ #include "global.h" #include "server.h" #include "cmdcodes.h" +#include "message.h" #include @@ -60,7 +61,7 @@ void Server::disconnectFromIrc(QString net) { void Server::socketHasData() { while(socket.canReadLine()) { QString s = socket.readLine().trimmed(); - //qDebug() << "Read: " << s; + qDebug() << "Read: " << s; emit recvRawServerMsg(s); //Message *msg = Message::createFromServerString(this, s); handleServerMsg(s); @@ -68,7 +69,7 @@ void Server::socketHasData() { } void Server::socketError( QAbstractSocket::SocketError err ) { - qDebug() << "Socket Error!"; + //qDebug() << "Socket Error!"; //emit error(err); } @@ -79,16 +80,22 @@ void Server::socketConnected( ) { } void Server::socketDisconnected( ) { - qDebug() << "Socket disconnected!"; - //emit disconnected(); + //qDebug() << "Socket disconnected!"; + emit disconnected(); } void Server::socketStateChanged(QAbstractSocket::SocketState state) { - qDebug() << "Socket state changed: " << state; + //qDebug() << "Socket state changed: " << state; } void Server::userInput(QString net, QString buf, QString msg) { - putRawLine(msg); + if(net != network) return; // not me! + msg = msg.trimmed(); // remove whitespace from start and end + if(msg.isEmpty()) return; + if(!msg.startsWith('/')) { + msg = QString("/SAY ") + msg; + } + handleUserMsg(buf, msg); } void Server::putRawLine(QString s) { @@ -139,39 +146,144 @@ void Server::handleServerMsg(QString msg) { // Now we try to find a handler for this message. BTW, I do love the Trolltech guys ;-) QString hname = cmd.toLower(); hname[0] = hname[0].toUpper(); - hname = "handle" + hname + "FromServer"; + hname = "handleServer" + hname; if(!QMetaObject::invokeMethod(this, hname.toAscii(), Q_ARG(QString, prefix), Q_ARG(QStringList, params))) { // Ok. Default handler it is. - defaultHandlerForServer(cmd, prefix, params); + defaultServerHandler(cmd, prefix, params); } } catch(Exception e) { - emit sendStatusMsg(e.msg()); + emit sendMessage("", Message(e.msg(), "", Message::Error)); } } -void Server::defaultHandlerForServer(QString cmd, QString prefix, QStringList params) { +void Server::defaultServerHandler(QString cmd, QString prefix, QStringList params) { uint num = cmd.toUInt(); if(num) { - emit sendMessage("", cmd + " " + params.join(" ")); + if(params.count() > 0) { + if(params[0] == currentNick) params.removeFirst(); // remove nick if it is first arg + else qWarning((QString("First param NOT nick: %1:%2 %3").arg(prefix).arg(cmd).arg(params.join(" "))).toAscii()); + } + // A lot of server messages don't really need their own handler because they don't do much. + // Catch and handle these here. + switch(num) { + // Welcome, status, info messages. Just display these. + case 2: case 3: case 4: case 5: case 251: case 252: case 253: case 254: case 255: case 372: case 375: + emit sendMessage("", Message(params.join(" "), prefix, Message::Server)); + break; + // Ignore these commands. + case 376: + break; + + // Everything else will be marked in red, so we can add them somewhere. + default: + emit sendMessage("", Message(cmd + " " + params.join(" "), prefix, Message::Error)); + } + //qDebug() << prefix <<":"<name() << msg; + putCmd("PRIVMSG", params); } -void Server::handleNoticeFromServer(QString prefix, QStringList params) { - sendMessage("", params.join(" ")); +/**********************************************************************************/ +void Server::handleServerJoin(QString prefix, QStringList params) { + Q_ASSERT(params.count() == 1); + QString bufname = params[0]; + if(!buffers.contains(bufname)) { + Buffer *buf = new Buffer(bufname); + buffers[bufname] = buf; + } + // handle user joins! +} +void Server::handleServerNotice(QString prefix, QStringList params) { + Message msg(params[1], prefix, Message::Notice); + if(prefix == currentServer) emit sendMessage("", Message(params[1], prefix, Message::Server)); + else emit sendMessage("", Message(params[1], prefix, Message::Notice)); } -void Server::handlePingFromServer(QString prefix, QStringList params) { +void Server::handleServerPing(QString prefix, QStringList params) { putCmd("PONG", params); } +void Server::handleServerPrivmsg(QString prefix, QStringList params) { + emit sendMessage(params[0], Message(params[1], prefix, Message::Msg)); + +} + +/* RPL_WELCOME */ +void Server::handleServer001(QString prefix, QStringList params) { + currentServer = prefix; + currentNick = params[0]; + emit sendMessage("", Message(params[1], prefix, Message::Server)); +} + +/* RPL_NOTOPIC */ +void Server::handleServer331(QString prefix, QStringList params) { + if(params[0] == currentNick) params.removeFirst(); + emit setTopic(network, params[0], ""); +} + +/* RPL_TOPIC */ +void Server::handleServer332(QString prefix, QStringList params) { + if(params[0] == currentNick) params.removeFirst(); + emit setTopic(network, params[0], params[1]); +} + +/***********************************************************************************/ + /* Exception classes for message handling */ Server::ParseError::ParseError(QString cmd, QString prefix, QStringList params) { _msg = QString("Command Parse Error: ") + cmd + params.join(" ");