- case HeartBeatReply:
- break;
- default:
- if(sender->type() == AbstractPeer::IODevicePeer) {
- IODevicePeer *ioPeer = static_cast<IODevicePeer *>(sender);
- ioPeer->sentHeartBeats = 0;
- }
- }
-
- qDebug() << "SignalProxy::receivePeerSignal)" << requestType << params;
- switch(requestType) {
- case RpcCall:
- if(params.empty())
- qWarning() << "SignalProxy::receivePeerSignal(): received empty RPC-Call";
- else
- handleSignal(params);
- //handleSignal(params.takeFirst().toByteArray(), params);
- break;
-
- case Sync:
- handleSync(sender, params);
- break;
-
- case InitRequest:
- handleInitRequest(sender, params);
- break;
-
- case InitData:
- handleInitData(sender, params);
- break;
-
- case HeartBeat:
- receiveHeartBeat(sender, params);
- break;
-
- case HeartBeatReply:
- receiveHeartBeatReply(sender, params);
- break;
-
- default:
- qWarning() << "SignalProxy::receivePeerSignal(): received undefined CallType" << requestType << params;
- }
-}
-
-void SignalProxy::receivePeerSignal(SignalProxy *sender, const RequestType &requestType, const QVariantList ¶ms) {
- if(!_peers.contains(sender)) {
- // we output only the pointer value. otherwise Qt would try to pretty print. As the object might already been destroyed, this is not a good idea.
- qWarning() << "SignalProxy::receivePeerSignal(): received Signal from unknown Proxy" << reinterpret_cast<void *>(sender);
- return;
- }
- receivePeerSignal(_peers[sender], requestType, params);
-}
-
-void SignalProxy::handleSync(AbstractPeer *sender, QVariantList params) {
- if(params.count() < 3) {
- qWarning() << "received invalid Sync call" << params;
- return;
- }
-
- QByteArray className = params.takeFirst().toByteArray();
- QString objectName = params.takeFirst().toString();
- QByteArray slot = params.takeFirst().toByteArray();
-
- if(!_syncSlave.contains(className) || !_syncSlave[className].contains(objectName)) {
- qWarning() << QString("no registered receiver for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(QString(className)).arg(QString(slot)).arg(objectName)
- << params;
- return;
- }
-
- SyncableObject *receiver = _syncSlave[className][objectName];
- ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
- if(!eMeta->slotMap().contains(slot)) {
- qWarning() << QString("no matching slot for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(QString(className)).arg(QString(slot)).arg(objectName)
- << params;
- return;
- }
-
- int slotId = eMeta->slotMap()[slot];
- if(proxyMode() != eMeta->receiverMode(slotId)) {
- qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed. Wrong ProxyMode!", eMeta->methodName(slotId).constData());
- return;
- }
-
- QVariant returnValue((QVariant::Type)eMeta->returnType(slotId));
- if(!invokeSlot(receiver, slotId, params, returnValue)) {
- qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", eMeta->methodName(slotId).constData());
- return;
- }
-
-
- if(returnValue.type() != QVariant::Invalid && eMeta->receiveMap().contains(slotId)) {
- int receiverId = eMeta->receiveMap()[slotId];
- QVariantList returnParams;
- returnParams << className
- << objectName
- << eMeta->methodName(receiverId);
- //QByteArray(receiver->metaObject()->method(receiverId).signature());
- if(eMeta->argTypes(receiverId).count() > 1)
- returnParams << params;
- returnParams << returnValue;
- sender->dispatchSignal(Sync, returnParams);
- }
-
- // send emit update signal
- invokeSlot(receiver, eMeta->updatedRemotelyId());
-}
-
-void SignalProxy::handleInitRequest(AbstractPeer *sender, const QVariantList ¶ms) {
- if(params.count() != 2) {
- qWarning() << "SignalProxy::handleInitRequest() received initRequest with invalid param Count:"
- << params;
- return;
- }
-
- QByteArray className(params[0].toByteArray());
- QString objectName(params[1].toString());
-
- if(!_syncSlave.contains(className)) {
- qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
- << className;
- return;
- }
-
- if(!_syncSlave[className].contains(objectName)) {
- qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:"
- << className << objectName;
- return;
- }
-
- SyncableObject *obj = _syncSlave[className][objectName];
-
- QVariantList params_;
- params_ << className
- << objectName
- << initData(obj);
-
- sender->dispatchSignal(InitData, params_);
-}
-
-void SignalProxy::handleInitData(AbstractPeer *sender, const QVariantList ¶ms) {
- Q_UNUSED(sender)
- if(params.count() != 3) {
- qWarning() << "SignalProxy::handleInitData() received initData with invalid param Count:"
- << params;
- return;
- }
-
- QByteArray className(params[0].toByteArray());
- QString objectName(params[1].toString());
- QVariantMap propertyMap(params[2].toMap());
-
- if(!_syncSlave.contains(className)) {
- qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:"
- << className;
- return;
- }
-
- if(!_syncSlave[className].contains(objectName)) {
- qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:"
- << className << objectName;
- return;
- }
-
- SyncableObject *obj = _syncSlave[className][objectName];
- setInitData(obj, propertyMap);