X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoresession.cpp;h=ace622fcae5b77df2864068a8f86520d2d794b9c;hp=6abf631f3970b2a118e29f13202aa62b73a212ce;hb=a4bcc707aed42a8be43848068d82cb0ef2b43d0e;hpb=5b686746c880e5cda6d5de3e08180ea4332ff222 diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 6abf631f..ace622fc 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2012 by the Quassel Project * + * Copyright (C) 2005-2014 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -34,18 +34,21 @@ #include "corenetwork.h" #include "corenetworkconfig.h" #include "coresessioneventprocessor.h" +#include "coretransfermanager.h" #include "coreusersettings.h" #include "ctcpparser.h" #include "eventstringifier.h" +#include "internalpeer.h" #include "ircchannel.h" #include "ircparser.h" #include "ircuser.h" #include "logger.h" #include "messageevent.h" -#include "signalproxy.h" +#include "remotepeer.h" #include "storage.h" #include "util.h" + class ProcessMessagesEvent : public QEvent { public: @@ -56,7 +59,7 @@ public: CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) : QObject(parent), _user(uid), - _signalProxy(new SignalProxy(SignalProxy::Server, 0, this)), + _signalProxy(new SignalProxy(SignalProxy::Server, this)), _aliasManager(this), _bufferSyncer(new CoreBufferSyncer(this)), _backlogManager(new CoreBacklogManager(this)), @@ -64,6 +67,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) _ircListHelper(new CoreIrcListHelper(this)), _networkConfig(new CoreNetworkConfig("GlobalNetworkConfig", this)), _coreInfo(this), + _transferManager(new CoreTransferManager(this)), _eventManager(new CoreEventManager(this)), _eventStringifier(new EventStringifier(this)), _sessionEventProcessor(new CoreSessionEventProcessor(this)), @@ -77,10 +81,10 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) p->setHeartBeatInterval(30); p->setMaxHeartBeatCount(60); // 30 mins until we throw a dead socket out - connect(p, SIGNAL(peerRemoved(QIODevice *)), this, SLOT(removeClient(QIODevice *))); + connect(p, SIGNAL(peerRemoved(Peer*)), SLOT(removeClient(Peer*))); - connect(p, SIGNAL(connected()), this, SLOT(clientsConnected())); - connect(p, SIGNAL(disconnected()), this, SLOT(clientsDisconnected())); + connect(p, SIGNAL(connected()), SLOT(clientsConnected())); + connect(p, SIGNAL(disconnected()), SLOT(clientsDisconnected())); p->attachSlot(SIGNAL(sendInput(BufferInfo, QString)), this, SLOT(msgFromClient(BufferInfo, QString))); p->attachSignal(this, SIGNAL(displayMsg(Message))); @@ -118,6 +122,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) p->synchronize(networkConfig()); p->synchronize(&_coreInfo); p->synchronize(&_ignoreListManager); + p->synchronize(transferManager()); // Restore session state if (restoreState) restoreSessionState(); @@ -204,36 +209,25 @@ void CoreSession::restoreSessionState() } -void CoreSession::addClient(QIODevice *device) +void CoreSession::addClient(RemotePeer *peer) { - if (!device) { - qCritical() << "Invoking CoreSession::addClient with a QObject that is not a QIODevice!"; - } - else { - // if the socket is an orphan, the signalProxy adopts it. - // -> we don't need to care about it anymore - device->setParent(0); - signalProxy()->addPeer(device); - QVariantMap reply; - reply["MsgType"] = "SessionInit"; - reply["SessionState"] = sessionState(); - SignalProxy::writeDataToDevice(device, reply); - } + peer->dispatch(sessionState()); + signalProxy()->addPeer(peer); } -void CoreSession::addClient(SignalProxy *proxy) +void CoreSession::addClient(InternalPeer *peer) { - signalProxy()->addPeer(proxy); + signalProxy()->addPeer(peer); emit sessionState(sessionState()); } -void CoreSession::removeClient(QIODevice *iodev) +void CoreSession::removeClient(Peer *peer) { - QTcpSocket *socket = qobject_cast(iodev); - if (socket) - quInfo() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("disconnected (UserId: %1).").arg(user().toInt())); + RemotePeer *p = qobject_cast(peer); + if (p) + quInfo() << qPrintable(tr("Client")) << p->description() << qPrintable(tr("disconnected (UserId: %1).").arg(user().toInt())); } @@ -327,8 +321,8 @@ void CoreSession::processMessages() bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, BufferInfo::StatusBuffer, ""); } Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, rawMsg.flags); - Core::storeMessage(msg); - emit displayMsg(msg); + if(Core::storeMessage(msg)) + emit displayMsg(msg); } else { QHash > bufferInfoCache; @@ -356,7 +350,7 @@ void CoreSession::processMessages() // recheck if there exists a buffer to store a redirected message in for (int i = 0; i < redirectedMessages.count(); i++) { - const RawMessage &rawMsg = _messageQueue.at(i); + const RawMessage &rawMsg = redirectedMessages.at(i); if (bufferInfoCache.contains(rawMsg.networkId) && bufferInfoCache[rawMsg.networkId].contains(rawMsg.target)) { bufferInfo = bufferInfoCache[rawMsg.networkId][rawMsg.target]; } @@ -370,10 +364,11 @@ void CoreSession::processMessages() messages << msg; } - Core::storeMessages(messages); - // FIXME: extend protocol to a displayMessages(MessageList) - for (int i = 0; i < messages.count(); i++) { - emit displayMsg(messages[i]); + if(Core::storeMessages(messages)) { + // FIXME: extend protocol to a displayMessages(MessageList) + for (int i = 0; i < messages.count(); i++) { + emit displayMsg(messages[i]); + } } } _processMessages = false; @@ -381,34 +376,20 @@ void CoreSession::processMessages() } -QVariant CoreSession::sessionState() +Protocol::SessionState CoreSession::sessionState() const { - QVariantMap v; - - v["CoreFeatures"] = (int)Quassel::features(); - - QVariantList bufs; - foreach(BufferInfo id, buffers()) bufs << qVariantFromValue(id); - v["BufferInfos"] = bufs; - QVariantList networkids; - foreach(NetworkId id, _networks.keys()) networkids << qVariantFromValue(id); - v["NetworkIds"] = networkids; - - quint32 ircusercount = 0; - quint32 ircchannelcount = 0; - foreach(Network *net, _networks.values()) { - ircusercount += net->ircUserCount(); - ircchannelcount += net->ircChannelCount(); - } - v["IrcUserCount"] = ircusercount; - v["IrcChannelCount"] = ircchannelcount; + QVariantList bufferInfos; + QVariantList networkIds; + QVariantList identities; - QList idlist; - foreach(Identity *i, _identities.values()) idlist << qVariantFromValue(*i); - v["Identities"] = idlist; + foreach(const BufferInfo &id, buffers()) + bufferInfos << QVariant::fromValue(id); + foreach(const NetworkId &id, _networks.keys()) + networkIds << QVariant::fromValue(id); + foreach(const Identity *i, _identities.values()) + identities << QVariant::fromValue(*i); - //v["Payload"] = QByteArray(100000000, 'a'); // for testing purposes - return v; + return Protocol::SessionState(identities, bufferInfos, networkIds); }