Encapsulation with private members and accessors is nice, but for something
that is just a POD and will most probably stay that way, it's overkill [1].
So we're turning the classes into structs with direct member access.
Most beneficially, this makes protocol.h much nicer to read.
As a bonus, we introduce a common baseclass that holds the handler() method to
remove duplication.
[1] Even Qt sets a precedent for that, e.g. QPair and many other PODs that are
implemented as structs with public member access even in the public API.
/*** handled by SignalProxy ***/
/*** handled by SignalProxy ***/
+struct SignalProxyMessage
-public:
- inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList ¶ms)
- : _className(className), _objectName(objectName), _slotName(slotName), _params(params) {}
-
inline Handler handler() const { return SignalProxy; }
inline Handler handler() const { return SignalProxy; }
- inline QByteArray className() const { return _className; }
- inline QString objectName() const { return _objectName; }
- inline QByteArray slotName() const { return _slotName; }
- inline QVariantList params() const { return _params; }
+struct SyncMessage : public SignalProxyMessage
+{
+ inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList ¶ms)
+ : className(className), objectName(objectName), slotName(slotName), params(params) {}
-private:
- QByteArray _className;
- QString _objectName;
- QByteArray _slotName;
- QVariantList _params;
+ QByteArray className;
+ QString objectName;
+ QByteArray slotName;
+ QVariantList params;
+struct RpcCall : public SignalProxyMessage
inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms)
inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms)
- : _slotName(slotName), _params(params) {}
+ : slotName(slotName), params(params) {}
- inline Handler handler() const { return SignalProxy; }
-
- inline QByteArray slotName() const { return _slotName; }
- inline QVariantList params() const { return _params; }
-
-private:
- QByteArray _slotName;
- QVariantList _params;
+ QByteArray slotName;
+ QVariantList params;
+struct InitRequest : public SignalProxyMessage
inline InitRequest(const QByteArray &className, const QString &objectName)
inline InitRequest(const QByteArray &className, const QString &objectName)
- : _className(className), _objectName(objectName) {}
+ : className(className), objectName(objectName) {}
- inline Handler handler() const { return SignalProxy; }
-
- inline QByteArray className() const { return _className; }
- inline QString objectName() const { return _objectName; }
-
-private:
- QByteArray _className;
- QString _objectName;
+ QByteArray className;
+ QString objectName;
+struct InitData : public SignalProxyMessage
inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
- : _className(className), _objectName(objectName), _initData(initData) {}
-
- inline Handler handler() const { return SignalProxy; }
+ : className(className), objectName(objectName), initData(initData) {}
- inline QByteArray className() const { return _className; }
- inline QString objectName() const { return _objectName; }
-
- inline QVariantMap initData() const { return _initData; }
-
-private:
- QByteArray _className;
- QString _objectName;
- QVariantMap _initData;
+ QByteArray className;
+ QString objectName;
+ QVariantMap initData;
};
/*** handled by RemoteConnection ***/
};
/*** handled by RemoteConnection ***/
-public:
- inline HeartBeat(const QDateTime ×tamp) : _timestamp(timestamp) {}
+ inline HeartBeat(const QDateTime ×tamp) : timestamp(timestamp) {}
- inline QDateTime timestamp() const { return _timestamp; }
-
-private:
- QDateTime _timestamp;
-public:
- inline HeartBeatReply(const QDateTime ×tamp) : _timestamp(timestamp) {}
-
- inline QDateTime timestamp() const { return _timestamp; }
+ inline HeartBeatReply(const QDateTime ×tamp) : timestamp(timestamp) {}
-private:
- QDateTime _timestamp;
void LegacyPeer::dispatch(const Protocol::SyncMessage &msg)
{
void LegacyPeer::dispatch(const Protocol::SyncMessage &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)Sync << msg.className() << msg.objectName() << msg.slotName() << msg.params());
+ dispatchPackedFunc(QVariantList() << (qint16)Sync << msg.className << msg.objectName << msg.slotName << msg.params);
}
void LegacyPeer::dispatch(const Protocol::RpcCall &msg)
{
}
void LegacyPeer::dispatch(const Protocol::RpcCall &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)RpcCall << msg.slotName() << msg.params());
+ dispatchPackedFunc(QVariantList() << (qint16)RpcCall << msg.slotName << msg.params);
}
void LegacyPeer::dispatch(const Protocol::InitRequest &msg)
{
}
void LegacyPeer::dispatch(const Protocol::InitRequest &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)InitRequest << msg.className() << msg.objectName());
+ dispatchPackedFunc(QVariantList() << (qint16)InitRequest << msg.className << msg.objectName);
}
void LegacyPeer::dispatch(const Protocol::InitData &msg)
{
}
void LegacyPeer::dispatch(const Protocol::InitData &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)InitData << msg.className() << msg.objectName() << msg.initData());
+ dispatchPackedFunc(QVariantList() << (qint16)InitData << msg.className << msg.objectName << msg.initData);
}
void LegacyPeer::dispatch(const Protocol::HeartBeat &msg)
{
}
void LegacyPeer::dispatch(const Protocol::HeartBeat &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)HeartBeat << msg.timestamp().time());
+ dispatchPackedFunc(QVariantList() << (qint16)HeartBeat << msg.timestamp.time());
}
void LegacyPeer::dispatch(const Protocol::HeartBeatReply &msg)
{
}
void LegacyPeer::dispatch(const Protocol::HeartBeatReply &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)HeartBeatReply << msg.timestamp().time());
+ dispatchPackedFunc(QVariantList() << (qint16)HeartBeatReply << msg.timestamp.time());
void RemotePeer::handle(const HeartBeat &heartBeat)
{
void RemotePeer::handle(const HeartBeat &heartBeat)
{
- dispatch(HeartBeatReply(heartBeat.timestamp()));
+ dispatch(HeartBeatReply(heartBeat.timestamp));
void SignalProxy::handle(Peer *peer, const SyncMessage &syncMessage)
{
void SignalProxy::handle(Peer *peer, const SyncMessage &syncMessage)
{
- if (!_syncSlave.contains(syncMessage.className()) || !_syncSlave[syncMessage.className()].contains(syncMessage.objectName())) {
- qWarning() << QString("no registered receiver for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className(), syncMessage.slotName(), syncMessage.objectName())
- << syncMessage.params();
+ if (!_syncSlave.contains(syncMessage.className) || !_syncSlave[syncMessage.className].contains(syncMessage.objectName)) {
+ qWarning() << QString("no registered receiver for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className, syncMessage.slotName, syncMessage.objectName)
+ << syncMessage.params;
- SyncableObject *receiver = _syncSlave[syncMessage.className()][syncMessage.objectName()];
+ SyncableObject *receiver = _syncSlave[syncMessage.className][syncMessage.objectName];
ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
- if (!eMeta->slotMap().contains(syncMessage.slotName())) {
- qWarning() << QString("no matching slot for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className(), syncMessage.slotName(), syncMessage.objectName())
- << syncMessage.params();
+ if (!eMeta->slotMap().contains(syncMessage.slotName)) {
+ qWarning() << QString("no matching slot for sync call: %1::%2 (objectName=\"%3\"). Params are:").arg(syncMessage.className, syncMessage.slotName, syncMessage.objectName)
+ << syncMessage.params;
- int slotId = eMeta->slotMap()[syncMessage.slotName()];
+ int slotId = eMeta->slotMap()[syncMessage.slotName];
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 (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, syncMessage.params(), returnValue)) {
+ if (!invokeSlot(receiver, slotId, syncMessage.params, returnValue)) {
qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", eMeta->methodName(slotId).constData());
return;
}
qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", eMeta->methodName(slotId).constData());
return;
}
int receiverId = eMeta->receiveMap()[slotId];
QVariantList returnParams;
if (eMeta->argTypes(receiverId).count() > 1)
int receiverId = eMeta->receiveMap()[slotId];
QVariantList returnParams;
if (eMeta->argTypes(receiverId).count() > 1)
- returnParams << syncMessage.params();
+ returnParams << syncMessage.params;
returnParams << returnValue;
returnParams << returnValue;
- peer->dispatch(SyncMessage(syncMessage.className(), syncMessage.objectName(), eMeta->methodName(receiverId), returnParams));
+ peer->dispatch(SyncMessage(syncMessage.className, syncMessage.objectName, eMeta->methodName(receiverId), returnParams));
}
// send emit update signal
}
// send emit update signal
void SignalProxy::handle(Peer *peer, const InitRequest &initRequest)
{
void SignalProxy::handle(Peer *peer, const InitRequest &initRequest)
{
- if (!_syncSlave.contains(initRequest.className())) {
+ if (!_syncSlave.contains(initRequest.className)) {
qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Class:"
- << initRequest.className();
+ << initRequest.className;
- if (!_syncSlave[initRequest.className()].contains(initRequest.objectName())) {
+ if (!_syncSlave[initRequest.className].contains(initRequest.objectName)) {
qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:"
qWarning() << "SignalProxy::handleInitRequest() received initRequest for unregistered Object:"
- << initRequest.className() << initRequest.objectName();
+ << initRequest.className << initRequest.objectName;
- SyncableObject *obj = _syncSlave[initRequest.className()][initRequest.objectName()];
- peer->dispatch(InitData(initRequest.className(), initRequest.objectName(), initData(obj)));
+ SyncableObject *obj = _syncSlave[initRequest.className][initRequest.objectName];
+ peer->dispatch(InitData(initRequest.className, initRequest.objectName, initData(obj)));
- if (!_syncSlave.contains(initData.className())) {
+ if (!_syncSlave.contains(initData.className)) {
qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:"
qWarning() << "SignalProxy::handleInitData() received initData for unregistered Class:"
- << initData.className();
- if (!_syncSlave[initData.className()].contains(initData.objectName())) {
+ if (!_syncSlave[initData.className].contains(initData.objectName)) {
qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:"
qWarning() << "SignalProxy::handleInitData() received initData for unregistered Object:"
- << initData.className() << initData.objectName();
+ << initData.className << initData.objectName;
- SyncableObject *obj = _syncSlave[initData.className()][initData.objectName()];
- setInitData(obj, initData.initData());
+ SyncableObject *obj = _syncSlave[initData.className][initData.objectName];
+ setInitData(obj, initData.initData);
QObject *receiver;
int methodId;
QObject *receiver;
int methodId;
- SlotHash::const_iterator slot = _attachedSlots.constFind(rpcCall.slotName());
- while (slot != _attachedSlots.constEnd() && slot.key() == rpcCall.slotName()) {
+ SlotHash::const_iterator slot = _attachedSlots.constFind(rpcCall.slotName);
+ while (slot != _attachedSlots.constEnd() && slot.key() == rpcCall.slotName) {
receiver = (*slot).first;
methodId = (*slot).second;
receiver = (*slot).first;
methodId = (*slot).second;
- if (!invokeSlot(receiver, methodId, rpcCall.params())) {
+ if (!invokeSlot(receiver, methodId, rpcCall.params)) {
ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
qWarning("SignalProxy::handleSignal(): invokeMethod for \"%s\" failed ", eMeta->methodName(methodId).constData());
}
ExtendedMetaObject *eMeta = extendedMetaObject(receiver);
qWarning("SignalProxy::handleSignal(): invokeMethod for \"%s\" failed ", eMeta->methodName(methodId).constData());
}