#pragma execution_character_set("utf-8") #include "udpdatahandler.h" #include #include "common.h" #include "EasySpdLog.h" #include UdpDataHandler::UdpDataHandler(QObject *parent) : QObject(parent) , m_workerThread(new QThread()) , m_udpWorker(nullptr) , m_checkConnectTimer(new QTimer(this)) , m_connectStatus(false) , m_isSending(false) { auto ipAddr = Common::GetInstance()->getIPAddr(); auto recvPort = Common::GetInstance()->getSrcPort(); m_hostAddr.setAddress(ipAddr); m_udpWorker = new UdpSocketWorker(m_hostAddr, recvPort); m_udpWorker->moveToThread(m_workerThread); m_workerThread->start(); connect(m_udpWorker, &UdpSocketWorker::dataReceived, this, &UdpDataHandler::recvData); connect(m_checkConnectTimer, &QTimer::timeout, this, &UdpDataHandler::checkConnectSlot); m_checkConnectTimer->start(1000); } UdpDataHandler::~UdpDataHandler() { } void UdpDataHandler::sendSnId(const QString &data) { QString snMsg = QString("5901%1%2").arg(data.length()).arg(data); m_udpWorker->startSending("send_sn", snMsg.toLocal8Bit(), m_hostAddr, Common::GetInstance()->getDstPort()); } void UdpDataHandler::sendStop() { m_isSending = false; } void UdpDataHandler::sendClose() { QString msg = QString("%1%2").arg(CONSTHEAD).arg("0301"); m_udpWorker->startSending("iecs_close", msg.toLocal8Bit(), m_hostAddr, Common::GetInstance()->getDstPort()); } void UdpDataHandler::stopClose() { m_udpWorker->stopSending("iecs_close"); } void UdpDataHandler::recvData(const QByteArray &data) { if (data.size() == 0) return; QString dataStr(data); if (dataStr.mid(0, 2).toInt() != CONSTHEAD) return; int msgType = dataStr.mid(2, 2).toInt(); switch(msgType) { case SIGNAL_BEATSRC: { m_connectStatus = true; int type = dataStr.mid(6, 1).toInt(); Common::GetInstance()->setCurrentWorkMode(type); emit GetConnStatusSig(true); break; } case SIGNAL_SN: { int status = dataStr.mid(4, 3).toInt(); if (status == 11) { m_udpWorker->stopSending("send_sn"); } else { LWarn("Unknown SIGNAL_SN:{}", data); } break; } case SIGNAL_DONE: { int status = dataStr.mid(4, 2).toInt(); bool ret = dataStr.mid(6, 1).toInt(); if (status == 1) { emit GetDoneSig(ret); } QString snMsg = QString("590200"); m_udpWorker->sendData(snMsg.toLocal8Bit(), m_hostAddr, Common::GetInstance()->getDstPort()); break; } default: LWarn("Unknow message:{}", data); break; } } void UdpDataHandler::checkConnectSlot() { static int times = 0; if (!m_connectStatus) { times++; } else { times = 0; } if (times >= 3) { Common::GetInstance()->setCurrentWorkMode(-1); emit GetConnStatusSig(false); times = 0; } m_connectStatus = false; }