mod_IDCertificate.h 6.6 KB

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