#include "DmsAsyncAction.h" #include "dms_mq.h" #include "log/LogManager.h" #include 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) { mTimer->setSingleShot(true); mTimer->setInterval(TIMEOUT_MSEC); connect(mTimer, &QTimer::timeout, this, &DmsAsyncAction::sendTimeoutSignal); connect(mObject, ("2" + mResponseSignal).toStdString().c_str(), mTimer, SLOT(stop())); } DmsAsyncAction::~DmsAsyncAction() { //disconnect(mTimer, &QTimer::timeout, this, &DmsAsyncAction::sendTimeoutSignal); //disconnect(mObject, ("2" + mResponseSignal).toStdString().c_str(), mTimer, SLOT(stop())); } void DmsAsyncAction::setSendData(const QString& aData) { mSendData = aData; } bool DmsAsyncAction::execute() { mIsResponsed = false; QByteArray byteArray = mSendData.toUtf8(); uint8_t* data = reinterpret_cast(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)); mTimer->start(); return true; } void DmsAsyncAction::sendTimeoutSignal() { if(!mIsResponsed) { emit timeout(); } } void DmsAsyncAction::setTimeoutInterval(int aMsec) { mTimer->setInterval(aMsec); } void DmsAsyncAction::responsed() { if(mTimer->isActive()) { mIsResponsed = true; } }