Set QDataStream version in QxtDataStreamSignalSerializer Modified QxtDataStreamSignalSerializer to allow setting QDataStream version. This allows RPC between programs that use different versions of Qt.

Signed-off-by: Josh Handley <jhandley@lkc.com>
This commit is contained in:
Josh Handley 2013-06-03 13:45:44 -04:00
parent 3a84efc486
commit 916fdc88e6
2 changed files with 57 additions and 0 deletions

View File

@ -36,11 +36,32 @@
#include <QtDebug>
#include <qendian.h>
class QxtDataStreamSignalSerializerPrivate : public QxtPrivate<QxtDataStreamSignalSerializer>
{
public:
QXT_DECLARE_PUBLIC(QxtDataStreamSignalSerializer)
int dataStreamVersion;
void applyVersion(QDataStream &str) const
{
if (dataStreamVersion != (int) QxtDataStreamSignalSerializer::DefaultDataStreamVersion) {
str.setVersion((QDataStream::Version) dataStreamVersion);
}
}
};
QxtDataStreamSignalSerializer::QxtDataStreamSignalSerializer(int dataStreamVersion)
{
QXT_INIT_PRIVATE(QxtDataStreamSignalSerializer);
qxt_d().dataStreamVersion = dataStreamVersion;
}
QByteArray QxtDataStreamSignalSerializer::serialize(const QString& fn, const QVariant& p1, const QVariant& p2, const QVariant& p3,
const QVariant& p4, const QVariant& p5, const QVariant& p6, const QVariant& p7, const QVariant& p8) const
{
QByteArray rv;
QDataStream str(&rv, QIODevice::WriteOnly);
qxt_d().applyVersion(str);
str << fn;
unsigned char ct = 8;
if (!p1.isValid()) ct = 0;
@ -75,6 +96,7 @@ QxtAbstractSignalSerializer::DeserializedData QxtDataStreamSignalSerializer::des
if (cmd.length() == 0) return NoOp();
QDataStream str(cmd);
qxt_d().applyVersion(str);
QString signal;
unsigned char argCount;
@ -99,3 +121,13 @@ bool QxtDataStreamSignalSerializer::canDeserialize(const QByteArray& buffer) con
quint32 bodyLen = quint32(buffer.length() - 4);
return headerLen <= bodyLen;
}
int QxtDataStreamSignalSerializer::dataStreamVersion() const
{
return qxt_d().dataStreamVersion;
}
void QxtDataStreamSignalSerializer::setDataStreamVersion(int version)
{
qxt_d().dataStreamVersion = version;
}

View File

@ -35,9 +35,20 @@
#include <qxtglobal.h>
#include <qxtabstractsignalserializer.h>
class QxtDataStreamSignalSerializerPrivate;
class QXT_CORE_EXPORT QxtDataStreamSignalSerializer : public QxtAbstractSignalSerializer
{
QXT_DECLARE_PRIVATE(QxtDataStreamSignalSerializer)
public:
enum {
DefaultDataStreamVersion = 0
};
QxtDataStreamSignalSerializer(int dataStreamVersion = DefaultDataStreamVersion);
/*!
* Serializes a signal into a form suitable for sending to an I/O device.
*/
@ -54,6 +65,20 @@ public:
* Indicates whether the data currently in the buffer can be deserialized.
*/
virtual bool canDeserialize(const QByteArray& buffer) const;
/*!
* Get version of data stream to use for serialization/deserialization.
* \return Either a QDataStream::Version or DefaultDataStreamVersion
*/
int dataStreamVersion() const;
/*!
* Set version of data stream to use for serialization/deserialization.
* This allows RPC between programs built with different versions of Qt.
*
* \param version Either a QDataStream::Version or DefaultDataStreamVersion
*/
void setDataStreamVersion(int version);
};
#endif