X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=2c9d268a4a13c5f19db4a437b2f9163d8c0a9b08;hp=e65f09ff23240d0c17515348f9290bb3333713f3;hb=9d54503555534a2c554f09a33df6afa33d6308ec;hpb=f44459818f34b556df8ff2f400098c50b78501eb diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index e65f09ff..2c9d268a 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2014 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -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)); }