Skip to content

Commit 7770007

Browse files
authored
Merge pull request #60 from QuasarApp/task_57
update documentation
2 parents 774bf25 + d7e04ce commit 7770007

File tree

11 files changed

+194
-262
lines changed

11 files changed

+194
-262
lines changed

HeartTests/units/abstractnodetest.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ class TestingClient: public QH::AbstractNode {
2222
return _ping;
2323
}
2424

25+
NodeType nodeType() const override {
26+
return NodeType::Node;
27+
};
28+
2529
protected slots:
2630
void receivePing(const QSharedPointer<QH::PKG::Ping>& ping) override {
2731
_ping = *ping;

HeartTests/units/bigdatatest.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ class TestingClientBigData: public QH::AbstractNode {
8989
_parser = addApiParser<BigDataTestParser>();
9090
}
9191

92+
NodeType nodeType() const override {
93+
return NodeType::Node;
94+
};
95+
9296
const QSharedPointer<QH::iParser>& parser() const {
9397
return _parser;
9498
}

HeartTests/units/shedullertest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ class ShedullerestNode: public QH::AbstractNode {
1818
public:
1919
quint64 executedTime = 0;
2020

21+
22+
// AbstractNode interface
23+
public:
24+
NodeType nodeType() const override {
25+
return NodeType::Node;
26+
};
2127
};
2228

2329
class TestTask: public QH::AbstractTask {

README.md

Lines changed: 75 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,7 @@ This library consists of two levels (AbstractNode level and DataBaseNode level).
1010
- [X] Support ssl sockets
1111
- [X] Support initialize database
1212
- [X] Support work in database
13-
- [ ] Support decentralized network mode
1413

15-
### AbstractNode level (0)
16-
#### Description
17-
The AbstractNode level implement only base functions of create a new work threads and parsing packages.
18-
For more information see QuasarApp Heart documentation, QH namespace.
19-
20-
### DataBaseNode level (1)
21-
#### Description
22-
The DataBaseNode level implement methods and packages for work with databases. This level using Qt classes for wrking with database, so for more information about suport databases see [Qt Documentation](https://doc.qt.io/qt-5/sql-driver.html).
23-
24-
### NetworkNode level (2)
25-
#### Description
26-
This level is still in develop.
2714

2815
## Build and Include
2916
### For cmake projects
@@ -32,13 +19,11 @@ This level is still in develop.
3219
* git submodule add https://github.com/QuasarApp/Heart.git # add the repository of Heart into your repo like submodule
3320
* git submodule update --init --recursive
3421
* Include in your CMakeLists.txt file the main CMakeLists.txt file of Heart library
35-
``` cmake
22+
23+
```cmake
3624
add_subdirectory(Heart)
3725
```
38-
* select requiriment build level for you project
39-
```
40-
set(HEART_BUILD_LVL 2)
41-
```
26+
4227
where 1 - is code of build level
4328
4429
1 - AbstractNode
@@ -57,6 +42,7 @@ This level is still in develop.
5742
## Usage
5843
5944
Create a own package class and override some basic methods.
45+
6046
```cpp
6147
6248
class MyPackage: public QH::AbstractData
@@ -67,105 +53,110 @@ public:
6753
// override this method for validation your package class
6854
bool isValid() const {
6955
return AbstractData::isValid();
70-
}; /
56+
};
7157
7258
// your data for for server of client
7359
std::string _data = "";
7460
7561
protected:
7662
// StreamBase interface override this methods for serialization your package
7763
QDataStream &fromStream(QDataStream &stream) {
78-
AbstractData::fromStream(stream);
7964
stream >> _data;
8065
return stream;
8166
}
8267
QDataStream &toStream(QDataStream &stream) const {
83-
AbstractData::toStream(stream);
8468
stream << _data;
8569
return stream;
8670
}
8771
8872
};
8973
```
9074

91-
Create a server class and override parsePackage method for work with packages.
75+
Create your parser api class.
76+
77+
```cpp
78+
*
79+
* class MyParser: public QH::iParser {
80+
public:
81+
MyParser(QH::AbstractNode* parentNode): QH::iParser(parentNode) {
82+
registerPackageType<MyPackage>();
83+
data = new BigPackage();
84+
}
85+
86+
// iParser interface
87+
public:
88+
89+
// override this method for processed received data.
90+
ParserResult parsePackage(const Package &pkg,
91+
const AbstractNodeInfo *sender) {
92+
93+
auto parentResult = AbstractNode::parsePackage(pkg, sender);
94+
if (parentResult != ParserResult::NotProcessed) {
95+
return parentResult;
96+
}
97+
98+
auto result = commandHandler<MyPackage>(this, &MyClass::processMyPackage, pkg, sender, pkgHeader);
99+
if (result != QH::ParserResult::NotProcessed) {
100+
return result;
101+
}
102+
103+
return ParserResult::NotProcessed;
104+
}
105+
106+
bool processMyPackage(const QSharedPointer<MyPackage> &cardrequest,
107+
const QH::AbstractNodeInfo *sender, const QH::Header &hdr) {
108+
109+
BaseId requesterId = getSender(sender, &cardrequest);
110+
111+
if (!cardrequest.isValid()) {
112+
badRequest(sender->networkAddress(), hdr);
113+
return ParserResult::Error;
114+
}
115+
116+
cardrequest._data = "responce for client "
117+
118+
// responce only for servers.
119+
if (nodeType() == QH::AbstractNode::NodeType::Server)
120+
sendData(cardrequest, sender->networkAddress(), &pkg.hdr);
121+
122+
return ParserResult::Processed;
123+
}
124+
125+
// This vesion of the parser (any digital value.) .
126+
int version() const override {return 0;};
127+
QString parserId() const override {return "MyParser";};
128+
129+
};
130+
```
131+
132+
Create a server class and add supported parsers to work with packages.
92133
```cpp
93134
class TestingServer: public QH::AbstractNode {
94-
Q_OBJECT
135+
Q_OBJECT
95136
public:
96137
TestingServer() {
97-
registerPackageType<MyPackage>();
98-
}
99-
100-
protected:
101-
// override this method for processed received data.
102-
ParserResult parsePackage(const Package &pkg,
103-
const AbstractNodeInfo *sender) {
104-
105-
auto parentResult = AbstractNode::parsePackage(pkg, sender);
106-
if (parentResult != ParserResult::NotProcessed) {
107-
return parentResult;
108-
}
109-
110-
auto result = commandHandler<MyPackage>(this, &MyClass::processMyPackage, pkg, sender, pkgHeader);
111-
if (result != QH::ParserResult::NotProcessed) {
112-
return result;
113-
}
114-
115-
return ParserResult::NotProcessed;
138+
addApiParser<MyParser>();
116139
}
117-
118-
bool processMyPackage(const QSharedPointer<MyPackage> &cardrequest,
119-
const QH::AbstractNodeInfo *sender, const QH::Header &hdr) {
120-
121-
BaseId requesterId = getSender(sender, &cardrequest);
122-
123-
if (!cardrequest.isValid()) {
124-
badRequest(sender->networkAddress(), hdr);
125-
return ParserResult::Error;
126-
}
127-
128-
cardrequest._data = "responce for client "
129-
130-
SendData(cardrequest, sender->networkAddress(), &pkg.hdr);
131-
return ParserResult::Processed;
140+
141+
QH::AbstractNode::NodeType nodeType() const override {
142+
return QH::AbstractNode::NodeType::Server;
132143
}
133144
};
134145
```
135146

136-
Create a client class and override parsePackage method for work with packages.
147+
Create a client class and add supported parsers to work with packages.
137148

138149
```cpp
139150

140151
class TestingClient: public QH::AbstractNode {
141152

142-
143-
protected:
144-
// parsing incoming packages
145-
ParserResult parsePackage(const Package &pkg,
146-
const AbstractNodeInfo *sender) {
147-
148-
auto parentResult = AbstractNode::parsePackage(pkg, sender);
149-
if (parentResult != ParserResult::NotProcessed) {
150-
return parentResult;
151-
}
152-
153-
if (MyPackage::command() == pkg.hdr.command) {
154-
MyPackage obj(pkg);
155-
156-
// print responce of server
157-
std::cout << obj._data;
158-
...
159-
return ParserResult::Processed;
160-
}
161-
// Do not forget return status of parsing packages
162-
return ParserResult::NotProcessed;
163-
153+
public:
154+
TestingClient() {
155+
addApiParser<MyParser>();
164156
}
165-
// sending request to server
166-
bool sendMyPackage() {
167-
Ping cmd;
168-
return sendData(&cmd, address);
157+
158+
QH::AbstractNode::NodeType nodeType() const override {
159+
return QH::AbstractNode::NodeType::Client;
169160
}
170161
};
171162
```

0 commit comments

Comments
 (0)