From f0bfabbe17ce8fc778add1ecabb57dc7b1964ef3 Mon Sep 17 00:00:00 2001 From: EndrII Date: Sat, 3 Dec 2022 21:58:50 +0300 Subject: [PATCH] simple fixes --- src/public/abstractnode.cpp | 10 ++++++++++ src/public/abstractnode.h | 21 ++++++++++++++++++++- src/public/abstractnodeinfo.cpp | 9 +++++++++ src/public/abstractnodeinfo.h | 18 ++++++++++++++++-- src/public/apiversionparser.cpp | 17 +++++++++++++++++ src/public/apiversionparser.h | 12 ++++++++++++ 6 files changed, 84 insertions(+), 3 deletions(-) diff --git a/src/public/abstractnode.cpp b/src/public/abstractnode.cpp index 98bcf56..fe6e49d 100644 --- a/src/public/abstractnode.cpp +++ b/src/public/abstractnode.cpp @@ -140,6 +140,16 @@ bool AbstractNode::run(const QString &addres, unsigned short port) { return true; } +QSharedPointer AbstractNode::selectParser(unsigned short cmd, + AbstractNodeInfo *sender) { + return _apiVersionParser->selectParser(cmd, sender); +} + +QSharedPointer AbstractNode::selectParser(const QString &type, + AbstractNodeInfo *sender) { + return _apiVersionParser->selectParser(type, sender); +} + void AbstractNode::stop() { close(); diff --git a/src/public/abstractnode.h b/src/public/abstractnode.h index 71757e9..4674e81 100644 --- a/src/public/abstractnode.h +++ b/src/public/abstractnode.h @@ -153,6 +153,23 @@ public: */ virtual bool run(const QString& addres, unsigned short port); + /** + * @brief selectParser This method select parser by command and sender. + * @param cmd this is command that need to parse. + * @param sender this is node that sent this command. + * @return parser for the @a cmd command + */ + QSharedPointer selectParser(unsigned short cmd, + AbstractNodeInfo *sender); + + /** + * @brief selectParser This method select parser by command and sender. + * @param cmd this is command that need to parse. + * @param sender this is node that sent this command. + * @return parser for the @a cmd command + */ + QSharedPointer selectParser(const QString& type, + AbstractNodeInfo *sender); /** * @brief stop - Stopped this node and close all network connections. @@ -750,7 +767,9 @@ private: TaskScheduler *_tasksheduller = nullptr; APIVersionParser *_apiVersionParser = nullptr; - QHash>> _connectActions; + QHash>> _connectActions; QSet*> _workers; diff --git a/src/public/abstractnodeinfo.cpp b/src/public/abstractnodeinfo.cpp index 37a7880..37a4179 100644 --- a/src/public/abstractnodeinfo.cpp +++ b/src/public/abstractnodeinfo.cpp @@ -229,9 +229,18 @@ QSharedPointer AbstractNodeInfo::getParser(unsigned short cmd) { return _parsersMap.value(cmd, nullptr); } +QSharedPointer AbstractNodeInfo::getParser(const QString &type) { + return _parsersKeysMap.value(type, nullptr); +} + void QH::AbstractNodeInfo::addParser(unsigned short cmd, QSharedPointer parser) { _parsersMap[cmd] = parser; + _parsersKeysMap[parser->parserId()] = parser; +} + +void AbstractNodeInfo::addParser(QSharedPointer parser) { + _parsersKeysMap[parser->parserId()] = parser; } uint qHash(NodeCoonectionStatus status) { diff --git a/src/public/abstractnodeinfo.h b/src/public/abstractnodeinfo.h index e050328..bb1f568 100644 --- a/src/public/abstractnodeinfo.h +++ b/src/public/abstractnodeinfo.h @@ -236,14 +236,27 @@ public: */ QSharedPointer getParser(unsigned short cmd); + /** + * @brief getParser This method return parser of choosed command. + * @param type This is type of api parser. + * @return parser by type. + */ + QSharedPointer getParser(const QString& type); + /** * @brief addParser This method add to cache new parser for command . - * @param cmd - * @param parser + * @param cmd This is any command that support this parser. + * @param parser This is added parser. * @note All parsers will be removed after reconnect of this node. */ void addParser(unsigned short cmd, QSharedPointer parser); + /** + * @brief addParser This method add to cache new parser for command . + * @param parser This is added parser. + * @note All parsers will be removed after reconnect of this node. + */ + void addParser(QSharedPointer parser); public slots: /** @@ -318,6 +331,7 @@ private: bool _isLocal = false; QHash> _parsersMap; + QHash> _parsersKeysMap; VersionData _version; bool _fVersionReceived = false; diff --git a/src/public/apiversionparser.cpp b/src/public/apiversionparser.cpp index b297671..e93b16f 100644 --- a/src/public/apiversionparser.cpp +++ b/src/public/apiversionparser.cpp @@ -192,6 +192,16 @@ QSharedPointer APIVersionParser::selectParser(unsigned short cmd, return parser; } +QSharedPointer APIVersionParser::selectParser(const QString &parserKey, + AbstractNodeInfo *sender) { + auto parser = sender->getParser(parserKey); + if (!parser) { + parser = selectParserImpl(parserKey, sender); + } + + return parser; +} + QSharedPointer APIVersionParser::selectParserImpl(unsigned short cmd, AbstractNodeInfo *sender) { auto version = sender->version(); @@ -206,6 +216,13 @@ QSharedPointer APIVersionParser::selectParserImpl(unsigned short cmd, return nullptr; } +QSharedPointer APIVersionParser::selectParserImpl(const QString &key, AbstractNodeInfo *sender) { + auto version = sender->version(); + auto parser = selectParser(version).value(key); + sender->addParser(parser); + + return parser; +} unsigned short APIVersionParser::maximumApiVersion(const QString &apiKey) const { diff --git a/src/public/apiversionparser.h b/src/public/apiversionparser.h index bd1308b..fc6a558 100644 --- a/src/public/apiversionparser.h +++ b/src/public/apiversionparser.h @@ -84,6 +84,15 @@ public: QSharedPointer selectParser(unsigned short cmd, AbstractNodeInfo *sender); + /** + * @brief selectParser This method select parser by command and sender. + * @param parserKey this is key of the parser type.. + * @param sender this is node that sent this command. + * @return parser for the @a cmd command + */ + QSharedPointer selectParser(const QString& parserKey, + AbstractNodeInfo *sender); + /** * @brief maximumApiVersion This method return maximum supported api version of this node. * @param apiKey This is api key. @@ -119,6 +128,9 @@ private: QSharedPointer selectParserImpl(unsigned short cmd, AbstractNodeInfo *sender); + QSharedPointer + selectParserImpl(const QString& key, AbstractNodeInfo *sender); + bool processAppVersion(const QSharedPointer &message, AbstractNodeInfo *sender, const QH::Header &);