|
|
@ -88,25 +88,43 @@ void AppCore::initialize() { |
|
|
|
static string _emessage; |
|
|
|
static tp_steady lasttime; |
|
|
|
|
|
|
|
if (_ecode == ecode && _emessage== emessage && tu_steady().elapsedTimeS(lasttime) < 5) { |
|
|
|
if (_ecode == ecode && _emessage == emessage && tu_steady().elapsedTimeS(lasttime) < 5) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
_ecode = ecode; |
|
|
|
_emessage = emessage; |
|
|
|
lasttime = steady_clock::now(); |
|
|
|
// SEND_PROMPT(emessage);
|
|
|
|
lasttime = steady_clock::now(); |
|
|
|
|
|
|
|
wq->enQueue([this]() { //
|
|
|
|
sleep(5); |
|
|
|
logger->warn("AppCore::onException:{},force stop device", DS->getAppExceptionMessage()); |
|
|
|
GET_SERVICE(DeviceIoControlService)->forceStopDeviceWithoutExc(); |
|
|
|
}); |
|
|
|
|
|
|
|
insertPrompt(Prompt::createWarning(ecode2str(ecode))); |
|
|
|
onDeviceStateChange(); |
|
|
|
}); |
|
|
|
// shared_ptr<IAppEvent>
|
|
|
|
AppEventBus::ins()->onEvent.connect([this](shared_ptr<IAppEvent> event) { |
|
|
|
auto appWarningPromoptEvent = dynamic_pointer_cast<AppWarningPromoptEvent>(event); |
|
|
|
if (appWarningPromoptEvent) { |
|
|
|
insertPrompt(Prompt::createWarning(ecode2str(appWarningPromoptEvent->getEcode()))); |
|
|
|
onDeviceStateChange(); |
|
|
|
return; |
|
|
|
} |
|
|
|
auto appPromoptEvent = dynamic_pointer_cast<AppPromoptEvent>(event); |
|
|
|
if (appPromoptEvent) { |
|
|
|
insertPrompt(Prompt::createInfo(appPromoptEvent->getMessage())); |
|
|
|
onDeviceStateChange(); |
|
|
|
return; |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
void AppCore::getState(shared_ptr<MsgProcessContext> cxt) { |
|
|
|
//
|
|
|
|
auto& content = cxt->content; |
|
|
|
lock_guard<recursive_mutex> lock(warningPromptListMutex); |
|
|
|
auto& content = cxt->content; |
|
|
|
|
|
|
|
content["state"] = DS->getDeviceState(); |
|
|
|
|
|
|
@ -117,10 +135,47 @@ void AppCore::getState(shared_ptr<MsgProcessContext> cxt) { |
|
|
|
content["estate"]["ecode"] = DS->getAppExceptionCode(); |
|
|
|
content["estate"]["state"] = DS->getAppExceptionFlag(); |
|
|
|
content["estate"]["emessage"] = DS->getAppExceptionMessage(); |
|
|
|
|
|
|
|
content["promptNum"] = warningPromptList.size(); |
|
|
|
} |
|
|
|
|
|
|
|
void AppCore::loop() { |
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
*/ |
|
|
|
void AppCore::promptConfirm(shared_ptr<MsgProcessContext> cxt) { |
|
|
|
lock_guard<recursive_mutex> lock(warningPromptListMutex); |
|
|
|
string promptId = cxt->params["promptId"]; |
|
|
|
|
|
|
|
for (auto it = warningPromptList.begin(); it != warningPromptList.end(); it++) { |
|
|
|
if ((*it)->promptId == promptId) { |
|
|
|
warningPromptList.erase(it); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
GET_SERVICE(WarningLightControler)->setwarningFlag(false); |
|
|
|
} |
|
|
|
|
|
|
|
void AppCore::promptGetAll(shared_ptr<MsgProcessContext> cxt) { |
|
|
|
lock_guard<recursive_mutex> lock(warningPromptListMutex); |
|
|
|
auto content = cxt->content; |
|
|
|
content["prompts"] = json::array(); |
|
|
|
for (auto& p : warningPromptList) { |
|
|
|
content["warningPromptList"].push_back(*p); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void AppCore::promptGetNext(shared_ptr<MsgProcessContext> cxt) { |
|
|
|
lock_guard<recursive_mutex> lock(warningPromptListMutex); |
|
|
|
auto content = cxt->content; |
|
|
|
if (warningPromptList.size() > 0) { |
|
|
|
content["warningPrompt"] = *warningPromptList.front(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void AppCore::loop() {} |
|
|
|
void AppCore::onDeviceStateChange() { |
|
|
|
json content; |
|
|
|
SEND_CLASS_REPORT("AppCore", "onDeviceStateChange", content); |
|
|
|
} |
|
|
|
void AppCore::insertPrompt(shared_ptr<Prompt> prompt) { |
|
|
|
lock_guard<recursive_mutex> lock(warningPromptListMutex); |
|
|
|
warningPromptList.push_back(prompt); |
|
|
|
if (prompt->isWarning) GET_SERVICE(WarningLightControler)->setwarningFlag(true); |
|
|
|
} |