mirror of
https://github.com/QuasarApp/Heart.git
synced 2025-05-13 09:59:42 +00:00
added base methods for the control versions of the packages
This commit is contained in:
parent
64cdc993cb
commit
bb999376ca
HeartTests/units
src
private
public
@ -12,7 +12,7 @@
|
||||
#define LOCAL_TEST_PORT TEST_PORT + 4
|
||||
|
||||
class BigPackage: public QH::PKG::AbstractData {
|
||||
QH_PACKAGE(BigPackage, "BigPackage")
|
||||
QH_PACKAGE_AUTO(BigPackage)
|
||||
|
||||
public:
|
||||
BigPackage(){
|
||||
|
@ -26,11 +26,11 @@ QDataStream &APIVersion::toStream(QDataStream &stream) const {
|
||||
return stream;
|
||||
}
|
||||
|
||||
const VersionData &APIVersion::version() const {
|
||||
const VersionData &APIVersion::nodeVersion() const {
|
||||
return _version;
|
||||
}
|
||||
|
||||
void APIVersion::setVersion(const VersionData &newVersion) {
|
||||
void APIVersion::setNodeVersion(const VersionData &newVersion) {
|
||||
_version = newVersion;
|
||||
}
|
||||
|
||||
|
@ -27,13 +27,16 @@ public:
|
||||
APIVersion();
|
||||
|
||||
static unsigned short command(){return PROTOCKOL_VERSION_COMMAND;}
|
||||
static unsigned short version(){return 0;}
|
||||
|
||||
static QString commandText(){return "PROTOCKOL_VERSION_COMMAND";}
|
||||
unsigned short cmd() const override {return APIVersion::command();}
|
||||
unsigned short ver() const override {return APIVersion::version();}
|
||||
|
||||
QString cmdString() const override {return APIVersion::commandText();}
|
||||
|
||||
const VersionData &version() const;
|
||||
void setVersion(const VersionData &newVersion);
|
||||
const VersionData &nodeVersion() const;
|
||||
void setNodeVersion(const VersionData &newVersion);
|
||||
|
||||
bool isValid() const override;
|
||||
|
||||
|
@ -22,11 +22,13 @@ class VersionIsReceived: public QH::PKG::AbstractData
|
||||
|
||||
public:
|
||||
VersionIsReceived();
|
||||
static unsigned short version(){return 0;}
|
||||
|
||||
static unsigned short command(){return PROTOCKOL_VERSION_RECEIVED_COMMAND;}
|
||||
static QString commandText(){return "PROTOCKOL_VERSION_RECEIVED_COMMAND";}
|
||||
unsigned short cmd() const override {return VersionIsReceived::command();}
|
||||
QString cmdString() const override {return VersionIsReceived::commandText();}
|
||||
unsigned short ver() const override {return VersionIsReceived::version();}
|
||||
|
||||
|
||||
// StreamBase interface
|
||||
|
@ -290,7 +290,7 @@ bool APIVersionParser::sendSupportedAPI(AbstractNodeInfo *dist) const {
|
||||
return false;
|
||||
|
||||
PKG::APIVersion versionInformationPkg;
|
||||
versionInformationPkg.setVersion(supportedAPIs);
|
||||
versionInformationPkg.setNodeVersion(supportedAPIs);
|
||||
|
||||
return sendData(&versionInformationPkg, dist);
|
||||
}
|
||||
@ -299,7 +299,7 @@ bool APIVersionParser::processAppVersion(const QSharedPointer<PKG::APIVersion> &
|
||||
QH::AbstractNodeInfo *sender,
|
||||
const QH::Header &) {
|
||||
|
||||
auto distVersion = message->version();
|
||||
auto distVersion = message->nodeVersion();
|
||||
sender->setVersion(distVersion);
|
||||
auto parser = selectParser(distVersion);
|
||||
|
||||
|
@ -21,6 +21,7 @@ AbstractData::AbstractData() {
|
||||
}
|
||||
|
||||
bool AbstractData::toPackage(Package &package,
|
||||
unsigned short reqVersion,
|
||||
unsigned int triggerHash) const {
|
||||
|
||||
if (!checkCmd()) {
|
||||
@ -33,7 +34,11 @@ bool AbstractData::toPackage(Package &package,
|
||||
return false;
|
||||
}
|
||||
|
||||
package.data = toBytes();
|
||||
if (!toVersion(package.data, reqVersion)) {
|
||||
QuasarAppUtils::Params::log("You try send not supported version of packge on the distanation node.",
|
||||
QuasarAppUtils::Error);
|
||||
return false;
|
||||
}
|
||||
|
||||
package.hdr.command = cmd();
|
||||
package.hdr.triggerHash = triggerHash;
|
||||
@ -67,6 +72,15 @@ void AbstractData::fromPakcage(const Package &pkg) {
|
||||
fromBytes(pkg.data);
|
||||
}
|
||||
|
||||
bool AbstractData::toVersion(QByteArray& out, unsigned short reqVersion) const {
|
||||
if (reqVersion == ver()) {
|
||||
out = toBytes();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
AbstractData::~AbstractData() {
|
||||
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#define ABSTRACTDATA_H
|
||||
#include "humanreadableobject.h"
|
||||
#include "package.h"
|
||||
#include <QSharedPointer>
|
||||
#include <streambase.h>
|
||||
#include <crc/crchash.h>
|
||||
|
||||
@ -26,22 +27,37 @@
|
||||
* @brief QH_PACKAGE This macross prepare data to send and create a global id for package. For get global id use the cmd method.
|
||||
* For get quick access for global command use the ClassName::command() method. This method is static.
|
||||
*/
|
||||
#define QH_PACKAGE(X, S) \
|
||||
#define QH_PACKAGE(X, S, V) \
|
||||
public: \
|
||||
static unsigned short command(){\
|
||||
QByteArray ba = QString(S).toLocal8Bit();\
|
||||
return qa_common::hash16(ba.data(), ba.size());\
|
||||
} \
|
||||
static QString commandText(){return S;} \
|
||||
static unsigned short version(){ return V; } \
|
||||
unsigned short cmd() const override {return X::command();} \
|
||||
unsigned short ver() const override {return X::version();}; \
|
||||
\
|
||||
QString cmdString() const override {return X::commandText();} \
|
||||
protected: \
|
||||
unsigned int localCode() const override {return typeid(X).hash_code();} \
|
||||
\
|
||||
private:
|
||||
|
||||
/**
|
||||
* @brief QH_PACKAGE_AUTO This macross prepare data to send and create a global id for package.
|
||||
* @arg X This is unique id of the pacakge. shold be some on all your network devices.
|
||||
* @note auto pacakge create a 0 version of your package.
|
||||
*/
|
||||
#define QH_PACKAGE_AUTO(X) QH_PACKAGE(X,#X, 0)
|
||||
|
||||
#define QH_PACKAGE_AUTO(X) QH_PACKAGE(X,#X)
|
||||
/**
|
||||
* @brief QH_PACKAGE_AUTO This macross prepare data to send and create a global id for package.
|
||||
* @arg X This is unique id of the pacakge. shold be some on all your network devices.
|
||||
* @arg V This is version of the yor pacakge.
|
||||
* @note auto pacakge create a 0 version of your package.
|
||||
*/
|
||||
#define QH_PACKAGE_AUTO_VER(X, V) QH_PACKAGE(X,#X, V)
|
||||
|
||||
namespace QH {
|
||||
namespace PKG {
|
||||
@ -54,6 +70,7 @@ namespace PKG {
|
||||
* \code{cpp}
|
||||
* class MyPackage: public QH::AbstractData
|
||||
{
|
||||
QH_PACKAGE_AUTO_VER(MyPackage, 1)
|
||||
public:
|
||||
MyPackage();
|
||||
|
||||
@ -92,6 +109,12 @@ public:
|
||||
*/
|
||||
virtual unsigned short cmd() const = 0;
|
||||
|
||||
/**
|
||||
* @brief ver This method should be return number of the pacakge version.
|
||||
* @return pcakge version. by default return - 0 (any version)
|
||||
*/
|
||||
virtual unsigned short ver() const = 0;
|
||||
|
||||
/**
|
||||
* @brief cmd - This is command string of this object, (for generate cmd use macross QH_PACKAGE)
|
||||
* @note Use the QH_PACKAGE macross for implement this method.
|
||||
@ -103,11 +126,12 @@ public:
|
||||
/**
|
||||
* @brief toPackage This method convert this class object to the package.
|
||||
* For more info see Package class.
|
||||
* @param package This is return value of Package class.
|
||||
* @param package This is return value of Package class.
|
||||
* @param reqVersion This is required version. This method create package of the needed version.
|
||||
* @param triggerHash This is hash of the package the current class is responding to.
|
||||
* @return True if convert to package finished successful.
|
||||
*/
|
||||
bool toPackage(Package &package, unsigned int triggerHash = 0) const;
|
||||
bool toPackage(Package &package, unsigned short reqVersion, unsigned int triggerHash = 0) const;
|
||||
|
||||
/**
|
||||
* @brief isValid This method check current object to valid.
|
||||
@ -152,6 +176,14 @@ public:
|
||||
*/
|
||||
static QString commandText(){return "NULL";};
|
||||
|
||||
/**
|
||||
* @brief toVersion This method should be convert package to rquired version.
|
||||
* @param outputArray This is output byte array after convertation.
|
||||
* @param version This is required version pacakge.
|
||||
* @return true if convertation finished successful.
|
||||
*/
|
||||
virtual bool toVersion(QByteArray& outputArray, unsigned short version) const;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief AbstractData - Base constructor of this object.
|
||||
|
@ -33,7 +33,7 @@ struct ErrorData {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT BadRequest : public AbstractData
|
||||
{
|
||||
QH_PACKAGE(BadRequest, "BadRequest")
|
||||
QH_PACKAGE_AUTO(BadRequest)
|
||||
public:
|
||||
|
||||
/**
|
||||
|
@ -19,7 +19,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT BigDataBase: public AbstractData
|
||||
{
|
||||
QH_PACKAGE(BigDataBase, "BigDataBase")
|
||||
QH_PACKAGE_AUTO(BigDataBase)
|
||||
|
||||
public:
|
||||
BigDataBase();
|
||||
|
@ -27,7 +27,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT BigDataHeader : public BigDataBase
|
||||
{
|
||||
QH_PACKAGE(BigDataHeader, "BigDataHeader")
|
||||
QH_PACKAGE_AUTO(BigDataHeader)
|
||||
|
||||
public:
|
||||
BigDataHeader();
|
||||
|
@ -20,7 +20,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT BigDataPart : public BigDataBase
|
||||
{
|
||||
QH_PACKAGE(BigDataPart, "BigDataPart")
|
||||
QH_PACKAGE_AUTO(BigDataPart)
|
||||
|
||||
public:
|
||||
BigDataPart();
|
||||
|
@ -19,7 +19,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT BigDataRequest: public BigDataBase
|
||||
{
|
||||
QH_PACKAGE(BigDataRequest, "BigDataRequest")
|
||||
QH_PACKAGE_AUTO(BigDataRequest)
|
||||
|
||||
public:
|
||||
BigDataRequest();
|
||||
|
@ -19,7 +19,7 @@ namespace PKG {
|
||||
*/
|
||||
class BigDataWraper: public AbstractData
|
||||
{
|
||||
QH_PACKAGE(BigDataWraper, "BigDataWraper")
|
||||
QH_PACKAGE_AUTO(BigDataWraper)
|
||||
|
||||
public:
|
||||
BigDataWraper() = default;
|
||||
|
@ -27,7 +27,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT CloseConnection: public AbstractData
|
||||
{
|
||||
QH_PACKAGE(CloseConnection, "CloseConnection")
|
||||
QH_PACKAGE_AUTO(CloseConnection)
|
||||
|
||||
public:
|
||||
CloseConnection();
|
||||
|
@ -25,7 +25,7 @@ namespace PKG {
|
||||
template<class Package>
|
||||
class DataPack final: public AbstractData
|
||||
{
|
||||
QH_PACKAGE(DataPack<Package>, Package::commandText() + "Pack")
|
||||
QH_PACKAGE(DataPack<Package>, Package::commandText() + "Pack", 0)
|
||||
|
||||
public:
|
||||
|
||||
|
@ -21,7 +21,7 @@ namespace PKG {
|
||||
/**
|
||||
* The ONLY_DATABASE_PACKAGE macross is base macros for all database objects that do not use stream and network functions.
|
||||
*/
|
||||
#define ONLY_DATABASE_PACKAGE QH_PACKAGE(DBObject, "DBObject")
|
||||
#define ONLY_DATABASE_PACKAGE QH_PACKAGE(DBObject, "DBObject", 0)
|
||||
|
||||
|
||||
/**
|
||||
@ -95,7 +95,7 @@ typedef QMap<QString, DBVariant> DBVariantMap;
|
||||
*/
|
||||
class HEARTSHARED_EXPORT DBObject : public AbstractData
|
||||
{
|
||||
QH_PACKAGE(DBObject, "DBObject")
|
||||
QH_PACKAGE_AUTO(DBObject)
|
||||
|
||||
public:
|
||||
|
||||
|
@ -22,7 +22,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT DBObjectSet: public DBObject
|
||||
{
|
||||
QH_PACKAGE(DBObjectSet, "DBObjectSet")
|
||||
QH_PACKAGE_AUTO(DBObjectSet)
|
||||
|
||||
public:
|
||||
DBObjectSet(const QString table);
|
||||
|
@ -25,7 +25,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT DeleteObject: public DBObject, public IToken
|
||||
{
|
||||
QH_PACKAGE(DeleteObject, "DeleteObject")
|
||||
QH_PACKAGE_AUTO(DeleteObject)
|
||||
|
||||
public:
|
||||
DeleteObject();
|
||||
|
@ -19,7 +19,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT GetMaxIntegerId: public DBObject
|
||||
{
|
||||
QH_PACKAGE(GetMaxIntegerId, "GetMaxIntegerId")
|
||||
QH_PACKAGE_AUTO(GetMaxIntegerId)
|
||||
|
||||
public:
|
||||
/**
|
||||
|
@ -38,7 +38,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT GetSingleValue final: public DBObject
|
||||
{
|
||||
QH_PACKAGE(GetSingleValue, "GetSingleValue")
|
||||
QH_PACKAGE_AUTO(GetSingleValue)
|
||||
|
||||
public:
|
||||
/**
|
||||
|
@ -20,7 +20,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT Ping: public AbstractData
|
||||
{
|
||||
QH_PACKAGE(Ping, "Ping")
|
||||
QH_PACKAGE_AUTO(Ping)
|
||||
|
||||
public:
|
||||
Ping();
|
||||
|
@ -32,7 +32,7 @@ namespace PKG {
|
||||
*/
|
||||
class HEARTSHARED_EXPORT SetSingleValue final: public DBObject
|
||||
{
|
||||
QH_PACKAGE(SetSingleValue, "SetSingleValue")
|
||||
QH_PACKAGE_AUTO(SetSingleValue)
|
||||
|
||||
public:
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user