From 9f5481c93c3676f765333d4d9c36c559a339f3aa Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 5 Feb 2008 13:33:27 +0000 Subject: [PATCH 1/1] The Client sends now a heartbeat to the server once per minute. --- src/common/signalproxy.cpp | 28 ++++++++++++++++++++++------ src/common/signalproxy.h | 9 +++++++-- version.inc | 6 +++--- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 83f10e3e..3718fdef 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -90,7 +90,7 @@ int SignalRelay::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { } QMultiHash::const_iterator funcIter = sigNames.constFind(_id); while(funcIter != sigNames.constEnd() && funcIter.key() == _id) { - proxy->dispatchSignal(funcIter.value(), params); + proxy->dispatchSignal((int)SignalProxy::RpcCall, QVariantList() << funcIter.value() << params); funcIter++; } @@ -221,10 +221,15 @@ SignalProxy::ProxyMode SignalProxy::proxyMode() const { } void SignalProxy::initServer() { + disconnect(&_heartBeatTimer, 0, this, 0); + _heartBeatTimer.stop(); } void SignalProxy::initClient() { attachSlot("__objectRenamed__", this, SLOT(objectRenamed(QByteArray, QString, QString))); + connect(&_heartBeatTimer, SIGNAL(timeout()), + this, SLOT(sendHeartBeat())); + _heartBeatTimer.start(60 * 1000); // msecs: one beep per minute } bool SignalProxy::addPeer(QIODevice* iodev) { @@ -582,19 +587,26 @@ void SignalProxy::dispatchSignal(const QVariant &identifier, const QVariantList void SignalProxy::receivePeerSignal(QIODevice *sender, const QVariant &packedFunc) { QVariantList params(packedFunc.toList()); - QVariant call = params.takeFirst(); - if(call.type() != QVariant::Int) - return handleSignal(call.toByteArray(), params); + int callType = params.takeFirst().value(); - switch(call.toInt()) { + switch(callType) { + case RpcCall: + if(params.empty()) { + qWarning() << "SignalProxy::receivePeerSignal(): received empty RPC-Call"; + return; + } else { + return handleSignal(params.takeFirst().toByteArray(), params); + } case Sync: return handleSync(params); case InitRequest: return handleInitRequest(sender, params); case InitData: return handleInitData(sender, params); + case HeartBeat: + return; default: - qWarning() << "received undefined CallType" << call.toInt(); + qWarning() << "SignalProxy::receivePeerSignal(): received undefined CallType" << callType; return; } } @@ -832,6 +844,10 @@ void SignalProxy::setInitData(SyncableObject *obj, const QVariantMap &properties invokeSlot(obj, updatedRemotelyId(obj)); } +void SignalProxy::sendHeartBeat() { + dispatchSignal((int)SignalProxy::HeartBeat, QVariantList()); +} + void SignalProxy::dumpProxyStats() { QString mode; if(proxyMode() == Server) diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index 04ff7a5e..1c991aeb 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -28,6 +28,7 @@ #include #include #include +#include class SignalRelay; class SyncableObject; @@ -43,9 +44,11 @@ public: }; enum RequestType { - Sync = 0, + Sync = 1, + RpcCall, InitRequest, - InitData + InitData, + HeartBeat }; SignalProxy(QObject *parent); @@ -112,6 +115,7 @@ private slots: void removePeerBySender(); void objectRenamed(QString oldname, QString newname); void objectRenamed(QByteArray classname, QString oldname, QString newname); + void sendHeartBeat(); signals: void peerRemoved(QIODevice *obj); @@ -170,6 +174,7 @@ private: ProxyMode _proxyMode; + QTimer _heartBeatTimer; friend class SignalRelay; }; diff --git a/version.inc b/version.inc index 31b1f4fd..f7463293 100644 --- a/version.inc +++ b/version.inc @@ -5,14 +5,14 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-05"; - quasselBuild = 461; + quasselBuild = 462; //! Minimum client build number the core needs - clientBuildNeeded = 461; + clientBuildNeeded = 462; clientVersionNeeded = quasselVersion; //! Minimum core build number the client needs - coreBuildNeeded = 461; + coreBuildNeeded = 462; coreVersionNeeded = quasselVersion; } -- 2.20.1