X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.h;h=b0933968f6fbdd51cfa4f3be042c02c487ffe650;hp=a40a1b6b3892ed22e02069b3bc69810c2b4994ba;hb=1e7b6cda464041cac334b03a8b01679b4b9a56d3;hpb=5b69d94edcbc2f985243b1f19744f7b03f6e283b diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index a40a1b6b..b0933968 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -26,7 +26,8 @@ #include "protocol.h" -class QMetaObject; +struct QMetaObject; +class QIODevice; class Peer; class SyncableObject; @@ -76,7 +77,13 @@ public: bool isSecure() const { return _secure; } void dumpProxyStats(); void dumpSyncMap(SyncableObject *object); + + void restrictTargetPeers(std::initializer_list peerIds, std::function closure); + inline int peerCount() const { return _peers.size(); } + QVariantList peerData(); + + Peer *peerById(int peerId); public slots: void detachObject(QObject *obj); @@ -116,8 +123,14 @@ private: void removePeer(Peer *peer); void removeAllPeers(); + int nextPeerId() { + return _lastPeerId++; + } + template void dispatch(const T &protoMessage); + template + void dispatch(Peer *peer, const T &protoMessage); void handle(Peer *peer, const Protocol::SyncMessage &syncMessage); void handle(Peer *peer, const Protocol::RpcCall &rpcCall); @@ -125,10 +138,10 @@ private: void handle(Peer *peer, const Protocol::InitData &initData); template - void handle(Peer *peer, T) { Q_ASSERT(0); } + void handle(Peer *, T) { Q_ASSERT(0); } - bool invokeSlot(QObject *receiver, int methodId, const QVariantList ¶ms, QVariant &returnValue); - bool invokeSlot(QObject *receiver, int methodId, const QVariantList ¶ms = QVariantList()); + 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); void requestInit(SyncableObject *obj); QVariantMap initData(SyncableObject *obj) const; @@ -137,6 +150,7 @@ private: static void disconnectDevice(QIODevice *dev, const QString &reason = QString()); QSet _peers; + QHash _peerMap; // containg a list of argtypes for fast access QHash _extendedMetaObjects; @@ -159,6 +173,11 @@ private: bool _secure; // determines if all connections are in a secured state (using ssl or internal connections) + int _lastPeerId = 0; + + QSet _restrictedTargets; + bool _restrictMessageTarget = false; + friend class SignalRelay; friend class SyncableObject; friend class Peer;