+ return _classInfo[meta]->syncMap;
+}
+
+void SignalProxy::setReceiveMap(SyncableObject *obj) {
+ const QMetaObject *meta = obj->syncMetaObject();
+ Q_ASSERT(_classInfo.contains(meta));
+
+ QHash<int, int> receiveMap;
+
+ QMetaMethod requestSlot;
+ QByteArray returnTypeName;
+ QByteArray signature;
+ QByteArray methodName;
+ QByteArray params;
+ int paramsPos;
+ int receiverId;
+ const int methodCount = meta->methodCount();
+ for(int i = 0; i < methodCount; i++) {
+ requestSlot = meta->method(i);
+ if(requestSlot.methodType() != QMetaMethod::Slot)
+ continue;
+
+ returnTypeName = requestSlot.typeName();
+ if(QMetaType::Void == (QMetaType::Type)returnType(obj, i))
+ continue;
+
+ signature = QByteArray(requestSlot.signature());
+ if(!signature.startsWith("request"))
+ continue;
+
+ paramsPos = signature.indexOf('(');
+ if(paramsPos == -1)
+ continue;
+
+ methodName = signature.left(paramsPos);
+ params = signature.mid(paramsPos);
+
+ methodName = methodName.replace("request", "receive");
+ params = params.left(params.count() - 1) + ", " + returnTypeName + ")";
+
+ signature = QMetaObject::normalizedSignature(methodName + params);
+ receiverId = meta->indexOfSlot(signature);
+
+ if(receiverId == -1) {
+ signature = QMetaObject::normalizedSignature(methodName + "(" + returnTypeName + ")");
+ receiverId = meta->indexOfSlot(signature);
+ }
+
+ if(receiverId != -1)
+ receiveMap[i] = receiverId;
+ }
+ _classInfo[meta]->receiveMap = receiveMap;