#ifndef MOD_FINGERPRINT_H #define MOD_FINGERPRINT_H #include "FingerPrintFSM.h" #include "FingerPrint_server_g.h" #include "modVer.h" #ifdef RVC_OS_WIN #else #include "SpTest.h" #endif class CFingerPrintEntity; class FingerPrintServerSession : public FingerPrint::FingerPrintService_ServerSessionBase { public: FingerPrintServerSession(CFingerPrintEntity* pEntity) : m_pEntity(pEntity){} virtual ~FingerPrintServerSession(){} virtual void Handle_GetImageAndFeature(SpReqAnsContext::Pointer ctx); virtual void Handle_GetImageAndFeatureEx(SpReqAnsContext::Pointer ctx); virtual void Handle_GetFingerPrint(SpReqAnsContext::Pointer ctx); virtual void Handle_GenerateTemplate(SpReqAnsContext::Pointer ctx); virtual void Handle_CancelRegister(SpOnewayCallContext::Pointer ctx); virtual void Handle_CancelMatch(SpOnewayCallContext::Pointer ctx); virtual void Handle_GetDevInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_GetDevStatus(SpReqAnsContext::Pointer ctx); virtual void Handle_Match(SpReqAnsContext::Pointer ctx); virtual void Handle_Exit(SpOnewayCallContext::Pointer ctx); private: CFingerPrintEntity* m_pEntity; }; class CFingerPrintEntity : public CDevAdptEntityBase, public ISysVarListener { public: CFingerPrintEntity(){} virtual ~CFingerPrintEntity(){} virtual const char *GetEntityName() const { return "FingerPrint"; } virtual bool IsService() const {return true;} #ifdef RVC_OS_WIN #else virtual const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } ON_ENTITYT_TEST() #endif virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext) { LOG_FUNCTION(); ErrorCodeEnum ec = m_fsm.Init(this); DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("OnPreStart, Init:%d", ec); GetFunction()->RegistSysVarEvent("UIState", this); pTransactionContext->SendAnswer(ec); } virtual void OnPrePause(CSmartPointer pTransactionContext) { LOG_FUNCTION(); pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreContinue(CSmartPointer pTransactionContext) { LOG_FUNCTION(); pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer pTransactionContext) { LOG_FUNCTION(); m_fsm.OnExit(); pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer pTransactionContext) { //LOG_FUNCTION(); m_fsm.SelfTest(eTestType, pTransactionContext); } virtual CServerSessionBase* OnNewSession(const char* , const char * ) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("A new connecting request arrived."); m_bNewSessionInit = true; return new FingerPrintServerSession(this); } //废弃 void GetImageAndFeature(SpReqAnsContext::Pointer ctx) { //ScanEvent* e = new ScanEvent(); //e->ctx = ctx; //m_fsm.PostEventFIFO(e); LogWarn(Severity_Low, Error_Unexpect, LOG_ERR_FINGERPRINT_REQUEST_REFUSE, "web invoke GetImageAndFeature request refuse"); ctx->Answer(Error_Exception); } //废弃 void GetImageAndFeatureEx(SpReqAnsContext::Pointer ctx) { //ScanExEvent* e = new ScanExEvent(); //e->ctx = ctx; //m_fsm.PostEventFIFO(e); LogWarn(Severity_Low, Error_Unexpect, LOG_ERR_FINGERPRINT_REQUEST_REFUSE, "web invoke GetImageAndFeatureEx request refuse"); ctx->Answer(Error_Exception); } //有用:扫描指纹(73294) void GetFingerPrint(SpReqAnsContext::Pointer ctx) { if(!m_fsm.GetDevInitFlag()){ ctx->Answer(Error_DevNotAvailable); LogWarn(Severity_Middle, Error_DevNotAvailable, FingerPrint_UserErrorCode_DevOpen_Failed_Registe, "GetFingerPrint but DevOpen failed."); } else{ GetFingerEvent* e = new GetFingerEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } } //有用:生成指纹模板(161) void GenerateTemplate(SpReqAnsContext::Pointer ctx) { GenerateTemplateEvent* e = new GenerateTemplateEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } //有用:取消注册(7066) void CancelRegister(SpOnewayCallContext::Pointer ctx) { CancelRegisterEvent* e = new CancelRegisterEvent(); m_fsm.PostEventFIFO(e); } //有用:取消对比(56) void CancelMatch(SpOnewayCallContext::Pointer ctx) { CancelMatchEvent* e = new CancelMatchEvent(); m_fsm.PostEventFIFO(e); } //废弃 void CheckAndMatch(SpReqAnsContext::Pointer ctx) { //MatchEvent* e = new MatchEvent(); //e->ctx = ctx; //m_fsm.PostEventFIFO(e); LogWarn(Severity_Low, Error_Unexpect, LOG_ERR_FINGERPRINT_REQUEST_REFUSE, "web invoke CheckAndMatch request refuse"); ctx->Answer(Error_Exception); } //设备安装状态使用 void GetDevInfo(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); DevCategoryInfo devCatInfo; m_fsm.GetDevCatInfo(devCatInfo); ctx->Ans.model = devCatInfo.szModel; DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo model is:%s", (const char*)ctx->Ans.model); ctx->Ans.state = (int)m_fsm.GetDevState(); DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("GetDevInfo %d", ctx->Ans.state); if (m_fsm.GetDevInitingFlag()) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo device is opening,state return 0"); ctx->Ans.state = DEVICE_STATUS_NOT_READY; ctx->Answer(Error_NotInit, FingerPrint_UserErrorCode_DevOpen_Failed); } else { if (!m_fsm.GetDevInitFlag()) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo device is not open,state return 0"); ctx->Ans.state = DEVICE_STATUS_NOT_READY; ctx->Answer(Error_DevNotAvailable, FingerPrint_UserErrorCode_DevOpen_Failed); } else { ctx->Answer(Error_Succeed); } } } //废弃 void GetDevStatus(SpReqAnsContext::Pointer ctx) { int status = 0; m_fsm.GetCurDevState(status); ctx->Ans.status = status; DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("FingerPrint state is:%d", status); ctx->Answer(Error_Succeed); } //废弃 void Exit(SpOnewayCallContext::Pointer ctx) { FSMEvent* e = new FSMEvent(USER_EVT_EXIT); m_fsm.PostEventFIFO(e); } virtual void OnSysVarEvent(const char *pszKey, const char *pszValue, const char *pszOldValue, const char *pszEntityName); private: CFingerPrintFSM m_fsm; bool m_bNewSessionInit; }; #endif