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:
parent
3a84efc486
commit
916fdc88e6
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user