X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=bcc639fad7979d53c017b0854e20234d179efc8e;hb=53861faa5551606eea31588b65ba501b24fb2e1a;hp=db4a675835e733d4a616d14f6404c9ed2a391b1d;hpb=28cee4568aeb1ce3014d11234e40f19e7aeae5bd;p=quassel.git diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index db4a6758..bcc639fa 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -221,6 +221,8 @@ void SignalProxy::setProxyMode(ProxyMode mode) initClient(); } +thread_local SignalProxy *SignalProxy::_current; + void SignalProxy::init() { @@ -230,6 +232,7 @@ void SignalProxy::init() setHeartBeatInterval(30); setMaxHeartBeatCount(2); _secure = false; + _current = this; updateSecureState(); } @@ -514,21 +517,28 @@ template void SignalProxy::dispatch(const T &protoMessage) { for (auto peer : _peerMap.values()) { + _targetPeer = peer; + if (peer->isOpen()) peer->dispatch(protoMessage); else QCoreApplication::postEvent(this, new ::RemovePeerEvent(peer)); } + _targetPeer = nullptr; } template void SignalProxy::dispatch(Peer *peer, const T &protoMessage) { + _targetPeer = peer; + if (peer && peer->isOpen()) peer->dispatch(protoMessage); else QCoreApplication::postEvent(this, new ::RemovePeerEvent(peer)); + + _targetPeer = nullptr; } @@ -571,7 +581,9 @@ void SignalProxy::handle(Peer *peer, const SyncMessage &syncMessage) if (eMeta->argTypes(receiverId).count() > 1) returnParams << syncMessage.params; returnParams << returnValue; + _targetPeer = peer; peer->dispatch(SyncMessage(syncMessage.className, syncMessage.objectName, eMeta->methodName(receiverId), returnParams)); + _targetPeer = nullptr; } // send emit update signal @@ -594,7 +606,9 @@ void SignalProxy::handle(Peer *peer, const InitRequest &initRequest) } SyncableObject *obj = _syncSlave[initRequest.className][initRequest.objectName]; + _targetPeer = peer; peer->dispatch(InitData(initRequest.className, initRequest.objectName, initData(obj))); + _targetPeer = nullptr; } @@ -851,6 +865,22 @@ void SignalProxy::restrictTargetPeers(QSet peers, std::function c _restrictedTargets = previousRestrictedTargets; } +Peer *SignalProxy::sourcePeer() { + return _sourcePeer; +} + +void SignalProxy::setSourcePeer(Peer *sourcePeer) { + _sourcePeer = sourcePeer; +} + +Peer *SignalProxy::targetPeer() { + return _targetPeer; +} + +void SignalProxy::setTargetPeer(Peer *targetPeer) { + _targetPeer = targetPeer; +} + // ================================================== // ExtendedMetaObject // ==================================================