Copied from ATBQT app.

Added slots requestAvailableIsmasUpdates(), sendCmdSendVersionToIsmas() and
sendUpdateInfoToIsmas().
This commit is contained in:
Gerhard Hoffmann 2023-07-14 13:24:14 +02:00
parent 9ca758ecd3
commit cd1c92a7db
2 changed files with 95 additions and 32 deletions

View File

@ -34,12 +34,9 @@ ApismClient::ApismClient(QObject *eventReceiver, ATBHMIconfig *config, Persisten
this, &ApismClient::onReceivedResponse); this, &ApismClient::onReceivedResponse);
connect(apismTcpRequestResponseClient, &ApismTcpClient::responseTimeout, connect(apismTcpRequestResponseClient, &ApismTcpClient::responseTimeout,
this, &ApismClient::onRequestResponseClientResponseTimeout); this, &ApismClient::onRequestResponseClientResponseTimeout);
connect(apismTcpSendClient, &ApismTcpClient::responseTimeout, connect(apismTcpSendClient, &ApismTcpClient::responseTimeout,
this, &ApismClient::onSendClientResponseTimeout); this, &ApismClient::onSendClientResponseTimeout);
// not needed as APISM closes the socket after we send data, so readyRead() // not needed as APISM closes the socket after we send data, so readyRead()
// might not even fire // might not even fire
// connect(&m_socket, SIGNAL(readyRead()), this, SLOT(onReadyRead())); // connect(&m_socket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
@ -53,18 +50,10 @@ ApismClient::ApismClient(QObject *eventReceiver, ATBHMIconfig *config, Persisten
ApismClient::~ApismClient() { ApismClient::~ApismClient() {
} }
void ApismClient::restartApism() {
void ApismClient::restartApism()
{
QProcess::startDetached("/bin/systemctl", {"restart", "apism"}); QProcess::startDetached("/bin/systemctl", {"restart", "apism"});
} }
//void ApismClient::onReadyRead() { // parse APISM response //void ApismClient::onReadyRead() { // parse APISM response
// QByteArray data = m_socket.readAll(); // QByteArray data = m_socket.readAll();
// qCritical() << "APISM-RESPONSE = (" << endl << data << endl << ")"; // qCritical() << "APISM-RESPONSE = (" << endl << data << endl << ")";
@ -399,6 +388,58 @@ void ApismClient::sendEvent(const ATBMachineEvent* machineEvent)
} }
void ApismClient::requestAvailableIsmasUpdates() {
QByteArray data = "#M=APISM #C=REQ_ISMASParameter #J={}";
this->currentRequest = ISMAS::REQUEST::ISMAS_PARAMETER;
this->apismTcpRequestResponseClient->sendData(data);
}
void ApismClient::sendCmdSendVersionToIsmas(QString const &msg) {
QJsonParseError parseError;
QJsonDocument document(QJsonDocument::fromJson(msg.toUtf8(), &parseError));
if (parseError.error != QJsonParseError::NoError) {
qCritical() << "INVALID JSON MSG: PARSING FAILED:"
<< parseError.error << parseError.errorString();
return;
}
if (!document.isObject()) {
qCritical() << "FILE IS NOT A JSON OBJECT!";
return;
}
QByteArray data = "#M=APISM#C=CMD_SENDVERSION#J=";
data += document.toJson(QJsonDocument::Compact);
printf("data=%s\n", QString(data).toStdString().c_str());
this->currentRequest = ISMAS::REQUEST::NO_REQUEST;
this->apismTcpSendClient->sendData(data);
}
void ApismClient::sendUpdateInfoToIsmas(QString const &msg) {
QJsonParseError parseError;
QJsonDocument document(QJsonDocument::fromJson(msg.toUtf8(), &parseError));
if (parseError.error != QJsonParseError::NoError) {
qCritical() << "INVALID JSON MSG: PARSING FAILED:"
<< parseError.error << parseError.errorString();
return;
}
if (!document.isObject()) {
qCritical() << "FILE IS NOT A JSON OBJECT!";
return;
}
QByteArray data = "#M=APISM#C=CMD_EVENT#J=";
data += document.toJson(QJsonDocument::Compact);
printf("data=%s\n", QString(data).toStdString().c_str());
this->currentRequest = ISMAS::REQUEST::NO_REQUEST;
this->apismTcpSendClient->sendData(data);
}
void ApismClient::sendState(const QString & state, const QString & msg) void ApismClient::sendState(const QString & state, const QString & msg)
{ {
@ -443,7 +484,7 @@ void ApismClient::sendState(const QString & state, const QString & msg)
#if 0
void ApismClient::sendMininformStartRequest(const VendingData* vendingData) void ApismClient::sendMininformStartRequest(const VendingData* vendingData)
{ {
this->currentRequest = ISMAS::REQUEST::START; this->currentRequest = ISMAS::REQUEST::START;
@ -467,7 +508,6 @@ void ApismClient::sendMininformStartRequest(const VendingData* vendingData)
QScopedPointer<MininFormTransferData> transferData(new MininFormTransferData()); QScopedPointer<MininFormTransferData> transferData(new MininFormTransferData());
#if 0
transferData->startAction.uid = vendingData->getParameter("START_UID").toJsonValue(); transferData->startAction.uid = vendingData->getParameter("START_UID").toJsonValue();
this->currentRequestUid = vendingData->getParameter("START_UID").toString(); this->currentRequestUid = vendingData->getParameter("START_UID").toString();
transferData->startAction.insert("UID", transferData->startAction.uid); transferData->startAction.insert("UID", transferData->startAction.uid);
@ -543,19 +583,18 @@ void ApismClient::sendMininformStopRequest(const VendingData* vendingData)
data += jsonDoc.toJson(QJsonDocument::Compact); data += jsonDoc.toJson(QJsonDocument::Compact);
this->apismTcpRequestResponseClient->sendData(data); this->apismTcpRequestResponseClient->sendData(data);
#endif
} }
#endif
void ApismClient::sendSelfTest() void ApismClient::sendSelfTest() {
{ qDebug() << "SENDING APISM-SELF-TEST";
this->currentRequest = ISMAS::REQUEST::SELF; this->currentRequest = ISMAS::REQUEST::SELF;
QByteArray data = "#M=APISM#C=REQ_SELF#J={}"; QByteArray data = "#M=APISM#C=REQ_SELF#J={}";
this->apismTcpRequestResponseClient->sendData(data); this->apismTcpRequestResponseClient->sendData(data);
} }
#if 0
void ApismClient::sendMininformPingRequest() void ApismClient::sendMininformPingRequest()
{ {
this->currentRequest = ISMAS::REQUEST::PING; this->currentRequest = ISMAS::REQUEST::PING;
@ -564,11 +603,15 @@ void ApismClient::sendMininformPingRequest()
this->apismTcpRequestResponseClient->sendData(data); this->apismTcpRequestResponseClient->sendData(data);
} }
#endif
void ApismClient::onReceivedResponse(QByteArray response) {
if (this->currentRequest == ISMAS::REQUEST::NO_REQUEST &&
response == "RECORD SAVED") { // sent by APISM to indicate that record
return; // has been saved in DB
}
void ApismClient::onReceivedResponse(QByteArray response)
{
// get the root object // get the root object
QJsonParseError jsonParseError; QJsonParseError jsonParseError;
QJsonDocument responseDoc = QJsonDocument::fromJson(response, &jsonParseError); QJsonDocument responseDoc = QJsonDocument::fromJson(response, &jsonParseError);
@ -581,11 +624,10 @@ void ApismClient::onReceivedResponse(QByteArray response)
} }
QJsonObject rootObject = responseDoc.object(); QJsonObject rootObject = responseDoc.object();
QStringList rootObjectKeys = rootObject.keys(); QStringList rootObjectKeys = rootObject.keys();
// DEBUG // DEBUG
qCritical() << "ApismClient::onReceivedResponse(): objects: " << rootObjectKeys; qDebug() << "ApismClient::onReceivedResponse(): objects: " << rootObjectKeys;
// results to: // results to:
// ApismClient::onReceivedResponse(): objects: ("REQ_START#60044_Response", "Response") // ApismClient::onReceivedResponse(): objects: ("REQ_START#60044_Response", "Response")
@ -604,6 +646,9 @@ void ApismClient::onReceivedResponse(QByteArray response)
else else
if(rootObjectKeys.indexOf(QRegularExpression("^REQ_PING.*")) >= 0) { if(rootObjectKeys.indexOf(QRegularExpression("^REQ_PING.*")) >= 0) {
this->private_handleReqPingResponse(rootObject["PING"].toObject()); this->private_handleReqPingResponse(rootObject["PING"].toObject());
} else
if(rootObjectKeys.indexOf(QRegularExpression("^REQ_ISMASPARAMETER.*")) >= 0) {
this->private_handleIsmasParameterResponse(rootObject);
} }
else { else {
qCritical() << "ApismClient::onReceivedResponse() for unknown Request: "; qCritical() << "ApismClient::onReceivedResponse() for unknown Request: ";
@ -634,6 +679,10 @@ void ApismClient::handleISMASResponseError()
case ISMAS::REQUEST::SELF: case ISMAS::REQUEST::SELF:
emit this->sendReqSelfResponse(nsApismInterface::RESULT_STATE::ERROR_BACKEND, QJsonObject()); emit this->sendReqSelfResponse(nsApismInterface::RESULT_STATE::ERROR_BACKEND, QJsonObject());
break; break;
case ISMAS::REQUEST::ISMAS_PARAMETER:
// TODO
// emit
break;
} }
this->currentRequest = ISMAS::REQUEST::NO_REQUEST; this->currentRequest = ISMAS::REQUEST::NO_REQUEST;
} }
@ -672,6 +721,8 @@ void ApismClient::onRequestResponseClientResponseTimeout()
case ISMAS::REQUEST::SELF: case ISMAS::REQUEST::SELF:
emit this->sendReqSelfResponse(nsApismInterface::RESULT_STATE::ERROR_TIMEOUT, QJsonObject()); emit this->sendReqSelfResponse(nsApismInterface::RESULT_STATE::ERROR_TIMEOUT, QJsonObject());
break; break;
case ISMAS::REQUEST::ISMAS_PARAMETER:
break;
} }
this->currentRequest = ISMAS::REQUEST::NO_REQUEST; this->currentRequest = ISMAS::REQUEST::NO_REQUEST;
@ -698,6 +749,10 @@ void ApismClient::private_handleReqPingResponse(QJsonObject response)
emit this->sendMininformPingResponse(nsApismInterface::RESULT_STATE::SUCCESS, response); emit this->sendMininformPingResponse(nsApismInterface::RESULT_STATE::SUCCESS, response);
} }
void ApismClient::private_handleIsmasParameterResponse(QJsonObject response) {
emit this->ismasResponseAvailable(response);
}
@ -722,6 +777,9 @@ QDebug operator<< (QDebug debug, ISMAS::REQUEST request)
case ISMAS::REQUEST::SELF: case ISMAS::REQUEST::SELF:
debug << QString("ISMAS::REQUEST::SELF"); debug << QString("ISMAS::REQUEST::SELF");
break; break;
case ISMAS::REQUEST::ISMAS_PARAMETER:
debug << QString("ISMAS::REQUEST::ISMASPARAMETER");
break;
} }
return debug; return debug;
} }
@ -744,6 +802,9 @@ QString& operator<< (QString& str, ISMAS::REQUEST request)
case ISMAS::REQUEST::SELF: case ISMAS::REQUEST::SELF:
str = QString("ISMAS::REQUEST::SELF"); str = QString("ISMAS::REQUEST::SELF");
break; break;
case ISMAS::REQUEST::ISMAS_PARAMETER:
str = QString("ISMAS::REQUEST::ISMASPARAMETER");
break;
} }
return str; return str;
} }

View File

@ -53,22 +53,21 @@ public:
public slots: public slots:
void sendSelfTest(); void sendSelfTest();
void sendTransaction(const VendingData* vendingData); void sendTransaction(const VendingData* vendingData);
void sendAccount(const QHash<QString, QVariant> &accountDataHash); // void sendAccount(const QHash<QString, QVariant> &accountDataHash);
void sendEvent(const ATBMachineEvent* machineEvent); //void sendEvent(const ATBMachineEvent* machineEvent);
void sendState(const QString & state, const QString & msg); void sendState(const QString & state, const QString & msg);
void sendUpdateInfoToIsmas(QString const &msg);
void sendCmdSendVersionToIsmas(QString const &msg);
void requestAvailableIsmasUpdates();
void sendMininformStartRequest(const VendingData* vendingData); //void sendMininformStartRequest(const VendingData* vendingData);
void sendMininformStopRequest(const VendingData* vendingData); //void sendMininformStopRequest(const VendingData* vendingData);
void sendMininformPingRequest(); //void sendMininformPingRequest();
void restartApism(); void restartApism();
#ifdef USE_SZEGED_START_STOP
#endif
signals: signals:
// public signals: // public signals:
void sendTransactionRespones(nsApismInterface::RESULT_STATE result); void sendTransactionRespones(nsApismInterface::RESULT_STATE result);
@ -80,6 +79,8 @@ signals:
void sendMininformPingResponse(nsApismInterface::RESULT_STATE result, QJsonObject response); void sendMininformPingResponse(nsApismInterface::RESULT_STATE result, QJsonObject response);
void sendReqSelfResponse(nsApismInterface::RESULT_STATE result, QJsonObject response); void sendReqSelfResponse(nsApismInterface::RESULT_STATE result, QJsonObject response);
void ismasResponseAvailable(QJsonObject ismasResponse);
private slots: private slots:
// void onSocketError(QAbstractSocket::SocketError socketError); // void onSocketError(QAbstractSocket::SocketError socketError);
@ -110,6 +111,7 @@ private:
void private_handlePingResponse(QJsonObject response); void private_handlePingResponse(QJsonObject response);
void private_handleReqSelfResponse(QJsonObject response); void private_handleReqSelfResponse(QJsonObject response);
void private_handleReqPingResponse(QJsonObject response); void private_handleReqPingResponse(QJsonObject response);
void private_handleIsmasParameterResponse(QJsonObject response);
void handleISMASResponseError(); void handleISMASResponseError();