Heart 1.4.918.d927d9c
Heart is base back end library for your c++ Qt projects.
Loading...
Searching...
No Matches
QuasarApp Heart

QuasarApp Heart

QuasarApp Heart - it is base backend for C++/Qt projects. This library support work with databases and work with lite network requests.

Futures

This library consists of two levels (AbstractNode level and DataBaseNode level).

  • Support ssl sockets
  • Support initialize database
  • Support work in database

Build and Include

For cmake projects

  • cd yourRepo
  • git submodule add https://github.com/QuasarApp/Heart.git # add the repository of Heart into your repo like submodule
  • git submodule update –init –recursive
  • Include in your CMakeLists.txt file the main CMakeLists.txt file of Heart library

    add_subdirectory(Heart)
  • link the Heart library to your target
    target_link_libraries(yourLib PUBLIC Heart)
  • rebuild yuor project

Usage

Create a own package class and override some basic methods.

class MyPackage: public QH::AbstractData
{
public:
MyPackage();
// override this method for validation your package class
bool isValid() const {
};
// your data for for server of client
std::string _data = "";
protected:
// StreamBase interface override this methods for serialization your package
QDataStream &fromStream(QDataStream &stream) {
stream >> _data;
return stream;
}
QDataStream &toStream(QDataStream &stream) const {
stream << _data;
return stream;
}
};
The AbstractData class is provide base functions for transport data by network For create you own pac...
bool isValid() const override
isValid This method check current object to valid.

Create your parser api class.

*
* class MyParser: public QH::iParser {
public:
MyParser(QH::AbstractNode* parentNode): QH::iParser(parentNode) {
registerPackageType<MyPackage>();
data = new BigPackage();
}
// iParser interface
public:
// override this method for processed received data.
ParserResult parsePackage(const Package &pkg,
const AbstractNodeInfo *sender) {
auto parentResult = AbstractNode::parsePackage(pkg, sender);
if (parentResult != ParserResult::NotProcessed) {
return parentResult;
}
auto result = commandHandler<MyPackage>(this, &MyClass::processMyPackage, pkg, sender, pkgHeader);
return result;
}
return ParserResult::NotProcessed;
}
bool processMyPackage(const QSharedPointer<MyPackage> &cardrequest,
const QH::AbstractNodeInfo *sender, const QH::Header &hdr) {
BaseId requesterId = getSender(sender, &cardrequest);
if (!cardrequest.isValid()) {
badRequest(sender->networkAddress(), hdr);
return ParserResult::Error;
}
cardrequest._data = "responce for client "
// responce only for servers.
sendData(cardrequest, sender->networkAddress(), &pkg.hdr);
return ParserResult::Processed;
}
// This vesion of the parser (any digital value.) .
int version() const override {return 0;};
QString parserId() const override {return "MyParser";};
};
HostAddress networkAddress() const
networkAddress This method return network address of current node or client.
The AbstractNode class - Abstract implementation of node. this implementation have a methods for send...
@ Server
This is node can works only as a public server.
The iParser class This class provide functions for parsing income packages. For yousing just override...
Definition iparser.h:51
The QH namespace - QuasarApp Heart namespace. This namespace contains all classes of the Heart librar...
Definition heart.cpp:13
@ NotProcessed
the parser does not know what to do with the package or has not finished processing it.
Definition iparser.h:39

Create a server class and add supported parsers to work with packages.

class TestingServer: public QH::AbstractNode {
Q_OBJECT
public:
TestingServer() {
addApiParser<MyParser>();
}
QH::AbstractNode::NodeType nodeType() const override {
}
};
NodeType
The NodeType enum contains types of the node. By default node contains only 3 types.

Create a client class and add supported parsers to work with packages.

class TestingClient: public QH::AbstractNode {
public:
TestingClient() {
addApiParser<MyParser>();
}
QH::AbstractNode::NodeType nodeType() const override {
}
};
@ Client
Node with this type is general clints nodes.

For more information, see our QuasarApp Heart documentation and the API reference.