mirror of
https://github.com/QuasarApp/Heart.git
synced 2025-05-14 10:29:43 +00:00
fix send package method
This commit is contained in:
parent
48aa02bd7d
commit
88fd46e0c9
Heart
AbstractSpace
DataBaseSpace
@ -14,6 +14,10 @@ TcpSocket::TcpSocket(QObject *parent):
|
||||
|
||||
}
|
||||
|
||||
TcpSocket::~TcpSocket() {
|
||||
int i = 3;
|
||||
}
|
||||
|
||||
void TcpSocket::handleDisckonnetFromHost() {
|
||||
disconnectFromHost();
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ class TcpSocket: public QTcpSocket
|
||||
Q_OBJECT
|
||||
public:
|
||||
TcpSocket(QObject *parent);
|
||||
~TcpSocket();
|
||||
public slots:
|
||||
|
||||
/**
|
||||
|
@ -208,7 +208,8 @@ bool AbstractNode::removeNode(const HostAddress &nodeAdderess) {
|
||||
return true;
|
||||
} else {
|
||||
QTimer::singleShot(WAIT_CONFIRM_TIME, this,
|
||||
std::bind(&AbstractNode::handleForceRemoveNode, this, nodeAdderess));
|
||||
std::bind(&AbstractNode::handleForceRemoveNode,
|
||||
this, nodeAdderess));
|
||||
|
||||
CloseConnection close;
|
||||
return sendData(&close, nodeAdderess);
|
||||
@ -218,6 +219,24 @@ bool AbstractNode::removeNode(const HostAddress &nodeAdderess) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AbstractNode::removeNode(AbstractNodeInfo *node) {
|
||||
if (!(node && node->isValid())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (node->isLocal()) {
|
||||
node->removeSocket();
|
||||
return true;
|
||||
}
|
||||
|
||||
QTimer::singleShot(WAIT_CONFIRM_TIME, this,
|
||||
std::bind(&AbstractNode::handleForceRemoveNode,
|
||||
this, node->networkAddress()));
|
||||
|
||||
CloseConnection close;
|
||||
return sendData(&close, node);
|
||||
}
|
||||
|
||||
HostAddress AbstractNode::address() const {
|
||||
return HostAddress{serverAddress(), serverPort()};
|
||||
}
|
||||
@ -522,7 +541,7 @@ ParserResult AbstractNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
||||
auto cmd = static_cast<Ping *>(pkg.data());
|
||||
if (!cmd->ansver()) {
|
||||
cmd->setAnsver(true);
|
||||
sendData(cmd, sender->networkAddress(), &pkgHeader);
|
||||
sendData(cmd, sender, &pkgHeader);
|
||||
}
|
||||
|
||||
return ParserResult::Processed;
|
||||
@ -568,19 +587,31 @@ unsigned int AbstractNode::sendData(AbstractData *resp,
|
||||
const HostAddress &addere,
|
||||
const Header *req) {
|
||||
|
||||
if (!resp || !resp->prepareToSend()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return sendData(const_cast<const AbstractData*>(resp), addere, req);
|
||||
return sendData(resp, getInfoPtr(addere), req);
|
||||
}
|
||||
|
||||
unsigned int AbstractNode::sendData(const AbstractData *resp,
|
||||
const HostAddress &addere,
|
||||
const Header *req) {
|
||||
auto client = getInfoPtr(addere);
|
||||
return sendData(resp, getInfoPtr(addere), req);
|
||||
}
|
||||
|
||||
if (!client) {
|
||||
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,
|
||||
const AbstractNodeInfo *node,
|
||||
const Header *req) {
|
||||
|
||||
if (!node) {
|
||||
QuasarAppUtils::Params::log("Response not sent because client == null");
|
||||
return 0;
|
||||
}
|
||||
@ -603,7 +634,7 @@ unsigned int AbstractNode::sendData(const AbstractData *resp,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!sendPackage(pkg, client->sct())) {
|
||||
if (!sendPackage(pkg, node->sct())) {
|
||||
QuasarAppUtils::Params::log("Response not sent!",
|
||||
QuasarAppUtils::Error);
|
||||
return 0;
|
||||
|
@ -182,6 +182,13 @@ public:
|
||||
*/
|
||||
bool removeNode(const HostAddress& nodeAdderess);
|
||||
|
||||
/**
|
||||
* @brief removeNode - Remove node and disconnected forom node (server).
|
||||
* @param node - This is removed node (server).
|
||||
* @return true if the node removed successful. If the nde with @a nodeAdderess is not exits return false.
|
||||
*/
|
||||
bool removeNode(AbstractNodeInfo* node);
|
||||
|
||||
/**
|
||||
* @brief address - Thim method return own network address of current node (server).
|
||||
* @return The current network adderss.
|
||||
@ -380,6 +387,26 @@ protected:
|
||||
virtual unsigned int sendData(const PKG::AbstractData *resp, const HostAddress& address,
|
||||
const Header *req = nullptr);
|
||||
|
||||
/**
|
||||
* @brief sendData This pakcage send data package to node object and prepare object to sending.
|
||||
* @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 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(const PKG::AbstractData *resp, const AbstractNodeInfo *node,
|
||||
const Header *req = nullptr);
|
||||
|
||||
/**
|
||||
* @brief badRequest This method is send data about error of request.
|
||||
* @param address This is addrees of receiver.
|
||||
|
@ -46,7 +46,6 @@ void AbstractNodeInfo::removeSocket() {
|
||||
"deleteLater",
|
||||
Qt::QueuedConnection);
|
||||
|
||||
|
||||
setStatus(NodeCoonectionStatus::NotConnected);
|
||||
emit sigDisconnected(this);
|
||||
|
||||
|
@ -277,7 +277,7 @@ unsigned int DataBaseNode::sendData(const AbstractData *resp,
|
||||
for (auto it = nodes.begin(); it != nodes.end(); ++it) {
|
||||
auto info = dynamic_cast<BaseNodeInfo*>(it.value());
|
||||
if (info && info->id() == nodeId) {
|
||||
return sendData(resp, it.key(), req);
|
||||
return sendData(resp, info, req);
|
||||
}
|
||||
}
|
||||
|
||||
@ -295,6 +295,18 @@ unsigned int DataBaseNode::sendData(AbstractData *resp, const HostAddress &nodeI
|
||||
return AbstractNode::sendData(resp, nodeId, req);
|
||||
}
|
||||
|
||||
unsigned int DataBaseNode::sendData(const PKG::AbstractData *resp,
|
||||
const AbstractNodeInfo *node,
|
||||
const Header *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,
|
||||
const Header &pkgHeader,
|
||||
const AbstractNodeInfo *sender) {
|
||||
@ -316,7 +328,7 @@ ParserResult DataBaseNode::parsePackage(const QSharedPointer<AbstractData> &pkg,
|
||||
return ParserResult::Error;
|
||||
}
|
||||
|
||||
if (!workWithSubscribe(*obj, requesterId, *sender)) {
|
||||
if (!workWithSubscribe(*obj, requesterId, sender)) {
|
||||
badRequest(sender->networkAddress(), pkgHeader, {
|
||||
ErrorCodes::InvalidRequest,
|
||||
"WebSocket request is invalid"
|
||||
@ -346,7 +358,7 @@ ISqlDBCache *DataBaseNode::db() const {
|
||||
|
||||
bool DataBaseNode::workWithSubscribe(const WebSocket &rec,
|
||||
const QVariant &clientOrNodeid,
|
||||
const AbstractNodeInfo & sender) {
|
||||
const AbstractNodeInfo * sender) {
|
||||
|
||||
auto _db = db();
|
||||
if (!_db)
|
||||
@ -371,7 +383,7 @@ bool DataBaseNode::workWithSubscribe(const WebSocket &rec,
|
||||
WebSocketSubscriptions resp;
|
||||
resp.setAddresses(_webSocketWorker->list(clientOrNodeid));
|
||||
|
||||
return sendData(&resp, sender.networkAddress());
|
||||
return sendData(&resp, sender);
|
||||
}
|
||||
|
||||
default: break;
|
||||
|
@ -238,6 +238,11 @@ protected:
|
||||
unsigned int sendData(PKG::AbstractData *resp, const HostAddress &nodeId,
|
||||
const Header *req = nullptr) override;
|
||||
|
||||
unsigned int sendData(const PKG::AbstractData *resp, const AbstractNodeInfo *node,
|
||||
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.
|
||||
* Override this method for set your custom salt.
|
||||
@ -420,7 +425,7 @@ private:
|
||||
*/
|
||||
bool workWithSubscribe(const PKG::WebSocket &rec,
|
||||
const QVariant &clientOrNodeid,
|
||||
const AbstractNodeInfo &sender);
|
||||
const AbstractNodeInfo *sender);
|
||||
|
||||
|
||||
bool isForbidenTable(const QString& table);
|
||||
|
Loading…
x
Reference in New Issue
Block a user