#include "UsctStateManager.h" #include "event/EventCenter.h" #include "log/LogManager.h" #include "appvals/AppGlobalValues.h" UsctStateManager* UsctStateManager::getInstance() { static UsctStateManager instance; return &instance; } UsctStateManager::UsctStateManager(QObject* aParent) : QObject (aParent) , mState() { mState.insert(DmsState, true); mState.insert(DmsConnectionState, true); mState.insert(ReconState, true); mState.insert(ReconMppsState, true); mState.insert(ReconPacsState, true); mState.insert(ReconConnectionState, true); mState.insert(ReconEmptyScanState, true); mState.insert(ReconDBState, true); } void UsctStateManager::setState(int aStateCode, bool aState) { if(aState == mState[aStateCode]) { return; } mState[aStateCode] = aState; bool UsctState = getUsctState(); EventCenter::Default()->triggerEvent(UsctStateUpdated, nullptr, (QObject*)&UsctState); if(aState) { int msg = aStateCode; LOG_SYS_OPERATION(getStateErrorMessage(aStateCode) + " recovery.") EventCenter::Default()->triggerEvent(ErrorStateUnactive, nullptr, (QObject*)&msg); } else { QString errorMessage = getStateErrorMessage(aStateCode); LOG_SYS_OPERATION(errorMessage) QPair msg(QPair(aStateCode, errorMessage)); EventCenter::Default()->triggerEvent(ErrorStateActive, nullptr, (QObject*)&msg); switch(aStateCode) { case ReconState: { QString msg = tr("Recon fatal error."); EventCenter::Default()->triggerEvent(GUIErrorRaise, nullptr, (QObject*)&msg); break; } case ReconDBState: { QString msg = tr("Recon DB error."); EventCenter::Default()->triggerEvent(GUIErrorRaise, nullptr, (QObject*)&msg); break; } default: break; } } } bool UsctStateManager::getUsctState() { bool result = true; QMap::const_iterator it; for (it = mState.constBegin(); it != mState.constEnd(); ++it) { result = result & it.value(); } return result; } QString UsctStateManager::getStateErrorMessage(int aStateCode) { switch (aStateCode) { case DmsState : return "Dms Error"; case DmsConnectionState : return "Dms Connection Error"; case ReconState : return "Recon Fatal Error"; case ReconMppsState : return "Recon Mpps Connection Error"; case ReconPacsState : return "Recon Pacs Connection Error"; case ReconEmptyScanState : return "Recon Empty Scan Data Error"; case ReconDBState : return "Recon Database Connection Error"; case ReconConnectionState : return "Recon Connection Error"; default: return "Unknow Error"; } } void UsctStateManager::updateReconState(bool aIsConnected,int aState) { if(AppGlobalValues::InProcessing().toBool()) { return; } setState(ReconConnectionState, aIsConnected); for (int i = 0; i < 5; ++i) { int mask = 1 << i; bool result = true; if (aState & mask) { result = false; } switch(i) { case ReconState: setState(ReconState, result); break; case ReconDBState: setState(ReconDBState, result); break; case ReconPacsState: setState(ReconPacsState, result); break; case ReconMppsState: setState(ReconMppsState, result); break; case ReconEmptyScanState: setState(ReconEmptyScanState, result); if(!mIsEmptyScanUpdateing && !result) { mIsEmptyScanUpdateing = true; EventCenter::Default()->triggerEvent(EmptyScanDataCorrupted, nullptr, nullptr); } break; default: break; } } } bool UsctStateManager::getState(UsctState aStateCode) { return mState[aStateCode]; } void UsctStateManager::setEmptyScanUpdateFlag(bool aIsUpdating) { mIsEmptyScanUpdateing = aIsUpdating; }