diff --git a/src/private/bigdataparser.cpp b/src/private/bigdataparser.cpp index 3a32c70..c02943b 100644 --- a/src/private/bigdataparser.cpp +++ b/src/private/bigdataparser.cpp @@ -135,6 +135,7 @@ bool BigDataParser::processPart(const QSharedPointer<PKG::BigDataPart> &part, } auto package = node()->genPackage(localPool.header->getCommand(), + localPool.header->pkgVersion(), sender); if (!package) return false; @@ -209,6 +210,7 @@ bool BigDataParser::sendBigDataPackage(const PKG::AbstractData *data, hdr->setPackagesCount(std::ceil(rawData.size() / static_cast<double>(sizeLimit))); hdr->setPackageId(rand()); hdr->setCommand(data->cmd()); + hdr->setPkgVersion(data->ver()); insertNewBigData(hdr); diff --git a/src/public/abstractnode.cpp b/src/public/abstractnode.cpp index 1407862..0e31e95 100644 --- a/src/public/abstractnode.cpp +++ b/src/public/abstractnode.cpp @@ -710,9 +710,11 @@ ParserResult AbstractNode::parsePackage(const QSharedPointer<AbstractData> &pkg, return _apiVersionParser->parsePackage(pkg, pkgHeader, sender); } -QSharedPointer<AbstractData> AbstractNode::genPackage(unsigned short cmd, AbstractNodeInfo *sender) const { +QSharedPointer<AbstractData> AbstractNode::genPackage(unsigned short cmd, + unsigned short ver, + AbstractNodeInfo *sender) const { if (_apiVersionParser) - return _apiVersionParser->searchPackage(cmd, sender); + return _apiVersionParser->searchPackage(cmd, ver, sender); return nullptr; } diff --git a/src/public/abstractnode.h b/src/public/abstractnode.h index 8e8f708..50dc463 100644 --- a/src/public/abstractnode.h +++ b/src/public/abstractnode.h @@ -762,8 +762,17 @@ private: const Header &pkgHeader, AbstractNodeInfo *sender); + /** + * @brief genPackage This method generate a package from the command and version + * @param cmd this is command of the package. + * @param ver this is version of the package + * @param sender This is sender that sent this requests. + * @return empty package object. + */ QSharedPointer<PKG::AbstractData> - genPackage(unsigned short cmd, AbstractNodeInfo *sender) const; + genPackage(unsigned short cmd, + unsigned short ver, + AbstractNodeInfo *sender) const; /** @note just disaable listen method in the node objects. diff --git a/src/public/apiversionparser.cpp b/src/public/apiversionparser.cpp index 4399c13..a6d36cf 100644 --- a/src/public/apiversionparser.cpp +++ b/src/public/apiversionparser.cpp @@ -82,6 +82,7 @@ QString APIVersionParser::toString() const { QSharedPointer<PKG::AbstractData> APIVersionParser::searchPackage(unsigned short cmd, + unsigned short ver, AbstractNodeInfo *sender) const { if (!sender) return nullptr; @@ -106,7 +107,7 @@ APIVersionParser::searchPackage(unsigned short cmd, continue; } - if (auto package = parser->genPackage(cmd)) + if (auto package = parser->genPackage(cmd, ver)) return package; } diff --git a/src/public/apiversionparser.h b/src/public/apiversionparser.h index b110350..93145be 100644 --- a/src/public/apiversionparser.h +++ b/src/public/apiversionparser.h @@ -44,11 +44,14 @@ public: * @brief searchPackage This method search package recursive in all registered pararsers. Searching will be in compatibility versions. * Before search methd choose compatibly verson. * @param cmd This is command for that shold be create pacakge object. + * @param ver This is version for that shold be create pacakge object. * @param sender This is node that sent @a the cmd. * @return Package generated from cmd. */ QSharedPointer<PKG::AbstractData> - searchPackage(unsigned short cmd, AbstractNodeInfo *sender) const; + searchPackage(unsigned short cmd, + unsigned short ver, + AbstractNodeInfo *sender) const; /** * @brief getSelectedApiParser This method return apiParser for selected node diff --git a/src/public/iparser.cpp b/src/public/iparser.cpp index 8094392..b7eff41 100644 --- a/src/public/iparser.cpp +++ b/src/public/iparser.cpp @@ -69,10 +69,12 @@ void iParser::initSupportedCommands() {} QString iParser::toString() const { QString message = parserId() + " supports next commands:\n"; - for (const auto& versionsMap: _registeredTypes) { - for (auto it = versionsMap.keyBegin(); it != versionsMap.keyEnd(); ++it) { - auto pkg = genPackage(*it); - message += pkg->cmdString() + ":v" + pkg->ver() + " - " + QString::number(*it) + "\n"; + for (auto versionsMap = _registeredTypes.begin(); versionsMap != _registeredTypes.end(); ++versionsMap) { + auto cmd = versionsMap.key(); + auto versions = versionsMap.value(); + for (auto it = versions.begin(); it != versions.end(); ++it) { + auto pkg = genPackage(cmd, it.key()); + message += pkg->cmdString() + "-" + QString::number(pkg->cmd()) + ":v" + QString::number(it.key()) + "\n"; } } diff --git a/src/public/packages/bigdataheader.cpp b/src/public/packages/bigdataheader.cpp index ac0c46b..5ea658f 100644 --- a/src/public/packages/bigdataheader.cpp +++ b/src/public/packages/bigdataheader.cpp @@ -39,6 +39,7 @@ QDataStream &BigDataHeader::fromStream(QDataStream &stream) { stream >> packagesCount; stream >> _command; + stream >> _version; return stream; } @@ -48,10 +49,19 @@ QDataStream &BigDataHeader::toStream(QDataStream &stream) const { stream << packagesCount; stream << _command; + stream << _version; return stream; } +unsigned short BigDataHeader::pkgVersion() const { + return _version; +} + +void BigDataHeader::setPkgVersion(unsigned short newVersion) { + _version = newVersion; +} + unsigned short BigDataHeader::getCommand() const { return _command; } diff --git a/src/public/packages/bigdataheader.h b/src/public/packages/bigdataheader.h index 0afce2c..bfe5f10 100644 --- a/src/public/packages/bigdataheader.h +++ b/src/public/packages/bigdataheader.h @@ -60,13 +60,26 @@ public: */ void setCommand(unsigned short newCommand); + /** + * @brief pkgVersion This is version of the moving big data package. + * @return version of the moving big data package. + */ + unsigned short pkgVersion() const; + + /** + * @brief setPkgVersion This method sets new version of bid data package. + * @param newVersion This is new version + */ + void setPkgVersion(unsigned short newVersion); + protected: QDataStream &fromStream(QDataStream &stream) override; QDataStream &toStream(QDataStream &stream) const override; private: int packagesCount; - unsigned short _command; + unsigned short _command = 0; + unsigned short _version = 0; }; } }