There is a bug with QLocalSockets on Windows where data will be silently dropped if two consecutive writes are performed without flushing and the remote end hasn't read all the data between the two (see https://bugreports.qt.io/browse/QTBUG-18385). Since qmsgpack performs several write operations as part of a single stream output, it must allow callers to specify whether to flush writes in order to work around this bug.
qmsgpack
MessagePack for Qt
Documentation
Complete documentation is available here: qmsgpack.readthedocs.io
Installation
Clone repository:
git clone https://github.com/romixlab/qmsgpack.git
Run cmake:
cd qmsgpack
mkdir build
cd build
cmake ..
Compile:
make
Run tests and install
make tests install
Sample usage
Packing
QVariantList list;
list << 1 << 2 << 3;
QByteArray array = MsgPack::pack(list);
Unpacking:
QVariantList unpacked = MsgPack::unpack(array).toList();
By default these Qt types are supported: Int, UInt, LongLong, ULongLong, Double, QByteArray, Bool, QString, QStringList, QVariantList, QVariantMap
.
Also you can provide packer and unpacker functions for any other type (even for user type defined via Q_DECLARE_METATYPE
) or MsgPack type.
Qt types and User types
There is packers and unpackers for QColor, QTime, QDate, QDateTime, QPoint, QSize, QRect. Also you can create your own packer/unpacker methods for Qt or your own types. See docs for details.
Thread-safety
At this time it is not safe to call MsgPack::registerPacker
, MsgPack::registerUnpacker
and MsgPack::setCompatibilityModeEnabled
from different threads.
pack and unpack methods do not use any global data, so should be safe to use from multiple threads.