An open API service indexing awesome lists of open source software.

https://github.com/quasarapp/heart

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

cpp

Last synced: 8 months ago
JSON representation

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

Awesome Lists containing this project

README

          

# QuasarApp Heart

# ![QuasarApp Heart](res/Banner_Web.png)

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).

- [X] Support ssl sockets
- [X] Support initialize database
- [X] 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

```cmake
add_subdirectory(Heart)
```

* link the Heart library to your target
```cmake
target_link_libraries(yourLib PUBLIC Heart)
```
* rebuild yuor project

## Usage

Create a own package class and override some basic methods.

```cpp

class MyPackage: public QH::AbstractData
{
public:
MyPackage();

// override this method for validation your package class
bool isValid() const {
return AbstractData::isValid();
};

// 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;
}

};
```

Create your parser api class.

```cpp
*
* class MyParser: public QH::iParser {
public:
MyParser(QH::AbstractNode* parentNode): QH::iParser(parentNode) {
registerPackageType();
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(this, &MyClass::processMyPackage, pkg, sender, pkgHeader);
if (result != QH::ParserResult::NotProcessed) {
return result;
}

return ParserResult::NotProcessed;
}

bool processMyPackage(const QSharedPointer &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.
if (nodeType() == QH::AbstractNode::NodeType::Server)
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";};

};
```

Create a server class and add supported parsers to work with packages.
```cpp
class TestingServer: public QH::AbstractNode {
Q_OBJECT
public:
TestingServer() {
addApiParser();
}

QH::AbstractNode::NodeType nodeType() const override {
return QH::AbstractNode::NodeType::Server;
}
};
```

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

```cpp

class TestingClient: public QH::AbstractNode {

public:
TestingClient() {
addApiParser();
}

QH::AbstractNode::NodeType nodeType() const override {
return QH::AbstractNode::NodeType::Client;
}
};
```
For more information, see our QuasarApp Heart [Code](https://quasarapp.ddns.net:3031/docs/QuasarApp/Heart/latest/) Documentation.