}
SignalProxy::~SignalProxy() {
+ //qDebug() << "peers:" << peers.count();
foreach(Connection conn, peers) {
conn.peer->deleteLater(); conn.device->deleteLater();
}
}
void SignalProxy::attachSignal(QObject* sender, const char* signal, const QByteArray& rpcFunction) {
+ disconnect(sender, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *)));
+ connect(sender, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *)));
+
foreach(Connection conn, peers) {
conn.peer->attachSignal(sender, signal, rpcFunction);
}
attachedSignals.append(SignalDesc(sender, signal, rpcFunction));
-
}
void SignalProxy::attachSlot(const QByteArray& rpcFunction, QObject* recv, const char* slot) {
+ disconnect(recv, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *)));
+ connect(recv, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *)));
+
foreach(Connection conn, peers) {
conn.peer->attachSlot(rpcFunction, recv, slot);
}
void attachSignal(QObject* sender, const char* signal, const QByteArray& rpcFunction = QByteArray());
void attachSlot(const QByteArray& rpcFunction, QObject* recv, const char* slot);
- void detachObject(QObject* obj);
-
public slots:
void addPeer(QIODevice *device);
void sendSignal(const char *signal, QVariant p1 = QVariant(), QVariant p2 = QVariant(), QVariant p3 = QVariant(), QVariant p4 = QVariant(),
QVariant p5 = QVariant(), QVariant p6 = QVariant(), QVariant p7 = QVariant(), QVariant p8 = QVariant(), QVariant p9 = QVariant());
+ void detachObject(QObject* obj);
+
//void detachSender();
signals: