#ifndef MOD_IDCERTIFICATE_H #define MOD_IDCERTIFICATE_H #ifdef RVC_OS_LINUX #include "SpTest.h" #endif #include "modVer.h" #include "IDCertFSM.h" #include "IDCertificate_server_g.h" #include "IDCertificate_UserErrorCode.h" class CIDCertEntity; class IDCertServerSession : public IDCertificate::IDCertService_ServerSessionBase { public: IDCertServerSession(CIDCertEntity* pEntity) : m_pEntity(pEntity){} virtual ~IDCertServerSession(){} virtual void Handle_CancelRead(SpOnewayCallContext::Pointer ctx); virtual void Handle_CancelReadJS(SpReqAnsContext::Pointer ctx); virtual void Handle_GetDevInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_ReadAndScanUTF8(SpReqAnsContext::Pointer ctx); //ex1 virtual void Handle_ReadAndScanUTF8JS(SpReqAnsContext::Pointer ctx); private: CIDCertEntity* m_pEntity; }; class CIDCertEntity : public CDevAdptEntityBase { public: CIDCertEntity(){} virtual ~CIDCertEntity(){} virtual const char *GetEntityName() const { return "IDCertificate"; } const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext) { LOG_FUNCTION(); ErrorCodeEnum rt = m_fsm.Init(this); pTransactionContext->SendAnswer(rt); } virtual void OnPrePause(CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreContinue(CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext) { m_fsm.OnExit(); pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer pTransactionContext) { m_fsm.SelfTest(eTestType,pTransactionContext); } virtual CServerSessionBase* OnNewSession(const char*,const char*) { return new IDCertServerSession(this); } void CancelRead(SpOnewayCallContext::Pointer ctx) { CancelReadEvent* e = new CancelReadEvent(); m_fsm.PostEventFIFO(e); } void CancelReadJS(SpReqAnsContext::Pointer ctx) //ex2 { if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed); LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.(ReadAndScanUTF8JS)"); return; } else if(!m_fsm.GetReadFlag()) { ctx->Answer(Error_Unexpect, IDCertificate_UserErrorCode_ReadAndScan_NotOnReading); return; } CancelReadEvent* e = new CancelReadEvent(); m_fsm.PostEventFIFO(e); ctx->Answer(Error_Succeed); } void ReadAndScanUTF8(SpReqAnsContext::Pointer ctx) //ex2 { if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed); LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.(ReadAndScanUTF8)"); return; } ReadAndScanUTF8Event* e = new ReadAndScanUTF8Event(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void ReadAndScanUTF8JS(SpReqAnsContext::Pointer ctx) //ex2 { if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed); LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.(ReadAndScanUTF8JS)"); return; } ReadAndScanUTF8JSEvent* e = new ReadAndScanUTF8JSEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void GetDevInfo(SpReqAnsContext::Pointer ctx) { if (m_fsm.m_bOpening) { ctx->Answer(Error_NotInit); } else if(!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed); return; } else { DevCategoryInfo devCatInfo; CSimpleStringA devType = ""; ctx->Ans.state = m_fsm.GetDevCatInfo(devCatInfo, devType); ctx->Ans.model = devCatInfo.szModel; ctx->Ans.type = devCatInfo.szType; ctx->Ans.type += ((devType == "4") ? "#IG" : "#"); ctx->Answer(Error_Succeed); return; } } virtual bool IsService()const{return true;} virtual bool IsMultiThread()const{return false;} private: CIDCertFSM m_fsm; }; #endif // MOD_IDCERTIFICATE_H