summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
89aa3d2)
Since an InitData message consists of the usual message header
(serialized as a QVariantList) followed by a QVariantMap, we can
do what we did in a few other places already; transform the map
into a list of key-value pairs, the keys being UTF-8 strings (as
QByteArrays) instead of QStrings, and append that list to the
rest of the message.
This is just a small optimization, but straightforward to do without
changing protocol semantics or introspecting payloads. And
since we send lots of InitData messages, saving even a few bytes
per message may be worth it.
break;
}
case InitData: {
break;
}
case InitData: {
- if (params.count() != 3) {
+ if (params.count() < 2) {
qWarning() << Q_FUNC_INFO << "Received invalid InitData:" << params;
return;
}
qWarning() << Q_FUNC_INFO << "Received invalid InitData:" << params;
return;
}
- QByteArray className = params[0].toByteArray();
- QString objectName = QString::fromUtf8(params[1].toByteArray());
- QVariantMap initData = params[2].toMap();
+ QByteArray className = params.takeFirst().toByteArray();
+ QString objectName = QString::fromUtf8(params.takeFirst().toByteArray());
+ QVariantMap initData;
+ for (int i = 0; i < params.count()/2; ++i)
+ initData[QString::fromUtf8(params[2*i].toByteArray())] = params[2*i+1];
handle(Protocol::InitData(className, objectName, initData));
break;
}
handle(Protocol::InitData(className, objectName, initData));
break;
}
void DataStreamPeer::dispatch(const Protocol::InitData &msg)
{
void DataStreamPeer::dispatch(const Protocol::InitData &msg)
{
- dispatchPackedFunc(QVariantList() << (qint16)InitData << msg.className << msg.objectName.toUtf8() << msg.initData);
+ QVariantList initData;
+ QVariantMap::const_iterator it = msg.initData.begin();
+ while (it != msg.initData.end()) {
+ initData << it.key().toUtf8() << it.value();
+ ++it;
+ }
+ dispatchPackedFunc(QVariantList() << (qint16)InitData << msg.className << msg.objectName.toUtf8() << initData);