Improving heart beat system.
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 1 Feb 2009 13:00:02 +0000 (14:00 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 1 Feb 2009 13:00:09 +0000 (14:00 +0100)
The SignalProxy uses the heart beats only as a last resort to check if
a peer is still alive. As long as data is received the signalproxy
will be happy. Fixes #311

src/common/signalproxy.cpp

index d9943b2..256fbbc 100644 (file)
@@ -195,8 +195,8 @@ void SignalProxy::SignalRelay::attachSignal(QObject *sender, int signalId, const
   if(!funcName.isEmpty()) {
     fn = QMetaObject::normalizedSignature(funcName);
   } else {
-    fn = SIGNAL();
-    fn += sender->metaObject()->method(signalId).signature();
+    fn = SIGNAL(fakeMethodSignature());
+    fn = fn.replace("fakeMethodSignature()", sender->metaObject()->method(signalId).signature());
   }
 
   _slots[slotId] = Signal(sender, signalId, fn);
@@ -660,6 +660,17 @@ void SignalProxy::receivePackedFunc(AbstractPeer *sender, const QVariant &packed
 }
 
 void SignalProxy::receivePeerSignal(AbstractPeer *sender, const RequestType &requestType, const QVariantList &params) {
+  switch(requestType) {
+    // list all RequestTypes that shouldnot trigger a heartbeat counter reset here
+  case HeartBeatReply:
+    break;
+  default:
+    if(sender->type() == AbstractPeer::IODevicePeer) {
+      IODevicePeer *ioPeer = static_cast<IODevicePeer *>(sender);
+      ioPeer->sentHeartBeats = 0;
+    }
+  }
+
   switch(requestType) {
   case RpcCall:
     if(params.empty())