mirror of
https://github.com/QuasarApp/Heart.git
synced 2025-05-02 12:39:39 +00:00
added new macros for generate command
This commit is contained in:
parent
016b722da1
commit
99932d792c
@ -544,7 +544,7 @@ ParserResult AbstractNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
|||||||
|
|
||||||
incomingData(pkg.data(), sender);
|
incomingData(pkg.data(), sender);
|
||||||
|
|
||||||
if (H_16<Ping>() == pkg->cmd()) {
|
if (Ping::command() == pkg->cmd()) {
|
||||||
auto cmd = static_cast<Ping *>(pkg.data());
|
auto cmd = static_cast<Ping *>(pkg.data());
|
||||||
if (!cmd->ansver()) {
|
if (!cmd->ansver()) {
|
||||||
cmd->setAnsver(true);
|
cmd->setAnsver(true);
|
||||||
@ -552,14 +552,14 @@ ParserResult AbstractNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ParserResult::Processed;
|
return ParserResult::Processed;
|
||||||
} else if (H_16<BadRequest>() == pkg->cmd()) {
|
} else if (BadRequest::command() == pkg->cmd()) {
|
||||||
auto cmd = static_cast<BadRequest *>(pkg.data());
|
auto cmd = static_cast<BadRequest *>(pkg.data());
|
||||||
|
|
||||||
emit requestError(cmd->errCode(), cmd->err());
|
emit requestError(cmd->errCode(), cmd->err());
|
||||||
|
|
||||||
return ParserResult::Processed;
|
return ParserResult::Processed;
|
||||||
|
|
||||||
} else if (H_16<CloseConnection>() == pkg->cmd()) {
|
} else if (CloseConnection::command() == pkg->cmd()) {
|
||||||
|
|
||||||
if (sender->isLocal()) {
|
if (sender->isLocal()) {
|
||||||
removeNode(sender->networkAddress());
|
removeNode(sender->networkAddress());
|
||||||
@ -611,30 +611,12 @@ bool AbstractNode::sendPackage(const Package &pkg, QAbstractSocket *target) cons
|
|||||||
return _dataSender->sendData(pkg.toBytes(), target, true);
|
return _dataSender->sendData(pkg.toBytes(), target, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int AbstractNode::sendData(AbstractData *resp,
|
|
||||||
const HostAddress &addere,
|
|
||||||
const Header *req) {
|
|
||||||
|
|
||||||
return sendData(resp, getInfoPtr(addere), req);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int AbstractNode::sendData(const AbstractData *resp,
|
unsigned int AbstractNode::sendData(const AbstractData *resp,
|
||||||
const HostAddress &addere,
|
const HostAddress &addere,
|
||||||
const Header *req) {
|
const Header *req) {
|
||||||
return sendData(resp, getInfoPtr(addere), req);
|
return sendData(resp, getInfoPtr(addere), req);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int AbstractNode::sendData(PKG::AbstractData *resp,
|
|
||||||
const AbstractNodeInfo *node,
|
|
||||||
const Header *req) {
|
|
||||||
|
|
||||||
if (!resp || !resp->prepareToSend()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sendData(const_cast<const AbstractData*>(resp), node, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int AbstractNode::sendData(const PKG::AbstractData *resp,
|
unsigned int AbstractNode::sendData(const PKG::AbstractData *resp,
|
||||||
const AbstractNodeInfo *node,
|
const AbstractNodeInfo *node,
|
||||||
const Header *req) {
|
const Header *req) {
|
||||||
|
@ -321,7 +321,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// you can use parsing without the commandHandler method
|
// you can use parsing without the commandHandler method
|
||||||
if (H_16<MyCommand>() == pkg->cmd()) {
|
if (MyCommand::command() == pkg->cmd()) {
|
||||||
|
|
||||||
BaseId requesterId = getSender(sender, &obj);
|
BaseId requesterId = getSender(sender, &obj);
|
||||||
|
|
||||||
@ -371,17 +371,7 @@ protected:
|
|||||||
virtual bool sendPackage(const Package &pkg, QAbstractSocket *target) const;
|
virtual bool sendPackage(const Package &pkg, QAbstractSocket *target) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief sendData This pakcage send data package to address and prepare object to sending.
|
* @brief sendData This method send data object another to node
|
||||||
* @param resp This is pointer to sendet object.
|
|
||||||
* @param address This is target addres for sending.
|
|
||||||
* @param req This is header of request.
|
|
||||||
* @return hash of the sendet package. If function is failed then return 0.
|
|
||||||
*/
|
|
||||||
virtual unsigned int sendData(PKG::AbstractData *resp, const HostAddress& address,
|
|
||||||
const Header *req = nullptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sendData this is some as a sendData(AbstractData *resp ...) exept this method not prepare object for sending.
|
|
||||||
* @param resp This is pointer to sendet object.
|
* @param resp This is pointer to sendet object.
|
||||||
* @param address This is target addres for sending.
|
* @param address This is target addres for sending.
|
||||||
* @param req This is header of request.
|
* @param req This is header of request.
|
||||||
@ -391,17 +381,7 @@ protected:
|
|||||||
const Header *req = nullptr);
|
const Header *req = nullptr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief sendData This pakcage send data package to node object and prepare object to sending.
|
* @brief sendData This method send data object another to node
|
||||||
* @param resp This is pointer to sendet object.
|
|
||||||
* @param address This is target addres for sending.
|
|
||||||
* @param req This is header of request.
|
|
||||||
* @return hash of the sendet package. If function is failed then return 0.
|
|
||||||
*/
|
|
||||||
virtual unsigned int sendData(PKG::AbstractData *resp, const AbstractNodeInfo *node,
|
|
||||||
const Header *req = nullptr);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sendData this is some as a sendData(AbstractData *resp ...) exept this method not prepare object for sending.
|
|
||||||
* @param resp This is pointer to sendet object.
|
* @param resp This is pointer to sendet object.
|
||||||
* @param address This is target addres for sending.
|
* @param address This is target addres for sending.
|
||||||
* @param req This is header of request.
|
* @param req This is header of request.
|
||||||
@ -556,7 +536,7 @@ protected:
|
|||||||
* This is need to prepare pacakge for parsing in the parsePackage method.
|
* This is need to prepare pacakge for parsing in the parsePackage method.
|
||||||
*/
|
*/
|
||||||
void registerPackageType() {
|
void registerPackageType() {
|
||||||
_registeredTypes[H_16<T>()] = [](){
|
_registeredTypes[T::command()] = [](){
|
||||||
return new T();
|
return new T();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -628,7 +608,7 @@ protected:
|
|||||||
const QH::AbstractNodeInfo *sender,
|
const QH::AbstractNodeInfo *sender,
|
||||||
const QH::Header &pkgHeader) {
|
const QH::Header &pkgHeader) {
|
||||||
|
|
||||||
if (H_16<PackageClass>() == pkg->cmd()) {
|
if (PackageClass::command() == pkg->cmd()) {
|
||||||
auto data = pkg.staticCast<PackageClass>();
|
auto data = pkg.staticCast<PackageClass>();
|
||||||
|
|
||||||
if (!data->isValid()) {
|
if (!data->isValid()) {
|
||||||
|
@ -15,7 +15,7 @@ Header::Header() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Header::isValid() const {
|
bool Header::isValid() const {
|
||||||
return command && size && hash;
|
return command && hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Header::reset() {
|
void Header::reset() {
|
||||||
|
@ -25,19 +25,7 @@ bool Package::isValid() const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto rawint = data.mid(0, sizeof (decltype (hdr.command)));
|
return calcHash() == hdr.hash;
|
||||||
decltype (hdr.command) cmd;
|
|
||||||
memcpy(&cmd, rawint.data(), sizeof (cmd));
|
|
||||||
|
|
||||||
if (data.size() && hdr.command != cmd) {
|
|
||||||
std::reverse(rawint.begin(), rawint.end());
|
|
||||||
memcpy(&cmd, rawint.data(), sizeof (cmd));
|
|
||||||
|
|
||||||
if (hdr.command != cmd)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return static_cast<uint>(qHash(data)) == hdr.hash;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Package::reset() {
|
void Package::reset() {
|
||||||
@ -51,6 +39,14 @@ QString Package::toString() const {
|
|||||||
arg(hdr.toString()).arg(data.size()).arg(QString(data.toHex().toUpper()));
|
arg(hdr.toString()).arg(data.size()).arg(QString(data.toHex().toUpper()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int Package::calcHash() const{
|
||||||
|
QByteArray hashArray(data);
|
||||||
|
hashArray.push_back(QByteArray::fromRawData(reinterpret_cast<const char*>(&hdr.command),
|
||||||
|
sizeof (hdr.command)));
|
||||||
|
|
||||||
|
return qHash(hashArray);
|
||||||
|
}
|
||||||
|
|
||||||
QDataStream &Package::fromStream(QDataStream &stream) {
|
QDataStream &Package::fromStream(QDataStream &stream) {
|
||||||
reset();
|
reset();
|
||||||
stream.readRawData(reinterpret_cast<char*>(&hdr), sizeof(Header));
|
stream.readRawData(reinterpret_cast<char*>(&hdr), sizeof(Header));
|
||||||
|
@ -54,6 +54,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
QString toString() const;
|
QString toString() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief calcHash This method recalc hash sum for this pacakge.
|
||||||
|
* @return int32 hash of pacakge.
|
||||||
|
*/
|
||||||
|
unsigned int calcHash() const;
|
||||||
|
|
||||||
// StreamBase interface
|
// StreamBase interface
|
||||||
protected:
|
protected:
|
||||||
QDataStream &fromStream(QDataStream &stream) override;
|
QDataStream &fromStream(QDataStream &stream) override;
|
||||||
|
@ -16,41 +16,19 @@
|
|||||||
|
|
||||||
namespace QH {
|
namespace QH {
|
||||||
namespace PKG {
|
namespace PKG {
|
||||||
unsigned short AbstractData::cmd() const {
|
|
||||||
if (_cmd)
|
|
||||||
return _cmd;
|
|
||||||
|
|
||||||
return generateCmd();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractData::setCmd(unsigned short cmd) {
|
|
||||||
_cmd = cmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AbstractData::init() {
|
|
||||||
if (typeid (*this).hash_code() == typeid(AbstractData).hash_code())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
initCmd();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned short AbstractData::generateCmd() const {
|
|
||||||
return H_16(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractData::initCmd() {
|
|
||||||
setCmd(generateCmd());
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractData::AbstractData() {
|
AbstractData::AbstractData() {
|
||||||
setCmd(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractData::toPackage(Package &package,
|
bool AbstractData::toPackage(Package &package,
|
||||||
unsigned int triggerHash) const {
|
unsigned int triggerHash) const {
|
||||||
|
|
||||||
|
if (!checkCmd()) {
|
||||||
|
QuasarAppUtils::Params::log("You try send pacakge without QH_PACKAGE macross. Please add QH_PACKAGE macros to this class.",
|
||||||
|
QuasarAppUtils::Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!isValid()) {
|
if (!isValid()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -61,44 +39,38 @@ bool AbstractData::toPackage(Package &package,
|
|||||||
package.hdr.triggerHash = triggerHash;
|
package.hdr.triggerHash = triggerHash;
|
||||||
int realDataSize = package.data.size();
|
int realDataSize = package.data.size();
|
||||||
package.hdr.size = static_cast<unsigned short>(realDataSize);
|
package.hdr.size = static_cast<unsigned short>(realDataSize);
|
||||||
package.hdr.hash = qHash(package.data);
|
package.hdr.hash = package.calcHash();
|
||||||
|
|
||||||
return package.isValid();
|
return package.isValid();
|
||||||
}
|
}
|
||||||
|
|
||||||
QDataStream &AbstractData::fromStream(QDataStream &stream) {
|
QDataStream &AbstractData::fromStream(QDataStream &stream) {
|
||||||
stream >> _cmd;
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDataStream &AbstractData::toStream(QDataStream &stream) const {
|
QDataStream &AbstractData::toStream(QDataStream &stream) const {
|
||||||
stream << cmd();
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AbstractData::checkCmd() const {
|
||||||
|
unsigned int code = typeid (*this).hash_code();
|
||||||
|
return code == localCode(); \
|
||||||
|
}
|
||||||
|
|
||||||
bool AbstractData::isValid() const {
|
bool AbstractData::isValid() const {
|
||||||
return cmd();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractData::copyFrom(const AbstractData *other) {
|
bool AbstractData::copyFrom(const AbstractData *other) {
|
||||||
|
|
||||||
return other;
|
return other;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AbstractData::toString() const {
|
QString AbstractData::toString() const {
|
||||||
return QString("Object: type:%0, command:%1").
|
return QString("Object: type:%0, command:%1").
|
||||||
arg(typeid(*this).name()).
|
arg(cmdString()).
|
||||||
arg(cmd());
|
arg(cmd());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractData::prepareToSend() {
|
|
||||||
if (isValid()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return init();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractData::fromPakcage(const Package &pkg) {
|
void AbstractData::fromPakcage(const Package &pkg) {
|
||||||
fromBytes(pkg.data);
|
fromBytes(pkg.data);
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,22 @@
|
|||||||
#include <streambase.h>
|
#include <streambase.h>
|
||||||
#include <global.h>
|
#include <global.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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) \
|
||||||
|
public: \
|
||||||
|
static unsigned short command(){return qHash(QString(S)) % 0xFFFF;} \
|
||||||
|
static QString commandText(){return S;} \
|
||||||
|
unsigned short cmd() const override {return X::command();} \
|
||||||
|
QString cmdString() const override {return X::commandText();} \
|
||||||
|
protected: \
|
||||||
|
unsigned int localCode() const override {return typeid(X).hash_code();} \
|
||||||
|
\
|
||||||
|
private:
|
||||||
|
|
||||||
namespace QH {
|
namespace QH {
|
||||||
namespace PKG {
|
namespace PKG {
|
||||||
|
|
||||||
@ -49,6 +65,7 @@ protected:
|
|||||||
* \code {cpp}
|
* \code {cpp}
|
||||||
* class MyPackage: public QH::AbstractData
|
* class MyPackage: public QH::AbstractData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(MyPackage, "MyPackage")
|
||||||
...
|
...
|
||||||
bool copyFrom(const AbstractData *other) {
|
bool copyFrom(const AbstractData *other) {
|
||||||
if (!AbstractData::copyFrom(other))
|
if (!AbstractData::copyFrom(other))
|
||||||
@ -110,10 +127,20 @@ public:
|
|||||||
virtual ~AbstractData() override;
|
virtual ~AbstractData() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief cmd - This is command of this object, (for generate cmd use macross H16<ClassName>)
|
* @brief cmd - This is command of this object, (for generate cmd use macross QH_PACKAGE)
|
||||||
* @return Command of package.
|
* @note Use the QH_PACKAGE macross for implement this method.
|
||||||
|
* @return global command of package.
|
||||||
|
* @see QH_PACKAGE
|
||||||
*/
|
*/
|
||||||
unsigned short cmd() const;
|
virtual unsigned short cmd() 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.
|
||||||
|
* @return global command of package.
|
||||||
|
* @see QH_PACKAGE
|
||||||
|
*/
|
||||||
|
virtual QString cmdString() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief toPackage This method convert this class object to the package.
|
* @brief toPackage This method convert this class object to the package.
|
||||||
@ -157,12 +184,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual QString toString() const;
|
virtual QString toString() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief prepareToSend - This method check object to valid and if an object is invalid invoke method init.
|
|
||||||
* @return Return true if the object prepared for sending.
|
|
||||||
*/
|
|
||||||
bool prepareToSend();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief create - This is factory method for create a new object.
|
* @brief create - This is factory method for create a new object.
|
||||||
* @param args - List of arguments for create object.
|
* @param args - List of arguments for create object.
|
||||||
@ -171,7 +192,6 @@ public:
|
|||||||
template<class C, class... Args>
|
template<class C, class... Args>
|
||||||
C* create(Args&&... args) const {
|
C* create(Args&&... args) const {
|
||||||
C* object = new C(std::forward<Args>(args)...);
|
C* object = new C(std::forward<Args>(args)...);
|
||||||
object->generateCmd();
|
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,49 +201,42 @@ public:
|
|||||||
*/
|
*/
|
||||||
void fromPakcage(const Package& pkg);
|
void fromPakcage(const Package& pkg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief command This static method that return glaball code of this object.
|
||||||
|
* @note This method generated automaticaly in the QH_PACKAGE macross.
|
||||||
|
* @return global code
|
||||||
|
* @see QH_PACKAGE
|
||||||
|
*/
|
||||||
|
static unsigned int command(){return 0;};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief commandText This method return text of package command
|
||||||
|
* @return text of pacakge command
|
||||||
|
*/
|
||||||
|
static QString commandText(){return "NULL";};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* @brief AbstractData - Base constructor of this object.
|
* @brief AbstractData - Base constructor of this object.
|
||||||
*/
|
*/
|
||||||
explicit AbstractData();
|
explicit AbstractData();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief setCmd - Set the new value command of object.
|
* @brief localCode This method return local code
|
||||||
* @param cmd - New value.
|
* @return local command of this class. used for check QH_PACKAGE macro before send pacakge.
|
||||||
*/
|
*/
|
||||||
void setCmd(unsigned short cmd);
|
virtual unsigned int localCode() const = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Init This method need to invoke after create object for initialize all component of objects.
|
|
||||||
* @note Do not invade this method on constructor of object, because object will be initialized not correctly.
|
|
||||||
* By default implementation of object init command.
|
|
||||||
* @return True if object initialized correctly.
|
|
||||||
*/
|
|
||||||
virtual bool init();
|
|
||||||
|
|
||||||
QDataStream& fromStream(QDataStream& stream) override;
|
QDataStream& fromStream(QDataStream& stream) override;
|
||||||
QDataStream& toStream(QDataStream& stream) const override;
|
QDataStream& toStream(QDataStream& stream) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* @brief generateCmd Generate command from name of this class object.
|
* @brief checkCmd This method check QH_PACKAGE macross.
|
||||||
* @note Call this method only after create objects. Do not call in constructor of class.
|
* @return true if the QH_PACKAGE macross is enabled else fal.
|
||||||
* @return Command of object.
|
|
||||||
*/
|
*/
|
||||||
unsigned short generateCmd() const;
|
bool checkCmd() const;;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief initCmd Set cmd from class name.
|
|
||||||
* @note Call this method only after create objects. Do not call in constructor of class.
|
|
||||||
*/
|
|
||||||
void initCmd();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief cmd - Unique id of class using in Header of package for identification.
|
|
||||||
*/
|
|
||||||
unsigned short _cmd = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ struct ErrorData {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT BadRequest : public AbstractData
|
class HEARTSHARED_EXPORT BadRequest : public AbstractData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(BadRequest, "BadRequest")
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,8 +63,8 @@ public:
|
|||||||
void setErr(const QString &err);
|
void setErr(const QString &err);
|
||||||
|
|
||||||
// StreamBase interface
|
// StreamBase interface
|
||||||
QDataStream &fromStream(QDataStream &stream);
|
QDataStream &fromStream(QDataStream &stream) override;
|
||||||
QDataStream &toStream(QDataStream &stream) const;
|
QDataStream &toStream(QDataStream &stream) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief errCode This method return code of error.
|
* @brief errCode This method return code of error.
|
||||||
|
@ -19,6 +19,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT BigDataBase: public AbstractData
|
class HEARTSHARED_EXPORT BigDataBase: public AbstractData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(BigDataBase, "BigDataBase")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BigDataBase();
|
BigDataBase();
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ BigDataHeader::BigDataHeader() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool BigDataHeader::isValid() const {
|
bool BigDataHeader::isValid() const {
|
||||||
return BigDataBase::isValid() && packagesCount >= 2 && command;
|
return BigDataBase::isValid() && packagesCount >= 2 && _command;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BigDataHeader::toString() const {
|
QString BigDataHeader::toString() const {
|
||||||
@ -23,7 +23,7 @@ QString BigDataHeader::toString() const {
|
|||||||
" Packages count: " +
|
" Packages count: " +
|
||||||
QString::number(packagesCount) +
|
QString::number(packagesCount) +
|
||||||
" Packages command: " +
|
" Packages command: " +
|
||||||
QString::number(command);
|
QString::number(_command);
|
||||||
}
|
}
|
||||||
|
|
||||||
int BigDataHeader::getPackagesCount() const {
|
int BigDataHeader::getPackagesCount() const {
|
||||||
@ -38,7 +38,7 @@ QDataStream &BigDataHeader::fromStream(QDataStream &stream) {
|
|||||||
BigDataBase::fromStream(stream);
|
BigDataBase::fromStream(stream);
|
||||||
|
|
||||||
stream >> packagesCount;
|
stream >> packagesCount;
|
||||||
stream >> command;
|
stream >> _command;
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
@ -47,17 +47,17 @@ QDataStream &BigDataHeader::toStream(QDataStream &stream) const {
|
|||||||
BigDataBase::toStream(stream);
|
BigDataBase::toStream(stream);
|
||||||
|
|
||||||
stream << packagesCount;
|
stream << packagesCount;
|
||||||
stream << command;
|
stream << _command;
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned short BigDataHeader::getCommand() const {
|
unsigned short BigDataHeader::getCommand() const {
|
||||||
return command;
|
return _command;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BigDataHeader::setCommand(unsigned short newCommand) {
|
void BigDataHeader::setCommand(unsigned short newCommand) {
|
||||||
command = newCommand;
|
_command = newCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT BigDataHeader : public BigDataBase
|
class HEARTSHARED_EXPORT BigDataHeader : public BigDataBase
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(BigDataHeader, "BigDataHeader")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BigDataHeader();
|
BigDataHeader();
|
||||||
|
|
||||||
@ -64,7 +66,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int packagesCount;
|
int packagesCount;
|
||||||
unsigned short command;
|
unsigned short _command;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT BigDataPart : public BigDataBase
|
class HEARTSHARED_EXPORT BigDataPart : public BigDataBase
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(BigDataPart, "BigDataPart")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BigDataPart();
|
BigDataPart();
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT BigDataRequest: public BigDataBase
|
class HEARTSHARED_EXPORT BigDataRequest: public BigDataBase
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(BigDataRequest, "BigDataRequest")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BigDataRequest();
|
BigDataRequest();
|
||||||
|
|
||||||
@ -43,6 +45,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
int _currentPart = 0;
|
int _currentPart = 0;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT CloseConnection: public AbstractData
|
class HEARTSHARED_EXPORT CloseConnection: public AbstractData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(CloseConnection, "CloseConnection")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CloseConnection();
|
CloseConnection();
|
||||||
};
|
};
|
||||||
|
@ -20,6 +20,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT Ping: public AbstractData
|
class HEARTSHARED_EXPORT Ping: public AbstractData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(Ping, "Ping")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Ping();
|
Ping();
|
||||||
Ping(const Package& from);
|
Ping(const Package& from);
|
||||||
@ -29,7 +31,7 @@ public:
|
|||||||
* @brief isValid - Check this package if valid.
|
* @brief isValid - Check this package if valid.
|
||||||
* @return True if package is valid.
|
* @return True if package is valid.
|
||||||
*/
|
*/
|
||||||
bool isValid() const;
|
bool isValid() const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief answer This is bool value for check this object that it is answer or request.
|
* @brief answer This is bool value for check this object that it is answer or request.
|
||||||
|
@ -256,18 +256,6 @@ bool DataBaseNode::changeTrust(const QVariant &id, int diff) {
|
|||||||
return _db->changeObjects(NetworkMember{id}, action);
|
return _db->changeObjects(NetworkMember{id}, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DataBaseNode::sendData(AbstractData *resp,
|
|
||||||
const QVariant &nodeId,
|
|
||||||
const Header *req) {
|
|
||||||
|
|
||||||
|
|
||||||
if (!resp || !resp->prepareToSend()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sendData(const_cast<const AbstractData*>(resp), nodeId, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int DataBaseNode::sendData(const AbstractData *resp,
|
unsigned int DataBaseNode::sendData(const AbstractData *resp,
|
||||||
const QVariant &nodeId,
|
const QVariant &nodeId,
|
||||||
const Header *req) {
|
const Header *req) {
|
||||||
@ -290,23 +278,12 @@ unsigned int DataBaseNode::sendData(const AbstractData *resp, const HostAddress
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DataBaseNode::sendData(AbstractData *resp, const HostAddress &nodeId,
|
|
||||||
const Header *req) {
|
|
||||||
return AbstractNode::sendData(resp, nodeId, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int DataBaseNode::sendData(const PKG::AbstractData *resp,
|
unsigned int DataBaseNode::sendData(const PKG::AbstractData *resp,
|
||||||
const AbstractNodeInfo *node,
|
const AbstractNodeInfo *node,
|
||||||
const Header *req) {
|
const Header *req) {
|
||||||
return AbstractNode::sendData(resp, node, req);
|
return AbstractNode::sendData(resp, node, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DataBaseNode::sendData(PKG::AbstractData *resp,
|
|
||||||
const AbstractNodeInfo *node,
|
|
||||||
const Header *req) {
|
|
||||||
return AbstractNode::sendData(resp, node, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
ParserResult DataBaseNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
ParserResult DataBaseNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
||||||
const Header &pkgHeader,
|
const Header &pkgHeader,
|
||||||
const AbstractNodeInfo *sender) {
|
const AbstractNodeInfo *sender) {
|
||||||
@ -315,7 +292,7 @@ ParserResult DataBaseNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
|||||||
return parentResult;
|
return parentResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (H_16<WebSocket>() == pkg->cmd()) {
|
if (WebSocket::command() == pkg->cmd()) {
|
||||||
WebSocket *obj = static_cast<WebSocket*>(pkg.data());
|
WebSocket *obj = static_cast<WebSocket*>(pkg.data());
|
||||||
|
|
||||||
QVariant requesterId = getSender(sender, obj);
|
QVariant requesterId = getSender(sender, obj);
|
||||||
|
@ -211,17 +211,6 @@ protected:
|
|||||||
*/
|
*/
|
||||||
virtual bool changeTrust(const QVariant &id, int diff);
|
virtual bool changeTrust(const QVariant &id, int diff);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sendData This method is some as AbstractNode::sendData but it try send data to the id.
|
|
||||||
* This implementation prepare object to sending.
|
|
||||||
* @param resp This is sending object to the nodeId.
|
|
||||||
* @param nodeId This is id of target node.
|
|
||||||
* @param req This is header of request.
|
|
||||||
* @return true if a data send successful.
|
|
||||||
*/
|
|
||||||
virtual unsigned int sendData(PKG::AbstractData *resp, const QVariant &nodeId,
|
|
||||||
const Header *req = nullptr);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief sendData This method is some as AbstractNode::sendData but it try send data to the id.
|
* @brief sendData This method is some as AbstractNode::sendData but it try send data to the id.
|
||||||
* This implementation do not prepare object to sending.
|
* This implementation do not prepare object to sending.
|
||||||
@ -235,13 +224,9 @@ protected:
|
|||||||
|
|
||||||
unsigned int sendData(const PKG::AbstractData *resp, const HostAddress &nodeId,
|
unsigned int sendData(const PKG::AbstractData *resp, const HostAddress &nodeId,
|
||||||
const Header *req = nullptr) override;
|
const Header *req = nullptr) override;
|
||||||
unsigned int sendData(PKG::AbstractData *resp, const HostAddress &nodeId,
|
|
||||||
const Header *req = nullptr) override;
|
|
||||||
|
|
||||||
unsigned int sendData(const PKG::AbstractData *resp, const AbstractNodeInfo *node,
|
unsigned int sendData(const PKG::AbstractData *resp, const AbstractNodeInfo *node,
|
||||||
const Header *req = nullptr) override;
|
const Header *req = nullptr) override;
|
||||||
unsigned int sendData(PKG::AbstractData *resp, const AbstractNodeInfo *node,
|
|
||||||
const Header *req = nullptr) override;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief hashgenerator This method generate a hash from any value.
|
* @brief hashgenerator This method generate a hash from any value.
|
||||||
|
@ -21,6 +21,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT AbstractNetworkMember: public DBObject
|
class HEARTSHARED_EXPORT AbstractNetworkMember: public DBObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(AbstractNetworkMember, "AbstractNetworkMember")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AbstractNetworkMember();
|
AbstractNetworkMember();
|
||||||
AbstractNetworkMember(const Package& pkg);
|
AbstractNetworkMember(const Package& pkg);
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
#include <request.h>
|
#include <request.h>
|
||||||
|
|
||||||
|
|
||||||
namespace QH {
|
namespace QH {
|
||||||
|
|
||||||
|
|
||||||
@ -36,6 +35,8 @@ enum class UserRequestType: unsigned char {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT AuthRequest: public UserMember, public Request
|
class HEARTSHARED_EXPORT AuthRequest: public UserMember, public Request
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(AuthRequest, "AuthRequest")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AuthRequest();
|
AuthRequest();
|
||||||
AuthRequest(const Package& pkg);
|
AuthRequest(const Package& pkg);
|
||||||
|
@ -36,6 +36,7 @@ template <class BASE>
|
|||||||
*/
|
*/
|
||||||
class CachedDbObjectsRequest : public BASE
|
class CachedDbObjectsRequest : public BASE
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CachedDbObjectsRequest(const QString& condition) {
|
CachedDbObjectsRequest(const QString& condition) {
|
||||||
_condition = condition;
|
_condition = condition;
|
||||||
|
@ -287,8 +287,6 @@ DBObject *DBObject::cloneRaw() const {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
cloneObject->init();
|
|
||||||
|
|
||||||
return cloneObject;
|
return cloneObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,8 @@ typedef QMap<QString, DBVariant> DBVariantMap;
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT DBObject : public AbstractData, public ISubscribableData
|
class HEARTSHARED_EXPORT DBObject : public AbstractData, public ISubscribableData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(DBObject, "DBObject")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,6 +22,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT DBObjectSet: public DBObject
|
class HEARTSHARED_EXPORT DBObjectSet: public DBObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(DBObjectSet, "DBObjectSet")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DBObjectSet(const QString table);
|
DBObjectSet(const QString table);
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT DefaultPermision: public MemberPermisionObject
|
class HEARTSHARED_EXPORT DefaultPermision: public MemberPermisionObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(DefaultPermision, "DefaultPermision")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DefaultPermision();
|
DefaultPermision();
|
||||||
DefaultPermision(const PermisionData& permision);
|
DefaultPermision(const PermisionData& permision);
|
||||||
|
@ -19,6 +19,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT DeleteObject: public DBObject, public IToken
|
class HEARTSHARED_EXPORT DeleteObject: public DBObject, public IToken
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(DeleteObject, "DeleteObject")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DeleteObject();
|
DeleteObject();
|
||||||
DeleteObject(const Package& pkg);
|
DeleteObject(const Package& pkg);
|
||||||
|
@ -19,6 +19,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT GetMaxIntegerId: public DBObject
|
class HEARTSHARED_EXPORT GetMaxIntegerId: public DBObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(GetMaxIntegerId, "GetMaxIntegerId")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief GetMaxIntegerId This is default constructor of the GetMaxIntegerId class.
|
* @brief GetMaxIntegerId This is default constructor of the GetMaxIntegerId class.
|
||||||
|
@ -22,6 +22,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT GetSingleValue final: public DBObject
|
class HEARTSHARED_EXPORT GetSingleValue final: public DBObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(GetSingleValue, "GetSingleValue")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief GetSingleValue This is default constructor of the GetMaxIntegerId class.
|
* @brief GetSingleValue This is default constructor of the GetMaxIntegerId class.
|
||||||
|
@ -117,21 +117,13 @@ QString MemberPermisionObject::primaryKey() const {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MemberPermisionObject::init() {
|
|
||||||
if (!DBObject::init())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
setId(_key.hash());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PermisionData MemberPermisionObject::key() const {
|
PermisionData MemberPermisionObject::key() const {
|
||||||
return _key;
|
return _key;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MemberPermisionObject::setKey(const PermisionData &key) {
|
void MemberPermisionObject::setKey(const PermisionData &key) {
|
||||||
_key = key;
|
_key = key;
|
||||||
|
setId(_key.hash());
|
||||||
}
|
}
|
||||||
|
|
||||||
Permission MemberPermisionObject::permisions() const {
|
Permission MemberPermisionObject::permisions() const {
|
||||||
|
@ -22,6 +22,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT MemberPermisionObject: public DBObject
|
class HEARTSHARED_EXPORT MemberPermisionObject: public DBObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(MemberPermisionObject, "MemberPermisionObject")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MemberPermisionObject();
|
MemberPermisionObject();
|
||||||
MemberPermisionObject(const Package& pkg);
|
MemberPermisionObject(const Package& pkg);
|
||||||
@ -75,7 +77,6 @@ protected:
|
|||||||
QDataStream &toStream(QDataStream &stream) const override;
|
QDataStream &toStream(QDataStream &stream) const override;
|
||||||
QString condition() const override;
|
QString condition() const override;
|
||||||
QString primaryKey() const override;
|
QString primaryKey() const override;
|
||||||
bool init() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Permission _permision;
|
Permission _permision;
|
||||||
|
@ -20,6 +20,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT NetworkMember: public AbstractNetworkMember
|
class HEARTSHARED_EXPORT NetworkMember: public AbstractNetworkMember
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(NetworkMember, "NetworkMember")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NetworkMember();
|
NetworkMember();
|
||||||
NetworkMember(const QVariant& id);
|
NetworkMember(const QVariant& id);
|
||||||
|
@ -30,6 +30,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT SetSingleValue final: public DBObject
|
class HEARTSHARED_EXPORT SetSingleValue final: public DBObject
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(SetSingleValue, "SetSingleValue")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief SetSingleValue This is default constructor of the update query generator.
|
* @brief SetSingleValue This is default constructor of the update query generator.
|
||||||
|
@ -21,6 +21,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT UserMember: public AbstractNetworkMember
|
class HEARTSHARED_EXPORT UserMember: public AbstractNetworkMember
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(UserMember, "UserMember")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
UserMember();
|
UserMember();
|
||||||
UserMember(const Package &pkg);
|
UserMember(const Package &pkg);
|
||||||
|
@ -37,6 +37,8 @@ enum class WebSocketRequest {
|
|||||||
class HEARTSHARED_EXPORT WebSocket:
|
class HEARTSHARED_EXPORT WebSocket:
|
||||||
public AbstractData, public Request
|
public AbstractData, public Request
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(WebSocket, "WebSocket")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WebSocket();
|
WebSocket();
|
||||||
WebSocket(const Package& package);
|
WebSocket(const Package& package);
|
||||||
|
@ -23,6 +23,8 @@ namespace PKG {
|
|||||||
*/
|
*/
|
||||||
class HEARTSHARED_EXPORT WebSocketSubscriptions: public AbstractData
|
class HEARTSHARED_EXPORT WebSocketSubscriptions: public AbstractData
|
||||||
{
|
{
|
||||||
|
QH_PACKAGE(WebSocketSubscriptions, "WebSocketSubscriptions")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WebSocketSubscriptions();
|
WebSocketSubscriptions();
|
||||||
WebSocketSubscriptions(const Package& package);
|
WebSocketSubscriptions(const Package& package);
|
||||||
|
@ -37,7 +37,7 @@ ParserResult SingleClient::parsePackage(const QSharedPointer<PKG::AbstractData>
|
|||||||
return parentResult;
|
return parentResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (H_16<QH::PKG::UserMember>() == pkg->cmd()) {
|
if (QH::PKG::UserMember::command() == pkg->cmd()) {
|
||||||
QH::PKG::UserMember *obj = static_cast<QH::PKG::UserMember*>(pkg.data());
|
QH::PKG::UserMember *obj = static_cast<QH::PKG::UserMember*>(pkg.data());
|
||||||
|
|
||||||
if (!(obj->isValid() && obj->getSignToken().isValid())) {
|
if (!(obj->isValid() && obj->getSignToken().isValid())) {
|
||||||
@ -51,7 +51,7 @@ ParserResult SingleClient::parsePackage(const QSharedPointer<PKG::AbstractData>
|
|||||||
|
|
||||||
return QH::ParserResult::Processed;
|
return QH::ParserResult::Processed;
|
||||||
|
|
||||||
} else if (H_16<PKG::WebSocketSubscriptions>() == pkg->cmd()) {
|
} else if (PKG::WebSocketSubscriptions::command() == pkg->cmd()) {
|
||||||
PKG::WebSocketSubscriptions *obj = static_cast<PKG::WebSocketSubscriptions*>(pkg.data());
|
PKG::WebSocketSubscriptions *obj = static_cast<PKG::WebSocketSubscriptions*>(pkg.data());
|
||||||
if (!obj->isValid()) {
|
if (!obj->isValid()) {
|
||||||
return ParserResult::Error;
|
return ParserResult::Error;
|
||||||
@ -338,6 +338,16 @@ unsigned int SingleClient::sendData(PKG::AbstractData *resp,
|
|||||||
return DataBaseNode::sendData(resp, address, req);
|
return DataBaseNode::sendData(resp, address, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int SingleClient::sendData(PKG::AbstractData *resp,
|
||||||
|
const AbstractNode *node,
|
||||||
|
const Header *req) {
|
||||||
|
if (!signPackageWithToken(resp)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DataBaseNode::sendData(resp, node, req);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int SingleClient::sendData(PKG::AbstractData *resp,
|
unsigned int SingleClient::sendData(PKG::AbstractData *resp,
|
||||||
const QVariant &nodeId,
|
const QVariant &nodeId,
|
||||||
const Header *req) {
|
const Header *req) {
|
||||||
|
@ -275,13 +275,38 @@ protected:
|
|||||||
void nodeConnected(AbstractNodeInfo *node) override;
|
void nodeConnected(AbstractNodeInfo *node) override;
|
||||||
void nodeDisconnected(AbstractNodeInfo *node) override;
|
void nodeDisconnected(AbstractNodeInfo *node) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief sendData This method is wraper of default sendData method but add sign to sendet pacakge.
|
||||||
|
* @param resp This is pointer to sendet object.
|
||||||
|
* @param address This is target addres for sending.
|
||||||
|
* @param req This is header of request.
|
||||||
|
* @return hash of the sendet package. If function is failed then return 0.
|
||||||
|
*/
|
||||||
unsigned int sendData(PKG::AbstractData *resp,
|
unsigned int sendData(PKG::AbstractData *resp,
|
||||||
const HostAddress &address,
|
const HostAddress &address,
|
||||||
const Header *req = nullptr) override;
|
const Header *req = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief sendData This method is wraper of default sendData method but add sign to sendet pacakge.
|
||||||
|
* @param resp This is pointer to sendet object.
|
||||||
|
* @param address This is target addres for sending.
|
||||||
|
* @param req This is header of request.
|
||||||
|
* @return hash of the sendet package. If function is failed then return 0.
|
||||||
|
*/
|
||||||
|
unsigned int sendData(PKG::AbstractData *resp,
|
||||||
|
const AbstractNode *node,
|
||||||
|
const Header *req = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief sendData This method is wraper of default sendData method but add sign to sendet pacakge.
|
||||||
|
* @param resp This is sending object to the nodeId.
|
||||||
|
* @param nodeId This is id of target node.
|
||||||
|
* @param req This is header of request.
|
||||||
|
* @return true if a data send successful.
|
||||||
|
*/
|
||||||
unsigned int sendData(PKG::AbstractData *resp,
|
unsigned int sendData(PKG::AbstractData *resp,
|
||||||
const QVariant &nodeId,
|
const QVariant &nodeId,
|
||||||
const Header *req = nullptr) override;
|
const Header *req = nullptr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief realServerAddress This method return the real server address that connected with this node.
|
* @brief realServerAddress This method return the real server address that connected with this node.
|
||||||
|
@ -160,7 +160,7 @@ ParserResult SingleServer::parsePackage(const QSharedPointer<PKG::AbstractData>
|
|||||||
return parentResult;
|
return parentResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (H_16<QH::PKG::AuthRequest>() == pkg->cmd()) {
|
if (QH::PKG::AuthRequest::command() == pkg->cmd()) {
|
||||||
auto obj = pkg.staticCast<QH::PKG::AuthRequest>();
|
auto obj = pkg.staticCast<QH::PKG::AuthRequest>();
|
||||||
|
|
||||||
if (!obj->isValid()) {
|
if (!obj->isValid()) {
|
||||||
@ -193,7 +193,7 @@ ParserResult SingleServer::parsePackage(const QSharedPointer<PKG::AbstractData>
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
if (H_16<PKG::DeleteObject>() == pkg->cmd()) {
|
if (PKG::DeleteObject::command() == pkg->cmd()) {
|
||||||
auto obj = pkg.staticCast<PKG::DeleteObject>();
|
auto obj = pkg.staticCast<PKG::DeleteObject>();
|
||||||
|
|
||||||
auto requesterId = getSender(sender, obj.data());
|
auto requesterId = getSender(sender, obj.data());
|
||||||
|
@ -130,7 +130,7 @@ protected:
|
|||||||
return parentResult;
|
return parentResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (H_16<MyPackage>() == pkg.hdr.command) {
|
if (MyPackage::command() == pkg.hdr.command) {
|
||||||
MyPackage obj(pkg);
|
MyPackage obj(pkg);
|
||||||
|
|
||||||
// print responce of server
|
// print responce of server
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
class TestingClient: public QH::AbstractNode {
|
class TestingClient: public QH::AbstractNode {
|
||||||
|
|
||||||
|
|
||||||
// AbstractNode interface
|
// AbstractNode interface
|
||||||
public:
|
public:
|
||||||
const QH::PKG::Ping& getPing() const {
|
const QH::PKG::Ping& getPing() const {
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#define LOCAL_TEST_PORT TEST_PORT + 4
|
#define LOCAL_TEST_PORT TEST_PORT + 4
|
||||||
|
|
||||||
class BigPackage: public QH::PKG::AbstractData {
|
class BigPackage: public QH::PKG::AbstractData {
|
||||||
|
QH_PACKAGE(BigPackage, "BigPackage")
|
||||||
public:
|
public:
|
||||||
BigPackage(){
|
BigPackage(){
|
||||||
data = {};
|
data = {};
|
||||||
@ -21,7 +21,7 @@ public:
|
|||||||
|
|
||||||
// StreamBase interface
|
// StreamBase interface
|
||||||
protected:
|
protected:
|
||||||
QDataStream &fromStream(QDataStream &stream) {
|
QDataStream &fromStream(QDataStream &stream) override{
|
||||||
AbstractData::fromStream(stream);
|
AbstractData::fromStream(stream);
|
||||||
|
|
||||||
stream >> data;
|
stream >> data;
|
||||||
@ -29,7 +29,7 @@ protected:
|
|||||||
return stream;
|
return stream;
|
||||||
};
|
};
|
||||||
|
|
||||||
QDataStream &toStream(QDataStream &stream) const {
|
QDataStream &toStream(QDataStream &stream) const override{
|
||||||
AbstractData::toStream(stream);
|
AbstractData::toStream(stream);
|
||||||
|
|
||||||
stream << data;
|
stream << data;
|
||||||
@ -64,7 +64,7 @@ protected:
|
|||||||
void incomingData(const QH::PKG::AbstractData *pkg, const QH::AbstractNodeInfo *sender) override {
|
void incomingData(const QH::PKG::AbstractData *pkg, const QH::AbstractNodeInfo *sender) override {
|
||||||
Q_UNUSED(sender);
|
Q_UNUSED(sender);
|
||||||
|
|
||||||
if (pkg->cmd() == H_16<BigPackage>()) {
|
if (pkg->cmd() == BigPackage::command()) {
|
||||||
|
|
||||||
data->copy<BigPackage>(*pkg);
|
data->copy<BigPackage>(*pkg);
|
||||||
sendData(data, sender);
|
sendData(data, sender);
|
||||||
|
@ -24,8 +24,6 @@ protected:
|
|||||||
res->setTrust(0);
|
res->setTrust(0);
|
||||||
res->setId(QString(this->randomArray(5).toHex()));
|
res->setId(QString(this->randomArray(5).toHex()));
|
||||||
|
|
||||||
res->prepareToSend();
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user