mod_IDCertificate.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #ifndef MOD_IDCERTIFICATE_H
  2. #define MOD_IDCERTIFICATE_H
  3. #ifdef RVC_OS_LINUX
  4. #include "SpTest.h"
  5. #endif
  6. #include "modVer.h"
  7. #include "IDCertFSM.h"
  8. #include "IDCertificate_server_g.h"
  9. #include "IDCertificate_UserErrorCode.h"
  10. class CIDCertEntity;
  11. class IDCertServerSession : public IDCertificate::IDCertService_ServerSessionBase
  12. {
  13. public:
  14. IDCertServerSession(CIDCertEntity* pEntity) : m_pEntity(pEntity){}
  15. virtual ~IDCertServerSession(){}
  16. virtual void Handle_CancelRead(SpOnewayCallContext<IDCert_CancelRead_Info>::Pointer ctx);
  17. virtual void Handle_GetDevInfo(SpReqAnsContext<IDCert_GetDevInfo_Req, IDCert_GetDevInfo_Ans>::Pointer ctx);
  18. virtual void Handle_ReadWaitMore(SpOnewayCallContext<IDCert_ReadWaitMore_Info>::Pointer ctx);
  19. virtual void Handle_Exit(SpOnewayCallContext<IDCert_Exit_Info>::Pointer ctx);
  20. virtual void Handle_Eject(SpReqAnsContext<IDCert_Eject_Req, IDCert_Eject_Ans>::Pointer ctx);
  21. virtual void Handle_ReadAndScan(SpReqAnsContext<IDCert_ReadAndScan_Req, IDCert_ReadAndScan_Ans>::Pointer ctx);
  22. virtual void Handle_ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCert_ReadAndScanUTF8_Ans>::Pointer ctx); //ex1
  23. private:
  24. CIDCertEntity* m_pEntity;
  25. };
  26. class CIDCertEntity : public CDevAdptEntityBase
  27. {
  28. public:
  29. CIDCertEntity(){}
  30. virtual ~CIDCertEntity(){}
  31. virtual const char *GetEntityName() const { return "IDCertificate"; }
  32. const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
  33. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  34. {
  35. LOG_FUNCTION();
  36. ErrorCodeEnum rt = m_fsm.Init(this);
  37. pTransactionContext->SendAnswer(rt);
  38. }
  39. virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
  40. {
  41. pTransactionContext->SendAnswer(Error_Succeed);
  42. }
  43. virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
  44. {
  45. pTransactionContext->SendAnswer(Error_Succeed);
  46. }
  47. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  48. {
  49. m_fsm.OnExit();
  50. pTransactionContext->SendAnswer(Error_Succeed);
  51. }
  52. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  53. {
  54. m_fsm.SelfTest(eTestType,pTransactionContext);
  55. }
  56. virtual CServerSessionBase* OnNewSession(const char*,const char*)
  57. {
  58. return new IDCertServerSession(this);
  59. }
  60. void CancelRead(SpOnewayCallContext<IDCert_CancelRead_Info>::Pointer ctx)
  61. {
  62. CancelReadEvent* e = new CancelReadEvent();
  63. m_fsm.PostEventFIFO(e);
  64. }
  65. void ReadWaitMore(SpOnewayCallContext<IDCert_ReadWaitMore_Info>::Pointer ctx)
  66. {
  67. if (m_fsm.GetReadFlag())
  68. m_fsm.SetReadMore();
  69. }
  70. void Exit(SpOnewayCallContext<IDCert_Exit_Info>::Pointer ctx)
  71. {
  72. FSMEvent* evt = new FSMEvent(USER_EVT_EXIT);
  73. m_fsm.PostEventFIFO(evt);
  74. }
  75. void Eject(SpReqAnsContext<IDCert_Eject_Req, IDCert_Eject_Ans>::Pointer ctx)
  76. {
  77. EjectEvent* e = new EjectEvent();
  78. e->ctx = ctx;
  79. m_fsm.PostEventFIFO(e);
  80. }
  81. void ReadAndScan(SpReqAnsContext<IDCert_ReadAndScan_Req, IDCert_ReadAndScan_Ans>::Pointer ctx)
  82. {
  83. #ifdef RVC_OS_LINUX
  84. ReadAndScanEvent* e = new ReadAndScanEvent();
  85. e->ctx = ctx;
  86. m_fsm.PostEventFIFO(e);
  87. #else //windows
  88. if (!m_fsm.GetDevInitFlag())
  89. {
  90. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed);
  91. LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.");
  92. return;
  93. }
  94. ReadAndScanEvent* e = new ReadAndScanEvent();
  95. e->ctx = ctx;
  96. m_fsm.PostEventFIFO(e);
  97. #endif // RVC_OS_LINUX
  98. }
  99. void ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCert_ReadAndScanUTF8_Ans>::Pointer ctx) //ex2
  100. {
  101. #ifdef RVC_OS_LINUX
  102. ReadAndScanUTF8Event* e = new ReadAndScanUTF8Event();
  103. e->ctx = ctx;
  104. m_fsm.PostEventFIFO(e);
  105. #else
  106. if (!m_fsm.GetDevInitFlag())
  107. {
  108. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed);
  109. LogWarn(Severity_Middle, Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed, "Open Dev failed.");
  110. return;
  111. }
  112. ReadAndScanUTF8Event* e = new ReadAndScanUTF8Event();
  113. e->ctx = ctx;
  114. m_fsm.PostEventFIFO(e);
  115. #endif
  116. }
  117. void GetDevInfo(SpReqAnsContext<IDCert_GetDevInfo_Req, IDCert_GetDevInfo_Ans>::Pointer ctx)
  118. {
  119. if (m_fsm.m_bOpening)
  120. {
  121. ctx->Answer(Error_NotInit);
  122. }
  123. else if(!m_fsm.GetDevInitFlag())
  124. {
  125. ctx->Answer(Error_DevNotAvailable, IDCertificate_UserErrorCode_DevOpenFailed);
  126. return;
  127. }
  128. else
  129. {
  130. DevCategoryInfo devCatInfo;
  131. CSimpleStringA devType = "";
  132. ctx->Ans.state = m_fsm.GetDevCatInfo(devCatInfo, devType);
  133. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  134. ("devType:%s", (const char*)devType);
  135. ctx->Ans.model = devCatInfo.szModel;
  136. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  137. ("szModel:%s", (const char*)devCatInfo.szModel);
  138. ctx->Ans.type = devCatInfo.szType;
  139. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  140. ("szType:%s", (const char*)devCatInfo.szType);
  141. ctx->Ans.type += ((devType == "4") ? "#IG" : "#");//如果版本号为4,说明是嵌入式多合一(目前也有可能是新大机20190910@zjw),郭丹再判断机型是PAD,说明是PAD+嵌入式多合一,则读完证后不调用吐卡操作
  142. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  143. ("%s", (const char*)ctx->Ans.type);
  144. if (ctx->Ans.model.GetLength() < 256)
  145. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevInfo")
  146. ("%s", (const char*)ctx->Ans.model);
  147. ctx->Answer(Error_Succeed);
  148. return;
  149. }
  150. }
  151. virtual bool IsService()const{return true;}
  152. virtual bool IsMultiThread()const{return false;}
  153. private:
  154. CIDCertFSM m_fsm;
  155. };
  156. #endif // MOD_IDCERTIFICATE_H