From 663b8d8f35d9e5682e1bcefba31021056dc8b879 Mon Sep 17 00:00:00 2001 From: sunwen Date: Wed, 6 Sep 2023 18:01:48 +0800 Subject: [PATCH] Add check recon connection and restart create recon record. --- src/device/DeviceManager.cpp | 18 +++++++++++++++++- src/device/DeviceManager.h | 3 ++- src/event/EventCenter.h | 3 ++- src/forms/TopBarWidget.cpp | 8 ++++++++ src/recon/ReconClient.cpp | 18 +++++++++++++++++- src/recon/ReconClient.h | 1 + src/recon/ReconManager.cpp | 25 +++++++++++++++++++++++++ src/recon/ReconManager.h | 8 ++++++++ src/stylesheet/Dark2.css | 1 - 9 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/device/DeviceManager.cpp b/src/device/DeviceManager.cpp index ca6951e..5bfe6a5 100644 --- a/src/device/DeviceManager.cpp +++ b/src/device/DeviceManager.cpp @@ -147,7 +147,10 @@ void DeviceManager::initDevice() connect(ReconManager::getInstance(), &ReconManager::createEmptyScanResponsed, this, &DeviceManager::processReconCreateEmptyScan); connect(this, &DeviceManager::queryScanStatusToRecon, ReconManager::getInstance(), &ReconManager::queryReconStatus); connect(ReconManager::getInstance(), &ReconManager::queryReconStateResponsed, this, &DeviceManager::processReconQueryScanState); + connect(ReconManager::getInstance(), &ReconManager::restartCreatReconRecord, this, &DeviceManager::startCreateReconRecord); + connect(ReconManager::getInstance(), &ReconManager::checkReconConnectionResponsed, this, &DeviceManager::updateReconConnectionState); mReconHttpThread->start(); + QMetaObject::invokeMethod(ReconManager::getInstance(), "checkReconConnection", Qt::QueuedConnection); //init dms status--------------------make a function future if(JsonObject::Instance()->isDmsSimulator()) @@ -855,7 +858,10 @@ void DeviceManager::processTransferProgress(const QString& aProgress) } emitInfoCallback("Scan data transfer Succeeded!", MessageLevel::Sucess); emit transferStatusUpdated(); - startCreateReconRecord(); + if(ReconManager::getInstance()->isConnected()) + { + startCreateReconRecord(); + } startTransfer(); break; } @@ -973,6 +979,11 @@ void DeviceManager::initEmptyScanMeasurementID() void DeviceManager::updateReconState() { + if(!ReconManager::getInstance()->isConnected()) + { + emitInfoCallback(tr("Recon disconnected."), MessageLevel::Error); + return; + } QString sql = "SELECT ScanID FROM Scan WHERE State < 999 And State >= 300"; auto result = SQLHelper::queryValues(sql); QStringList scanIDs; @@ -1046,3 +1057,8 @@ void DeviceManager::controlDrainage(const QString& aCode) QString msg = tr("Open pump failed."); THROW_ERROR(msg); } + +void DeviceManager::updateReconConnectionState(bool aIsConnected) +{ + EventCenter::Default()->triggerEvent(ReconConnectionUpdated, nullptr, (QObject*)&aIsConnected); +} diff --git a/src/device/DeviceManager.h b/src/device/DeviceManager.h index 4820014..c2ba3a7 100644 --- a/src/device/DeviceManager.h +++ b/src/device/DeviceManager.h @@ -92,7 +92,6 @@ private: void startScan(const QString& json, bool empty = false); void startPreview(); void shutdown(); - void startCreateReconRecord(); //-----------------new DeviceStatus getDeviceStatus(); @@ -129,6 +128,8 @@ private slots: void processReconCreateEmptyScan(bool aResult, const QString& aScanID, const QString& aMessage); void processReconCreateScan(bool aResult, const QString& aScanID, const QString& aMessage); void processReconQueryScanState(bool aResult, const QVariant& aState); + void startCreateReconRecord(); + void updateReconConnectionState(bool aIsConnected); //GUI void scanTimeout(); diff --git a/src/event/EventCenter.h b/src/event/EventCenter.h index e18339f..e6d67bf 100644 --- a/src/event/EventCenter.h +++ b/src/event/EventCenter.h @@ -35,7 +35,8 @@ ADD_EVENT_VALUE(ReloadLanguage)\ ADD_EVENT_VALUE(WarnStateFlagChange)\ ADD_EVENT_VALUE(GUIErrorRaise)\ ADD_EVENT_VALUE(DeviceInfoRaise)\ -ADD_EVENT_VALUE(RequestScreenSaver) +ADD_EVENT_VALUE(RequestScreenSaver)\ +ADD_EVENT_VALUE(ReconConnectionUpdated) enum GUIEvents { #define ADD_EVENT_VALUE(val) val, diff --git a/src/forms/TopBarWidget.cpp b/src/forms/TopBarWidget.cpp index e5456b6..853b40b 100644 --- a/src/forms/TopBarWidget.cpp +++ b/src/forms/TopBarWidget.cpp @@ -43,6 +43,14 @@ TopBarWidget::TopBarWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, nowDate->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); auto linkIcon = new QLabel(this); linkIcon->setObjectName("link"); + QPixmap pixmap(":/icons/link_r.png"); + linkIcon->setPixmap(pixmap); + connect(EventCenter::Default(), &EventCenter::ReconConnectionUpdated,[linkIcon](QObject*, QObject* msg) + { + bool* isConnected = (bool*)msg; + QPixmap pixmap(*isConnected ? ":/icons/link_g.png" : ":/icons/link_r.png"); + linkIcon->setPixmap(QPixmap(pixmap)); + }); auto readyIcon = new QLabel(this); readyIcon->setObjectName("ready"); auto lockIcon = new QLabel(this); diff --git a/src/recon/ReconClient.cpp b/src/recon/ReconClient.cpp index 63e97f2..b723d00 100644 --- a/src/recon/ReconClient.cpp +++ b/src/recon/ReconClient.cpp @@ -6,6 +6,7 @@ #include namespace { const char* CREATE_URL = "/Scan/Create/"; + const char* CHECK_URL = "/v/"; const char* QUERY_SCAN_URL = "/Scan/Query/"; const char* QUERY_VERSION_URL = "/Version/"; const char* QUERY_RECON_URL = "/Task/Query/"; @@ -30,7 +31,22 @@ namespace Recon { { mHost = aHost; } - + + RequestResult ReconClient::CheckActive(){ + std::string content; + content.append("1"); + auto resp = mRequest.post(mHost+CHECK_URL,content,mHeaders); + if (resp->httpCode() == 200){ + delete resp; + return RequestResult::Success(); + } + else{ + mErrorMessage = resp->getContent(); + delete resp; + return RequestResult::Fail(mErrorMessage); + } + } + RequestResult ReconClient::Create( const Scan& aScan) { cJSON * obj = cJSON_CreateObject(); diff --git a/src/recon/ReconClient.h b/src/recon/ReconClient.h index 01fe763..0e22f7d 100644 --- a/src/recon/ReconClient.h +++ b/src/recon/ReconClient.h @@ -11,6 +11,7 @@ namespace Recon { ReconClient(std::string aCerPath, std::string aKeyPath); ~ReconClient(); void SetHost(const std::string& aHost); + RequestResult CheckActive(); RequestResult Create(const Scan& aScan); RequestResult QueryScan(const std::string& aScanID, int& state); RequestResult QueryReconID(const std::string& aScanID, std::string& aReconID); diff --git a/src/recon/ReconManager.cpp b/src/recon/ReconManager.cpp index 36173e1..530e25c 100644 --- a/src/recon/ReconManager.cpp +++ b/src/recon/ReconManager.cpp @@ -2,12 +2,14 @@ #include "ReconClient.h" #include "json/jsonobject.h" +#include #include "QDebug" namespace { const std::string CRT_FILE = "./cfgs/client.crt"; const std::string KEY_FILE = "./cfgs/client.key"; + const int CHECK_RECON_CONNECTION_TIME = 30000; std::string toReconServerAddress(const QString& aIp, const QString& aPort) { @@ -24,8 +26,12 @@ ReconManager* ReconManager::getInstance() ReconManager::ReconManager(QObject* aParent) : QObject(aParent) , mReconClient(new Recon::ReconClient(CRT_FILE, KEY_FILE)) + , mTimer(new QTimer(this)) + , mIsConnected(false) { init(); + connect(mTimer, &QTimer::timeout, this, &ReconManager::checkReconConnection); + mTimer->start(CHECK_RECON_CONNECTION_TIME); } ReconManager::~ReconManager() @@ -95,6 +101,20 @@ void ReconManager::queryReconStatus(const QStringList& aScanIDs) emit queryReconStateResponsed(true, QVariant::fromValue(result)); } +void ReconManager::checkReconConnection() +{ + auto response = mReconClient->CheckActive(); + if(mIsConnected != response.good()) + { + emit checkReconConnectionResponsed(response.good()); + } + if(mIsConnected == false && response.good()) + { + emit restartCreatReconRecord(); + } + mIsConnected = response.good(); +} + void ReconManager::setPacsSettings(const QString& aClientAETitle, const QString& aServerAETitle, const QString& aServerIP, int aServerPort) { PACSSetting settings = {aClientAETitle.toStdString(), aServerAETitle.toStdString(), aServerIP.toStdString(), aServerPort}; @@ -109,3 +129,8 @@ void ReconManager::setPacsSettings(const QString& aClientAETitle, const QString& emit setPacsSettingsResponsed(true, QVariant::fromValue(QString("Set PACS settings succeed."))); } + +bool ReconManager::isConnected() +{ + return mIsConnected; +} diff --git a/src/recon/ReconManager.h b/src/recon/ReconManager.h index 1d541fe..25c5df2 100644 --- a/src/recon/ReconManager.h +++ b/src/recon/ReconManager.h @@ -3,6 +3,8 @@ #include +class QTimer; + namespace Recon { class ReconClient; @@ -18,24 +20,30 @@ public: public: void setReconIpAndPort(const QString& aIp, const QString& aPort); + bool isConnected(); public slots: void createEmptyScan(const QString& aScanID, const QString& aPath); void createScan(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID, const QString& aPath); void queryReconStatus(const QStringList& aScanIDs); void setPacsSettings(const QString& aClientAETitle, const QString& aServerAETitle, const QString& aServerIP, int aServerPort); + void checkReconConnection(); private: void init(); signals: + void restartCreatReconRecord(); void createEmptyScanResponsed(bool aResult, const QString& aScanID, const QString& aMessage = ""); void createScanResponsed(bool aResult, const QString& aScanID, const QString& aMessage = ""); void queryReconStateResponsed(bool aResult, const QVariant& aData); void setPacsSettingsResponsed(bool aResult, const QVariant& aMessage); + void checkReconConnectionResponsed(bool aResult); private: Recon::ReconClient* mReconClient; + QTimer* mTimer; + bool mIsConnected; }; #endif // RECONMANAGER_H diff --git a/src/stylesheet/Dark2.css b/src/stylesheet/Dark2.css index b885840..3afb693 100644 --- a/src/stylesheet/Dark2.css +++ b/src/stylesheet/Dark2.css @@ -350,7 +350,6 @@ QLabel#link { max-width: 28px; min-height: 28px; max-height: 28px; - qproperty-pixmap:url(":/icons/link_g.png"); qproperty-scaledContents:true; }