X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Fsignalproxy.h;h=b0933968f6fbdd51cfa4f3be042c02c487ffe650;hb=1e7b6cda464041cac334b03a8b01679b4b9a56d3;hp=a8fe30dc674ed3f43764dc1d71256ad3ae7bb27d;hpb=64cf9f9b8a737dad5f29447805d4004cfd03c454;p=quassel.git diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index a8fe30dc..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 * @@ -27,6 +27,7 @@ #include "protocol.h" 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); @@ -127,8 +140,8 @@ private: template 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;