123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #include "stdafx.h"
- #include "mod_vtmloader.h"
- #include "EventCode.h"
- #include "VtmLoader_UserCode.h"
- #include "publicFunExport.h"
- #include "tokenDefine.h"
- #include <thread>
- #include <SpIni.h>
- void VtmLoaderServerSession::Handle_SetTerminalNo(SpReqAnsContext<VtmLoaderService_SetTerminalNo_Req, VtmLoaderService_SetTerminalNo_Ans>::Pointer ctx)
- {
- m_pEntity->SetTerminalNo(ctx);
- }
- void VtmLoaderServerSession::Handle_NoticeAppReady(SpReqAnsContext<VtmLoaderService_NoticeAppReady_Req, VtmLoaderService_NoticeAppReady_Ans>::Pointer ctx)
- {
- //m_pEntity->NoticeAppReady(ctx);
- }
- void VtmLoaderServerSession::Handle_CheckDeviceEntity(SpReqAnsContext<VtmLoaderService_CheckDeviceEntity_Req, VtmLoaderService_CheckDeviceEntity_Ans>::Pointer ctx)
- {
- m_pEntity->CheckDeviceEntity(ctx);
- }
- void VtmLoaderServerSession::Handle_SaveTerminalNo(SpReqAnsContext<VtmLoaderService_SaveTerminalNo_Req, VtmLoaderService_SaveTerminalNo_Ans>::Pointer ctx)
- {
- m_pEntity->SaveTerminalNo(ctx);
- }
- void VtmLoaderServerSession::Handle_DealWithOldEvent(SpReqAnsContext<VtmLoaderService_DealWithOldEvent_Req, VtmLoaderService_DealWithOldEvent_Ans>::Pointer ctx)
- {
- m_pEntity->DealWithOldEvent(ctx);
- }
- void VtmLoaderServerSession::Handle_QueryLocalInfo(SpReqAnsContext<VtmLoaderService_QueryLocalInfo_Req, VtmLoaderService_QueryLocalInfo_Ans>::Pointer ctx)
- {
- m_pEntity->QueryLocalInfo(ctx);
- }
- void CVtmLoaderEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- m_FSM.Init(this);
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- ErrorCodeEnum eErrCode = pFuncPrivilege->RegistEntityStateEvent(NULL, this);//only for "HealthManager"
- if (eErrCode != Error_Succeed)
- {
- DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("RegistEntityState failed(%d).", eErrCode);
- pTransactionContext->SendAnswer(eErrCode);
- return;
- }
- pTransactionContext->SendAnswer(Error_Succeed) ;
- }
- void CVtmLoaderEntity::OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- //m_task.Close();
- m_FSM.PostExitEvent();
- pTransactionContext->SendAnswer(Error_Succeed);
- }
- void CVtmLoaderEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
- const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
- const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo)
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("dwUserCode:%x", dwUserCode);
- switch (dwUserCode) {
- case LOG_EVT_MOD_MEDIACONTROLLER_STARTED_SUCCESS:
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set MediaController entity have checked setting");
- m_FSM.SetVideoEntityOK();
- break;
- default:
- break;
- }
- }
- //only process healthmanager lost
- void CVtmLoaderEntity::OnEntityStateHook(const char* pszEntityName, const char* pszTriggerEntity, EntityStateEnum eState, EntityStateEnum eLastState)
- {
- if (_strnicmp("HealthManager", pszEntityName, strlen("HealthManager")) != 0 || eState != EntityState_Lost)
- return;
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s,eState:%d", pszEntityName, eState);
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- if (pFuncPrivilege == NULL)
- {
- DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("NoPrivilege");
- return;
- }
- switch (eState)
- {
- case EntityState_Lost:
- {
- CSimpleStringA tmpWarnMsg = CSimpleStringA::Format("%s lost. trig entity:%s,lastState:%s", pszEntityName, pszTriggerEntity, SpStrEntityState(eLastState));
- CEntityStaticInfo esi = { 0 };
- GetFunction()->GetEntityStaticInfo(pszEntityName, esi);
- //0x101 0x21D
- int iByteHigh, iByteLow;
- iByteHigh = (esi.wEntityDevelopID & 0xF00) >> 8;
- iByteLow = esi.wEntityDevelopID & 0xFF;
- if (iByteHigh < 1 || iByteHigh > 9)
- {
- DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("Unexpected entity id:%x", esi.wEntityDevelopID);
- break;
- }
- CSimpleStringA csResultCode(true);
- //实体lost的RTAxxxx的后两位xx,规则同RTAxxxx的前两位xx(实体标识码),由实体编号自动生成。健康实体本身的自定义RTAxxxx应该避开这些自定义
- //'0':0x30 'A':0x41
- if (iByteLow > 0 && iByteLow < 10)
- csResultCode = CSimpleStringA::Format("RTA51%c%c", iByteHigh + 0x30, iByteLow + 0x30);
- else
- csResultCode = CSimpleStringA::Format("RTA51%c%c", iByteHigh + 0x30, iByteLow - 10 + 0x41);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("resultcode:%s", csResultCode.GetData());
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(csResultCode.GetData())(tmpWarnMsg.GetData());
- EntityLostProcTask* task = new EntityLostProcTask(this, pszEntityName);
- GetFunction()->PostThreadPoolTask(task);
- }
- break;
- default:
- break;
- }
- }
- void CVtmLoaderEntity::EntityLostProc(CSimpleStringA entityName)
- {
- CSmartPointer<IEntityFunction> pFunc = GetFunction();
- CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
- CSmartPointer<IAsynWaitSp> spWait;
- ErrorCodeEnum eErrCode = pFuncPrivilege->TerminateEntity(entityName, spWait);
- if (eErrCode == Error_Succeed)
- {
- eErrCode = spWait->WaitAnswer(10000);
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("on lost kill wait %d", eErrCode);
- }
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("on lost kill %d", eErrCode);
- Sleep(5000);
- eErrCode = pFuncPrivilege->StartEntity(entityName, NULL, spWait);
- if (eErrCode == Error_Succeed)
- {
- eErrCode = spWait->WaitAnswer(10000);
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("on lost start wait %d", eErrCode);
- }
- else
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("on lost start %d", eErrCode);
- }
- void CVtmLoaderEntity::DealWithOldEvent(SpReqAnsContext<VtmLoaderService_DealWithOldEvent_Req, VtmLoaderService_DealWithOldEvent_Ans>::Pointer ctx)
- {
- /*
- DealWithOldEvent_Event* pEvt = new DealWithOldEvent_Event();
- pEvt->ctx = ctx;
- m_FSM.PostEventFIFO(pEvt);
- */
- static SpReqAnsContext<VtmLoaderService_DealWithOldEvent_Req, VtmLoaderService_DealWithOldEvent_Ans>::Pointer s_ctx;
- s_ctx = ctx;
- auto dealOldEventThread = [&] {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(VtmLoaderService_LogCode_DealWithOldEvent)("DealWithOldEvent called eventId, %d", s_ctx->Req.eventId);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DealWithOldEvent called reqStrRev1, %s", s_ctx->Req.reqStrRev1);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DealWithOldEvent called reqStrRev2, %s", s_ctx->Req.reqStrRev2);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DealWithOldEvent called reqIntRev1, %d", s_ctx->Req.reqIntRev1);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DealWithOldEvent called reqIntRev2, %d", s_ctx->Req.reqIntRev2);
- ErrorCodeEnum eErr = ErrorCodeEnum::Error_Succeed;
- switch (s_ctx->Req.eventId)
- {
- case EVENT_CONSOLE_REQ_SHUTDOWN_SHELL:
- LogWarn(Severity_Low, Error_Unexpect, 0x50100215, CSimpleStringA::Format("%x, reason:%s", EVENT_CONSOLE_REQ_SHUTDOWN_SHELL, s_ctx->Req.reqStrRev1.GetData()));
- GetFunction()->GetPrivilegeFunction()->Reboot(RebootTrigger_DeadForever , RebootWayEnum::RebootWay_Framework);
- break;
- case LOG_EVT_IEBROWSER_RESET_SITE_RESTART:
- GetFunction()->GetPrivilegeFunction()->Reboot(RebootTrigger_ManualLocal, RebootWayEnum::RebootWay_Framework);
- break;
- default:
- break;
- }
- s_ctx->Answer(eErr);
- };
- std::thread(dealOldEventThread).detach();
- }
- SP_BEGIN_ENTITY_MAP()
- SP_ENTITY(CVtmLoaderEntity)
- SP_END_ENTITY_MAP()
|