mod_IDCertificate.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. #ifndef MOD_IDCERTIFICATE_H
  2. #define MOD_IDCERTIFICATE_H
  3. #include "modVer.h"
  4. #include "IDCertFSM.h"
  5. #include "IDCertificate_server_g.h"
  6. #include "SpTest.h"
  7. class CIDCertEntity;
  8. class IDCertServerSession : public IDCertificate::IDCertService_ServerSessionBase
  9. {
  10. public:
  11. IDCertServerSession(CIDCertEntity* pEntity) : m_pEntity(pEntity){}
  12. virtual ~IDCertServerSession(){}
  13. virtual void Handle_Read(SpReqAnsContext<IDCert_Read_Req,IDCert_Read_Ans>::Pointer ctx);
  14. virtual void Handle_CancelRead(SpOnewayCallContext<IDCert_CancelRead_Info>::Pointer ctx);
  15. virtual void Handle_GetDevInfo(SpReqAnsContext<IDCert_GetDevInfo_Req, IDCert_GetDevInfo_Ans>::Pointer ctx);
  16. virtual void Handle_ReadWaitMore(SpOnewayCallContext<IDCert_ReadWaitMore_Info>::Pointer ctx);
  17. virtual void Handle_Exit(SpOnewayCallContext<IDCert_Exit_Info>::Pointer ctx);
  18. virtual void Handle_ReadEx(SpReqAnsContext<IDCert_ReadEx_Req, IDCert_ReadEx_Ans>::Pointer ctx);
  19. virtual void Handle_Eject(SpReqAnsContext<IDCert_Eject_Req, IDCert_Eject_Ans>::Pointer ctx);
  20. virtual void Handle_ReadAndScan(SpReqAnsContext<IDCert_ReadAndScan_Req, IDCert_ReadAndScan_Ans>::Pointer ctx);
  21. virtual void Handle_CrossTermCall(SpReqAnsContext<IDCert_CrossTermCall_Req, IDCert_CrossTermCall_Ans>::Pointer ctx);
  22. virtual void Handle_CrossTermInvokeInfo(SpOnewayCallContext<IDCert_CrossTermInvokeInfo_Info>::Pointer ctx);
  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. ON_ENTITYT_TEST();
  34. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
  35. {
  36. LOG_FUNCTION();
  37. ErrorCodeEnum rt = m_fsm.Init(this);
  38. Dbg("Init FSM:%s", SpStrError(rt));
  39. pTransactionContext->SendAnswer(rt);
  40. }
  41. virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
  42. {
  43. pTransactionContext->SendAnswer(Error_Succeed);
  44. }
  45. virtual void OnPreContinue(CSmartPointer<ITransactionContext> pTransactionContext)
  46. {
  47. pTransactionContext->SendAnswer(Error_Succeed);
  48. }
  49. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  50. {
  51. m_fsm.OnExit();
  52. pTransactionContext->SendAnswer(Error_Succeed);
  53. }
  54. virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  55. {
  56. m_fsm.SelfTest(eTestType,pTransactionContext);
  57. }
  58. virtual CServerSessionBase* OnNewSession(const char*,const char*)
  59. {
  60. return new IDCertServerSession(this);
  61. }
  62. void Read(SpReqAnsContext<IDCert_Read_Req, IDCert_Read_Ans>::Pointer ctx)
  63. {
  64. if (m_fsm.IsRVCIL())
  65. {
  66. CBlob bbSend;
  67. ErrorCodeEnum eErr = SpObject2Blob(ctx->Req, bbSend);
  68. Dbg("GetRequestId:%d,SpObject2Blob %x,len:%d", ctx->GetRequestId(), eErr, bbSend.m_iLength);
  69. m_fsm.SaveCtx(IDCertService_Method_Read, ctx);
  70. ctx.AddRef();
  71. m_fsm.LocalCallHeartBeat(IDCertService_Method_Read, bbSend,true);
  72. }
  73. else
  74. {
  75. ReadEvent* e = new ReadEvent();
  76. e->ctx = ctx;
  77. m_fsm.PostEventFIFO(e);
  78. }
  79. }
  80. void CancelRead(SpOnewayCallContext<IDCert_CancelRead_Info>::Pointer ctx)
  81. {
  82. if (m_fsm.IsRVCIL())
  83. {
  84. CBlob bbSend;
  85. m_fsm.LocalCallHeartBeat(IDCertService_Method_CancelRead, bbSend);
  86. }
  87. else
  88. {
  89. CancelReadEvent* e = new CancelReadEvent();
  90. m_fsm.PostEventFIFO(e);
  91. }
  92. }
  93. void ReadWaitMore(SpOnewayCallContext<IDCert_ReadWaitMore_Info>::Pointer ctx)
  94. {
  95. if (m_fsm.IsRVCIL())
  96. {
  97. CBlob bbSend;
  98. m_fsm.LocalCallHeartBeat(IDCertService_Method_ReadWaitMore, bbSend);
  99. }
  100. else
  101. {
  102. if (m_fsm.GetReadFlag())
  103. m_fsm.SetReadMore();
  104. }
  105. }
  106. void Exit(SpOnewayCallContext<IDCert_Exit_Info>::Pointer ctx)
  107. {
  108. if (m_fsm.IsRVCIL())
  109. {
  110. CBlob bbSend;
  111. m_fsm.LocalCallHeartBeat(IDCertService_Method_Exit, bbSend);
  112. }
  113. else
  114. {
  115. FSMEvent *evt = new FSMEvent(USER_EVT_EXIT);
  116. m_fsm.PostEventFIFO(evt);
  117. }
  118. }
  119. void ReadEx(SpReqAnsContext<IDCert_ReadEx_Req, IDCert_ReadEx_Ans>::Pointer ctx)
  120. {
  121. if (m_fsm.GetDevInitFlag())
  122. {
  123. ReadExEvent* e = new ReadExEvent();
  124. e->ctx = ctx;
  125. m_fsm.PostEventFIFO(e);
  126. }
  127. else
  128. {
  129. CBlob bbSend;
  130. ErrorCodeEnum eErr = SpObject2Blob(ctx->Req, bbSend);
  131. Dbg("GetRequestId:%d,SpObject2Blob %x,len:%d", ctx->GetRequestId(), eErr, bbSend.m_iLength);
  132. m_fsm.LocalCallHeartBeat(IDCertService_Method_ReadEx, bbSend,true);
  133. }
  134. }
  135. void Eject(SpReqAnsContext<IDCert_Eject_Req, IDCert_Eject_Ans>::Pointer ctx)
  136. {
  137. EjectEvent* e = new EjectEvent();
  138. e->ctx = ctx;
  139. m_fsm.PostEventFIFO(e);
  140. }
  141. void ReadAndScan(SpReqAnsContext<IDCert_ReadAndScan_Req, IDCert_ReadAndScan_Ans>::Pointer ctx)
  142. {
  143. if (m_fsm.IsRVCIL())
  144. {
  145. CBlob bbSend;
  146. ErrorCodeEnum eErr = SpObject2Blob(ctx->Req, bbSend);
  147. Dbg("GetRequestId:%d,SpObject2Blob %x,len:%d", ctx->GetRequestId(), eErr, bbSend.m_iLength);
  148. m_fsm.SaveCtx(IDCertService_Method_ReadAndScan, ctx);
  149. ctx.AddRef();
  150. m_fsm.LocalCallHeartBeat(IDCertService_Method_ReadAndScan, bbSend,true);
  151. }
  152. else
  153. {
  154. ReadAndScanEvent* e = new ReadAndScanEvent();
  155. e->ctx = ctx;
  156. m_fsm.PostEventFIFO(e);
  157. }
  158. }
  159. void CrossTermCall(SpReqAnsContext<IDCert_CrossTermCall_Req, IDCert_CrossTermCall_Ans>::Pointer ctx)
  160. {
  161. m_fsm.CrossTermCall(ctx);
  162. }
  163. void CrossTermInvokeInfo(SpOnewayCallContext<IDCert_CrossTermInvokeInfo_Info>::Pointer ctx)
  164. {
  165. m_fsm.CrossTermInvokeInfo(ctx);
  166. }
  167. void GetDevInfo(SpReqAnsContext<IDCert_GetDevInfo_Req, IDCert_GetDevInfo_Ans>::Pointer ctx)
  168. {
  169. DevCategoryInfo devCatInfo;
  170. CSimpleStringA devType = "";
  171. m_fsm.GetDevCatInfo(devCatInfo, devType);
  172. Dbg("devType:%s",(const char*)devType);
  173. ctx->Ans.model = devCatInfo.szModel;
  174. //oiltest
  175. //ctx->Ans.model = "idversion=2.0";
  176. Dbg("szModel:%s", (const char*)devCatInfo.szModel);
  177. ctx->Ans.type = devCatInfo.szType;
  178. Dbg("szType:%s", (const char*)devCatInfo.szType);
  179. ctx->Ans.type += ((devType == "4") ? "#IG" : "#");//如果版本号为4,说明是嵌入式多合一(目前也有可能是新大机20190910@zjw),郭丹再判断机型是PAD,说明是PAD+嵌入式多合一,则读完证后不调用吐卡操作
  180. Dbg("%s", (const char*)ctx->Ans.type);
  181. if (ctx->Ans.model.GetLength() < 256)
  182. Dbg("%s", (const char*)ctx->Ans.model);
  183. ctx->Answer(Error_Succeed);
  184. }
  185. virtual bool IsService()const{return true;}
  186. virtual bool IsMultiThread()const{return false;}
  187. protected:
  188. CIDCertFSM m_fsm;
  189. };
  190. #endif // MOD_IDCERTIFICATE_H