X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=f4ca5c1501aa3321228b38d5d33297edd4261454;hp=e65f09ff23240d0c17515348f9290bb3333713f3;hb=2a89d1b0c473f92c5cf9fb803d99e8b51b2c68e7;hpb=100a2678adf2016b7b4753d09d868929de83294e diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index e65f09ff..f4ca5c15 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -507,10 +507,11 @@ void SignalProxy::dispatch(const T &protoMessage) } -void SignalProxy::dispatch(Peer *peer, const RpcCall &rpcCall) +template +void SignalProxy::dispatch(Peer *peer, const T &protoMessage) { if (peer && peer->isOpen()) - peer->dispatch(rpcCall); + peer->dispatch(protoMessage); else QCoreApplication::postEvent(this, new ::RemovePeerEvent(peer)); } @@ -539,7 +540,7 @@ void SignalProxy::handle(Peer *peer, const SyncMessage &syncMessage) } QVariant returnValue((QVariant::Type)eMeta->returnType(slotId)); - if (!invokeSlot(receiver, slotId, syncMessage.params, returnValue)) { + if (!invokeSlot(receiver, slotId, syncMessage.params, returnValue, peer)) { qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", eMeta->methodName(slotId).constData()); return; } @@ -740,7 +741,11 @@ void SignalProxy::sync_call__(const SyncableObject *obj, SignalProxy::ProxyMode params << QVariant(argTypes[i], va_arg(ap, void *)); } - dispatch(SyncMessage(eMeta->metaObject()->className(), obj->objectName(), QByteArray(funcname), params)); + if (argTypes.size() >= 1 && argTypes[0] == qMetaTypeId() && proxyMode() == SignalProxy::Server) { + Peer *peer = params[0].value(); + dispatch(peer, SyncMessage(eMeta->metaObject()->className(), obj->objectName(), QByteArray(funcname), params)); + } else + dispatch(SyncMessage(eMeta->metaObject()->className(), obj->objectName(), QByteArray(funcname), params)); }