- dispatchSignal(SignalProxy::HeartBeat, QVariantList());
- QHash<QIODevice *, peerInfo>::iterator peerIter = _peers.begin();
- QHash<QIODevice *, peerInfo>::iterator peerIterEnd = _peers.end();
- while(peerIter != peerIterEnd) {
- if(peerIter->sentHeartBeats > 1) {
- QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(peerIter.key());
- qWarning() << "SignalProxy: Disconnecting peer:"
- << (socket ? qPrintable(socket->peerAddress().toString()) : "local client")
- << "(didn't receive a heartbeat for over" << peerIter->sentHeartBeats * _heartBeatTimer.interval() / 1000 << "seconds)";
- peerIter.key()->close();
- } else {
- peerIter->sentHeartBeats++;
+ dispatchSignal(SignalProxy::HeartBeat, QVariantList() << QTime::currentTime());
+ PeerHash::iterator peer = _peers.begin();
+ while(peer != _peers.end()) {
+ if((*peer)->type() == AbstractPeer::IODevicePeer) {
+ IODevicePeer *ioPeer = static_cast<IODevicePeer *>(*peer);
+ if(ioPeer->sentHeartBeats > 0) {
+ updateLag(ioPeer, ioPeer->sentHeartBeats * _heartBeatTimer.interval());
+ }
+ if(ioPeer->sentHeartBeats > 1) {
+ //FIXME: proper disconnect.
+// QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(peerIter.key());
+// qWarning() << "SignalProxy: Disconnecting peer:"
+// << (socket ? qPrintable(socket->peerAddress().toString()) : "local client")
+// << "(didn't receive a heartbeat for over" << peerIter->sentHeartBeats * _heartBeatTimer.interval() / 1000 << "seconds)";
+// peerIter.key()->close();
+ } else {
+ ioPeer->sentHeartBeats++;
+ }