move registration command metohds into iParser

This commit is contained in:
Andrei Yankovich 2022-11-05 22:42:59 +03:00
parent b588a59cb7
commit 86c5cf0308
4 changed files with 53 additions and 38 deletions

View File

@ -1136,14 +1136,6 @@ QSharedPointer<AbstractData> AbstractNode::prepareData(const Package &pkg) const
return value;
}
QSharedPointer<AbstractData> AbstractNode::genPackage(unsigned short cmd) const {
return QSharedPointer<AbstractData>(_registeredTypes.value(cmd, [](){return nullptr;})());
}
bool AbstractNode::checkCommand(unsigned short cmd) const {
return _registeredTypes.contains(cmd);
}
QList<HostAddress> AbstractNode::connectionsList() const {
QMutexLocker locer(&_connectionsMutex);

View File

@ -593,18 +593,6 @@ protected:
*/
virtual void nodeDisconnected(AbstractNodeInfo *node);
template<class T>
/**
* @brief registerPackageType This method register package type T.
* This is need to prepare pacakge for parsing in the parsePackage method.
*/
void registerPackageType() {
_registeredTypes[T::command()] = [](){
return new T();
};
};
void prepareForDelete() override;
/**
@ -615,23 +603,6 @@ protected:
*/
QSharedPointer<PKG::AbstractData> prepareData(const Package& pkg) const;
/**
* @brief genPackage This is factory method that generate data pacakge objects by command.
* All object should be registered before using this method.
* @param cmd This is command of pacakge see Header::command.
* @return shared pointer to new data object.
* @see AbstractNode::registerPackageType
* @see Header::command
*/
QSharedPointer<PKG::AbstractData> genPackage(unsigned short cmd) const ;
/**
* @brief checkCommand This method check command are if registered type or not.
* @brief cmd This is command of a verifiable package.
* @return True if the package is registered in a node.
*/
bool checkCommand(unsigned short cmd) const;
/**
* @brief connectionsList This method return list of all node connections
* @return list of node connections.
@ -794,7 +765,6 @@ private:
mutable QMutex _workersMutex;
QThreadPool *_threadPool = nullptr;
QHash<unsigned short, std::function<PKG::AbstractData*()>> _registeredTypes;
friend class WebSocketController;
friend class SocketFactory;

View File

@ -1,5 +1,7 @@
#include "iparser.h"
#include <abstractdata.h>
namespace QH {
iParser::iParser() {
@ -19,4 +21,16 @@ QString iParser::pareseResultToString(const ParserResult &parseResult) const {
}
}
const QHash<unsigned short, std::function<PKG::AbstractData *()> > &
iParser::registeredTypes() const {
return _registeredTypes;
}
QSharedPointer<PKG::AbstractData> iParser::genPackage(unsigned short cmd) const {
return QSharedPointer<PKG::AbstractData>(_registeredTypes.value(cmd, [](){return nullptr;})());
}
bool iParser::checkCommand(unsigned short cmd) const {
return _registeredTypes.contains(cmd);
}
}

View File

@ -39,6 +39,17 @@ class HEARTSHARED_EXPORT iParser
public:
iParser();
template<class T>
/**
* @brief registerPackageType This method register package type T.
* This is need to prepare pacakge for parsing in the parsePackage method.
*/
void registerPackageType() {
_registeredTypes[T::command()] = [](){
return new T();
};
};
/**
* @brief parsePackage This is main method of all childs classes of an AbstractNode class.
* This method work on own thread.
@ -153,6 +164,34 @@ public:
return QH::ParserResult::NotProcessed;
}
/**
* @brief registeredTypes This method return list of registered command.
* @return list of registered command.
* @see iParser::registerPackageType
*/
const QHash<unsigned short, std::function<PKG::AbstractData *()> > &registeredTypes() const;
/**
* @brief genPackage This is factory method that generate data pacakge objects by command.
* All object should be registered before using this method.
* @param cmd This is command of pacakge see Header::command.
* @return shared pointer to new data object.
* @see AbstractNode::registerPackageType
* @see Header::command
*/
QSharedPointer<PKG::AbstractData> genPackage(unsigned short cmd) const ;
/**
* @brief checkCommand This method check command are if registered type or not.
* @brief cmd This is command of a verifiable package.
* @return True if the package is registered in a node.
*/
bool checkCommand(unsigned short cmd) const;
private:
QHash<unsigned short, std::function<PKG::AbstractData*()>> _registeredTypes;
};