X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.h;h=935df5e9cd0810dbb5a46ef58c785f4faaefa3a5;hp=e98f6bfcff1dfed6c376d89a56c38cac743d8015;hb=e8a39b4c3c92e193ab861a3fea84a261bb6fbd24;hpb=2c4e055125a3e3ab7a2bd0d9c0ea33415f6ce7cc diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index e98f6bfc..935df5e9 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 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,12 +18,16 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef SIGNALPROXY_H -#define SIGNALPROXY_H +#pragma once + +#include "common-export.h" #include #include +#include +#include + #include "protocol.h" struct QMetaObject; @@ -32,7 +36,7 @@ class QIODevice; class Peer; class SyncableObject; -class SignalProxy : public QObject +class COMMON_EXPORT SignalProxy : public QObject { Q_OBJECT @@ -50,7 +54,7 @@ public: SignalProxy(QObject *parent); SignalProxy(ProxyMode mode, QObject *parent); - virtual ~SignalProxy(); + ~SignalProxy() override; void setProxyMode(ProxyMode mode); inline ProxyMode proxyMode() const { return _proxyMode; } @@ -78,9 +82,12 @@ public: void dumpProxyStats(); void dumpSyncMap(SyncableObject *object); + static SignalProxy *current(); + + /**@{*/ /** * This method allows to send a signal only to a limited set of peers - * @param peerIds A list of peers that should receive it + * @param peers A list of peers that should receive it * @param closure Code you want to execute within of that restricted environment */ void restrictTargetPeers(QSet peers, std::function closure); @@ -91,15 +98,14 @@ public: } //A better version, but only implemented on Qt5 if Initializer Lists exist -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #ifdef Q_COMPILER_INITIALIZER_LISTS void restrictTargetPeers(std::initializer_list peers, std::function closure) { - restrictTargetPeers(QSet(peers), std::move(closure)); + restrictTargetPeers(QSet(peers), std::move(closure)); } #endif -#endif + /**}@*/ - inline int peerCount() const { return _peers.size(); } + inline int peerCount() const { return _peerMap.size(); } QVariantList peerData(); Peer *peerById(int peerId); @@ -107,7 +113,14 @@ public: /** * @return If handling a signal, the Peer from which the current signal originates */ - Peer *sourcePeer() { return _sourcePeer; } + Peer *sourcePeer(); + void setSourcePeer(Peer *sourcePeer); + + /** + * @return If sending a signal, the Peer to which the current signal is directed + */ + Peer *targetPeer(); + void setTargetPeer(Peer *targetPeer); public slots: void detachObject(QObject *obj); @@ -115,7 +128,7 @@ public slots: void detachSlots(QObject *receiver); protected: - void customEvent(QEvent *event); + void customEvent(QEvent *event) override; void sync_call__(const SyncableObject *obj, ProxyMode modeType, const char *funcname, va_list ap); void renameObject(const SyncableObject *obj, const QString &newname, const QString &oldname); @@ -164,8 +177,8 @@ private: template void handle(Peer *, T) { Q_ASSERT(0); } - bool invokeSlot(QObject *receiver, int methodId, const QVariantList ¶ms, QVariant &returnValue, Peer *peer = 0); - bool invokeSlot(QObject *receiver, int methodId, const QVariantList ¶ms = QVariantList(), Peer *peer = 0); + bool invokeSlot(QObject *receiver, int methodId, const QVariantList ¶ms, QVariant &returnValue, Peer *peer = nullptr); + bool invokeSlot(QObject *receiver, int methodId, const QVariantList ¶ms = QVariantList(), Peer *peer = nullptr); void requestInit(SyncableObject *obj); QVariantMap initData(SyncableObject *obj) const; @@ -173,7 +186,6 @@ private: static void disconnectDevice(QIODevice *dev, const QString &reason = QString()); - QSet _peers; QHash _peerMap; // containg a list of argtypes for fast access @@ -202,7 +214,8 @@ private: QSet _restrictedTargets; bool _restrictMessageTarget = false; - Peer *_sourcePeer; + Peer *_sourcePeer = nullptr; + Peer *_targetPeer = nullptr; friend class SignalRelay; friend class SyncableObject; @@ -267,5 +280,3 @@ private: QHash _methodIds; QHash _receiveMap; // if slot x is called then hand over the result to slot y }; - -#endif