Files
GUI/src/device/DmsAsyncAction.cpp

73 lines
1.7 KiB
C++
Raw Normal View History

2023-08-21 14:22:41 +08:00
#include "DmsAsyncAction.h"
#include "dms_mq.h"
#include "log/LogManager.h"
2023-08-21 14:22:41 +08:00
#include <QTimer>
namespace
{
const int TIMEOUT_MSEC = 500;
}
DmsAsyncAction::DmsAsyncAction(int aServerId, int aActionId, QObject* aObject, const QString& aResponseSignal, QObject* aParent)
: QObject(aParent)
, mServerId(aServerId)
, mActionId(aActionId)
, mTimer(new QTimer(this))
, mObject(aObject)
, mResponseSignal(aResponseSignal)
, mSendData()
, mIsResponsed(false)
2023-08-21 14:22:41 +08:00
{
mTimer->setSingleShot(true);
2023-09-11 16:29:30 +08:00
mTimer->setInterval(TIMEOUT_MSEC);
2023-08-21 14:22:41 +08:00
connect(mTimer, &QTimer::timeout, this, &DmsAsyncAction::sendTimeoutSignal);
connect(mObject, ("2" + mResponseSignal).toStdString().c_str(), mTimer, SLOT(stop()));
}
DmsAsyncAction::~DmsAsyncAction()
{
2024-04-25 14:37:38 +08:00
//disconnect(mTimer, &QTimer::timeout, this, &DmsAsyncAction::sendTimeoutSignal);
//disconnect(mObject, ("2" + mResponseSignal).toStdString().c_str(), mTimer, SLOT(stop()));
2023-08-21 14:22:41 +08:00
}
void DmsAsyncAction::setSendData(const QString& aData)
{
mSendData = aData;
}
2023-08-21 14:22:41 +08:00
bool DmsAsyncAction::execute()
{
2024-04-25 14:37:38 +08:00
mIsResponsed = false;
2023-08-21 14:22:41 +08:00
QByteArray byteArray = mSendData.toUtf8();
uint8_t* data = reinterpret_cast<uint8_t*>(byteArray.data());
if(dmsmq_send(mServerId, mActionId, data, byteArray.size()) < 0)
{
return false;
}
LOG_SYS_OPERATION(QString("GUI -> DMS : %1-%2, Message:%3").arg(mServerId).arg(mActionId).arg(mSendData));
2023-09-11 16:29:30 +08:00
mTimer->start();
2023-08-21 14:22:41 +08:00
return true;
}
void DmsAsyncAction::sendTimeoutSignal()
{
2024-04-25 14:37:38 +08:00
if(!mIsResponsed)
{
emit timeout();
}
2023-08-21 14:22:41 +08:00
}
2023-09-11 16:29:30 +08:00
void DmsAsyncAction::setTimeoutInterval(int aMsec)
{
mTimer->setInterval(aMsec);
}
2023-09-21 17:16:46 +08:00
void DmsAsyncAction::responsed()
{
2024-04-25 14:37:38 +08:00
if(mTimer->isActive())
{
mIsResponsed = true;
}
2023-09-21 17:16:46 +08:00
}