X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsessionthread.cpp;h=7b8bc105655bb9978345c8c22564dbbe816d51bf;hp=a56c42b29ccb9ef06b6e0c3ada4cbc4ec159ec57;hb=c27d5bfbe80bfeb583a25404f4ccee4b70b010e0;hpb=5b686746c880e5cda6d5de3e08180ea4332ff222 diff --git a/src/core/sessionthread.cpp b/src/core/sessionthread.cpp index a56c42b2..7b8bc105 100644 --- a/src/core/sessionthread.cpp +++ b/src/core/sessionthread.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2012 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,19 +18,20 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include - +#include "core.h" +#include "coresession.h" +#include "internalpeer.h" +#include "remotepeer.h" #include "sessionthread.h" #include "signalproxy.h" -#include "coresession.h" -#include "core.h" -SessionThread::SessionThread(UserId uid, bool restoreState, QObject *parent) +SessionThread::SessionThread(UserId uid, bool restoreState, bool strictIdentEnabled, QObject *parent) : QThread(parent), _session(0), _user(uid), _sessionInitialized(false), - _restoreState(restoreState) + _restoreState(restoreState), + _strictIdentEnabled(strictIdentEnabled) { connect(this, SIGNAL(initialized()), this, SLOT(setSessionInitialized())); } @@ -72,6 +73,7 @@ void SessionThread::setSessionInitialized() } +// this and the following related methods are executed in the Core thread! void SessionThread::addClient(QObject *peer) { if (isSessionInitialized()) { @@ -85,42 +87,44 @@ void SessionThread::addClient(QObject *peer) void SessionThread::addClientToSession(QObject *peer) { - QIODevice *socket = qobject_cast(peer); - if (socket) { - addRemoteClientToSession(socket); + RemotePeer *remote = qobject_cast(peer); + if (remote) { + addRemoteClientToSession(remote); return; } - SignalProxy *proxy = qobject_cast(peer); - if (proxy) { - addInternalClientToSession(proxy); + InternalPeer *internal = qobject_cast(peer); + if (internal) { + addInternalClientToSession(internal); return; } - qWarning() << "SessionThread::addClient() received neither QIODevice nor SignalProxy as peer!" << peer; + qWarning() << "SessionThread::addClient() received invalid peer!" << peer; } -void SessionThread::addRemoteClientToSession(QIODevice *socket) +void SessionThread::addRemoteClientToSession(RemotePeer *remotePeer) { - socket->setParent(0); - socket->moveToThread(session()->thread()); - emit addRemoteClient(socket); + remotePeer->setParent(0); + remotePeer->moveToThread(session()->thread()); + emit addRemoteClient(remotePeer); } -void SessionThread::addInternalClientToSession(SignalProxy *proxy) +void SessionThread::addInternalClientToSession(InternalPeer *internalPeer) { - emit addInternalClient(proxy); + internalPeer->setParent(0); + internalPeer->moveToThread(session()->thread()); + emit addInternalClient(internalPeer); } void SessionThread::run() { - _session = new CoreSession(user(), _restoreState); - connect(this, SIGNAL(addRemoteClient(QIODevice *)), _session, SLOT(addClient(QIODevice *))); - connect(this, SIGNAL(addInternalClient(SignalProxy *)), _session, SLOT(addClient(SignalProxy *))); - connect(_session, SIGNAL(sessionState(const QVariant &)), Core::instance(), SIGNAL(sessionState(const QVariant &))); + _session = new CoreSession(user(), _restoreState, _strictIdentEnabled); + connect(this, SIGNAL(addRemoteClient(RemotePeer*)), _session, SLOT(addClient(RemotePeer*))); + connect(this, SIGNAL(addInternalClient(InternalPeer*)), _session, SLOT(addClient(InternalPeer*))); + connect(_session, SIGNAL(sessionState(Protocol::SessionState)), Core::instance(), SIGNAL(sessionState(Protocol::SessionState))); emit initialized(); exec(); delete _session;