CustMngrAuthFSM.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. #ifndef __CUSTMNGRAUTH_FSM_H
  2. #define __CUSTMNGRAUTH_FSM_H
  3. #pragma once
  4. #include "stdafx.h"
  5. #include "SpFSM.h"
  6. #include "SpSecureClient.h"
  7. #include "CustMngrAuth_server_g.h"
  8. #include "CustMngrAuth_msg_g.h"
  9. #include "json/json.h"
  10. #include "FingerPrint_client_g.h"
  11. #include "CommEntityUtil.hpp"
  12. using namespace CustMngrAuth;
  13. using namespace std;
  14. using namespace FingerPrint;
  15. enum EvtType{
  16. USER_EVT_TEST = EVT_USER + 1,
  17. USER_EVT_QUIT,
  18. USER_EVT_INIT,
  19. USER_EVT_INIT_FINISHED,
  20. USER_EVT_AUTHORIZE_START,
  21. USER_EVT_AUTHORIZE_FINISHED,
  22. USER_EVT_AUTHORIZE_CANCEL,
  23. USER_EVT_QUERYAUTHORINFO,
  24. USER_EVT_QUERYAUTHORINFO_FINISHED,
  25. USER_EVT_QUERYAUTHORINFO_CANCEL,
  26. USER_EVT_COLLECTFINGERPRINT_START,
  27. USER_EVT_COLLECTFINGERPRINTEX_START,
  28. USER_EVT_COLLECTFINGERPRINTINFO,
  29. USER_EVT_GENERATE_TEMPLATE,
  30. USER_EVT_GENERATE_TEMPLATE_FINISHED,
  31. USER_EVT_COLLECTFINGERPRINT_FINISHED,
  32. USER_EVT_COLLECTFINGERPRINTEX_FINISHED,
  33. USER_EVT_COLLECTFINGERPRINTINFO_FINISHED,
  34. USER_EVT_COLLECTFINGERPRINT_CANCEL,
  35. USER_EVT_COLLECTFINGERPRINTEX_CANCEL,
  36. USER_EVT_SAVEFINGERPRINT_START,
  37. USER_EVT_SAVEFINGERPRINT_FINISHED,
  38. USER_EVT_CHECKUKEY,
  39. USER_EVT_CHECKUKEY_FINISHED,
  40. USER_EVT_HOLDON,
  41. USER_EVT_EXIT,
  42. };
  43. enum AuthByWhich//授权结果
  44. {
  45. AuthByNone = 0,
  46. AuthByFngPrnt = 1,
  47. AuthByUkey = 2,
  48. };
  49. enum BmpType
  50. {
  51. BmpImage = 1,
  52. TestImage
  53. };
  54. struct AuthContext
  55. {
  56. AuthByWhich eAuthByWhich;
  57. CSimpleStringA UkeyID;
  58. CSimpleStringA CustomerID;
  59. CSimpleStringA Feature;
  60. CBlob FingerImg;
  61. };
  62. class CCustMngrAuthEntity;
  63. class CCustMngrAuthFSM;
  64. class AuthorizeStartEvent : public FSMEvent
  65. {
  66. public:
  67. AuthorizeStartEvent() : FSMEvent(USER_EVT_AUTHORIZE_START){}
  68. ~AuthorizeStartEvent(){}
  69. SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx;
  70. virtual void OnUnhandled()
  71. {
  72. if (ctx != NULL)
  73. {
  74. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("authorize_start unhandled");
  75. ctx->Answer(Error_InvalidState);
  76. }
  77. }
  78. protected:
  79. private:
  80. };
  81. class AuthorizeCancelExEvent : public FSMEvent
  82. {
  83. public:
  84. AuthorizeCancelExEvent() : FSMEvent(USER_EVT_QUERYAUTHORINFO_CANCEL) {}
  85. ~AuthorizeCancelExEvent() {}
  86. SpReqAnsContext<CustMngrAuthService_StopAuthorizeEx_Req, CustMngrAuthService_StopAuthorizeEx_Ans>::Pointer ctx;
  87. virtual void OnUnhandled()
  88. {
  89. if (ctx != NULL)
  90. {
  91. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("cancel QueryAuthorInfo unhandled");
  92. }
  93. }
  94. protected:
  95. private:
  96. };
  97. class AuthorizeFinishedEvent : public FSMEvent
  98. {
  99. public:
  100. AuthorizeFinishedEvent() : FSMEvent(USER_EVT_AUTHORIZE_FINISHED){}
  101. ~AuthorizeFinishedEvent(){}
  102. SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx;
  103. virtual void OnUnhandled()
  104. {
  105. if (ctx != NULL)
  106. {
  107. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("authorize_finished unhandled");
  108. }
  109. }
  110. protected:
  111. private:
  112. };
  113. class AuthorizeCancelEvent : public FSMEvent
  114. {
  115. public:
  116. AuthorizeCancelEvent() : FSMEvent(USER_EVT_AUTHORIZE_CANCEL){}
  117. ~AuthorizeCancelEvent(){}
  118. SpReqAnsContext<CustMngrAuthService_StopAuthorize_Req, CustMngrAuthService_StopAuthorize_Ans>::Pointer ctx;
  119. virtual void OnUnhandled()
  120. {
  121. if (ctx != NULL)
  122. {
  123. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("authorize_cancel unhandled");
  124. ctx->Answer(Error_InvalidState);
  125. }
  126. }
  127. protected:
  128. private:
  129. };
  130. class QueryAuthorInfoEvent : public FSMEvent
  131. {
  132. public:
  133. QueryAuthorInfoEvent() : FSMEvent(USER_EVT_QUERYAUTHORINFO) {}
  134. ~QueryAuthorInfoEvent() {}
  135. SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer ctx;
  136. virtual void OnUnhandled()
  137. {
  138. if (ctx != NULL)
  139. {
  140. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("QueryAuthorInfo unhandled");
  141. ctx->Answer(Error_InvalidState);
  142. }
  143. }
  144. protected:
  145. private:
  146. };
  147. class QueryAuthorInfoFinishedEvent : public FSMEvent
  148. {
  149. public:
  150. QueryAuthorInfoFinishedEvent() : FSMEvent(USER_EVT_QUERYAUTHORINFO_FINISHED) {}
  151. ~QueryAuthorInfoFinishedEvent() {}
  152. SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer ctx;
  153. virtual void OnUnhandled()
  154. {
  155. if (ctx != NULL)
  156. {
  157. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("QueryAuthorInfo_finished unhandled");
  158. }
  159. }
  160. protected:
  161. private:
  162. };
  163. class CollectFingerPrintStartEvent : public FSMEvent
  164. {
  165. public:
  166. CollectFingerPrintStartEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINT_START){}
  167. ~CollectFingerPrintStartEvent(){}
  168. SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx;
  169. virtual void OnUnhandled()
  170. {
  171. if (ctx!=NULL)
  172. {
  173. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("collect_finger_print unhandled");
  174. ctx->Answer(Error_InvalidState);
  175. }
  176. }
  177. protected:
  178. private:
  179. };
  180. class CollectFingerPrintExStartEvent : public FSMEvent
  181. {
  182. public:
  183. CollectFingerPrintExStartEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINTEX_START) {}
  184. ~CollectFingerPrintExStartEvent() {}
  185. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintEx_Req, CustMngrAuthService_CollectFingerPrintEx_Ans>::Pointer ctx;
  186. virtual void OnUnhandled()
  187. {
  188. if (ctx != NULL)
  189. {
  190. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("collect_fingerEx_print unhandled");
  191. ctx->Answer(Error_InvalidState);
  192. }
  193. }
  194. protected:
  195. private:
  196. };
  197. class CollectFingerPrintInfoEvent : public FSMEvent
  198. {
  199. public:
  200. CollectFingerPrintInfoEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINTINFO) {}
  201. ~CollectFingerPrintInfoEvent() {}
  202. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintInfo_Req, CustMngrAuthService_CollectFingerPrintInfo_Ans>::Pointer ctx;
  203. virtual void OnUnhandled()
  204. {
  205. if (ctx != NULL)
  206. {
  207. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Collect FingerPrint info unhandled");
  208. ctx->Answer(Error_InvalidState);
  209. }
  210. }
  211. protected:
  212. private:
  213. };
  214. class GenerateTemplateEvent : public FSMEvent
  215. {
  216. public:
  217. GenerateTemplateEvent() : FSMEvent(USER_EVT_GENERATE_TEMPLATE) {}
  218. ~GenerateTemplateEvent() {}
  219. SpReqAnsContext<CustMngrAuthService_GenerateTemplate_Req, CustMngrAuthService_GenerateTemplate_Ans>::Pointer ctx;
  220. virtual void OnUnhandled()
  221. {
  222. if (ctx != NULL)
  223. {
  224. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Generate Template unhandled");
  225. ctx->Answer(Error_InvalidState);
  226. }
  227. }
  228. protected:
  229. private:
  230. };
  231. class CollectFingerPrintFinishedEvent : public FSMEvent
  232. {
  233. public:
  234. CollectFingerPrintFinishedEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINT_FINISHED){}
  235. ~CollectFingerPrintFinishedEvent(){}
  236. SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx;
  237. virtual void OnUnhandled()
  238. {
  239. if (ctx!=NULL)
  240. {
  241. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("collect_finger_print_finished unhandled");
  242. }
  243. }
  244. protected:
  245. private:
  246. };
  247. class CollectFingerPrintExFinishedEvent : public FSMEvent
  248. {
  249. public:
  250. CollectFingerPrintExFinishedEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINTEX_FINISHED) {}
  251. ~CollectFingerPrintExFinishedEvent() {}
  252. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintEx_Req, CustMngrAuthService_CollectFingerPrintEx_Ans>::Pointer ctx;
  253. virtual void OnUnhandled()
  254. {
  255. if (ctx != NULL)
  256. {
  257. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("collect_finger_printEx_finished unhandled");
  258. }
  259. }
  260. protected:
  261. private:
  262. };
  263. class CollectFingerPrintInfoFinishedEvent : public FSMEvent
  264. {
  265. public:
  266. CollectFingerPrintInfoFinishedEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINTINFO_FINISHED) {}
  267. ~CollectFingerPrintInfoFinishedEvent() {}
  268. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintInfo_Req, CustMngrAuthService_CollectFingerPrintInfo_Ans>::Pointer ctx;
  269. virtual void OnUnhandled()
  270. {
  271. if (ctx != NULL)
  272. {
  273. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Collect FingerPrint Info finished unhandled");
  274. }
  275. }
  276. protected:
  277. private:
  278. };
  279. class GenerateTemplateFinishedEvent : public FSMEvent
  280. {
  281. public:
  282. GenerateTemplateFinishedEvent() : FSMEvent(USER_EVT_GENERATE_TEMPLATE_FINISHED) {}
  283. ~GenerateTemplateFinishedEvent() {}
  284. SpReqAnsContext<CustMngrAuthService_GenerateTemplate_Req, CustMngrAuthService_GenerateTemplate_Ans>::Pointer ctx;
  285. virtual void OnUnhandled()
  286. {
  287. if (ctx != NULL)
  288. {
  289. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Generate Template finished unhandled");
  290. }
  291. }
  292. protected:
  293. private:
  294. };
  295. class CancelCollectFingerPrintEvent : public FSMEvent
  296. {
  297. public:
  298. CancelCollectFingerPrintEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINT_CANCEL){}
  299. ~CancelCollectFingerPrintEvent(){}
  300. virtual void OnUnhandled()
  301. {
  302. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("cancel collect fingerprint unhandled");
  303. }
  304. };
  305. class CancelCollectFingerPrintExEvent : public FSMEvent
  306. {
  307. public:
  308. CancelCollectFingerPrintExEvent() : FSMEvent(USER_EVT_COLLECTFINGERPRINTEX_CANCEL) {}
  309. ~CancelCollectFingerPrintExEvent() {}
  310. virtual void OnUnhandled()
  311. {
  312. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("cancel collect fingerprintEx unhandled");
  313. }
  314. };
  315. class SaveFingerPrintStartEvent : public FSMEvent
  316. {
  317. public:
  318. SaveFingerPrintStartEvent() : FSMEvent(USER_EVT_SAVEFINGERPRINT_START){}
  319. ~SaveFingerPrintStartEvent(){}
  320. SpReqAnsContext<CustMngrAuthService_SaveFingerPrint_Req, CustMngrAuthService_SaveFingerPrint_Ans>::Pointer ctx;
  321. virtual void OnUnhandled(){
  322. if (ctx!=NULL)
  323. {
  324. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("save_finger_print_start unhandled");
  325. ctx->Answer(Error_InvalidState);
  326. }
  327. }
  328. };
  329. class SaveFingerPrintFinishedEvent : public FSMEvent
  330. {
  331. public:
  332. SaveFingerPrintFinishedEvent() : FSMEvent(USER_EVT_SAVEFINGERPRINT_FINISHED){}
  333. ~SaveFingerPrintFinishedEvent(){}
  334. SpReqAnsContext<CustMngrAuthService_SaveFingerPrint_Req, CustMngrAuthService_SaveFingerPrint_Ans>::Pointer ctx;
  335. virtual void OnUnhandled(){
  336. if (ctx!=NULL)
  337. {
  338. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("save_finger_print_finished unhandled");
  339. ctx->Answer(Error_InvalidState);
  340. }
  341. }
  342. };
  343. class CheckUkeyEvent : public FSMEvent
  344. {
  345. public:
  346. CheckUkeyEvent() : FSMEvent(USER_EVT_CHECKUKEY){}
  347. ~CheckUkeyEvent(){}
  348. virtual void OnUnhandled()
  349. {
  350. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("check_ukey unhandled");
  351. }
  352. };
  353. class CheckUkeyFinishedEvent : public FSMEvent
  354. {
  355. public:
  356. CheckUkeyFinishedEvent() : FSMEvent(USER_EVT_CHECKUKEY_FINISHED){}
  357. ~CheckUkeyFinishedEvent(){}
  358. virtual void OnUnhandled()
  359. {
  360. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("check_ukey_finished unhandled");
  361. }
  362. };
  363. class HoldOnEvent : public FSMEvent
  364. {
  365. public:
  366. HoldOnEvent() : FSMEvent(USER_EVT_HOLDON){}
  367. ~HoldOnEvent(){}
  368. SpReqAnsContext<CustMngrAuthService_HoldOn_Req, CustMngrAuthService_HoldOn_Ans>::Pointer ctx;
  369. virtual void OnUnhandled(){
  370. if (ctx!=NULL)
  371. {
  372. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("holdon unhandled");
  373. ctx->Answer(Error_InvalidState);
  374. }
  375. }
  376. };
  377. class FeatureUpdateConn;
  378. class CCustMngrAuthFSM : public FSMImpl<CCustMngrAuthFSM>
  379. {
  380. public:
  381. enum { s0, s1, s2, s3, s4, s5};
  382. BEGIN_FSM_STATE(CCustMngrAuthFSM)
  383. FSM_STATE_ENTRY(s0, "Init", s0_on_entry, s0_on_exit, s0_on_event)
  384. FSM_STATE_ENTRY(s1, "Initializing", s1_on_entry, s1_on_exit, s1_on_event)
  385. FSM_STATE_ENTRY(s2, "Idle", s2_on_entry, s2_on_exit, s2_on_event)
  386. FSM_STATE_ENTRY(s3, "Authorizing", s3_on_entry, s3_on_exit, s3_on_event)//QUERYAUTHORINFO请求进入
  387. FSM_STATE_ENTRY(s4, "Registering", s4_on_entry, s4_on_exit, s4_on_event)//GENERATE_TEMPLATE,CollectFingerPrintInfo请求进入
  388. FSM_STATE_ENTRY(s5, "Failed", s5_on_entry, s5_on_exit, s5_on_event)
  389. END_FSM_STATE()
  390. BEGIN_FSM_RULE(CCustMngrAuthFSM, s0)
  391. FSM_RULE_ENTRY(s0, s2, USER_EVT_TEST, 0)
  392. FSM_RULE_ENTRY(s0, s1, USER_EVT_INIT, 0)
  393. FSM_RULE_ENTRY(s0, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  394. FSM_RULE_ENTRY(s1, s2, USER_EVT_INIT_FINISHED, 0)
  395. FSM_RULE_ENTRY(s1, s5, USER_EVT_INIT_FINISHED, 1)
  396. FSM_RULE_ENTRY(s1, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  397. FSM_RULE_ENTRY(s2, s3, USER_EVT_AUTHORIZE_START, 0)
  398. FSM_RULE_ENTRY(s2, s3, USER_EVT_QUERYAUTHORINFO, 0)
  399. FSM_RULE_ENTRY(s2, s4, USER_EVT_COLLECTFINGERPRINT_START, 0)
  400. FSM_RULE_ENTRY(s2, s4, USER_EVT_COLLECTFINGERPRINTEX_START, 0)
  401. FSM_RULE_ENTRY(s2, s4, USER_EVT_COLLECTFINGERPRINTINFO, 0)
  402. FSM_RULE_ENTRY(s2, s4, USER_EVT_GENERATE_TEMPLATE, 0)
  403. FSM_RULE_ENTRY(s2, s4, USER_EVT_CHECKUKEY, 0)
  404. FSM_RULE_ENTRY(s2, s4, USER_EVT_SAVEFINGERPRINT_START, 0)
  405. FSM_RULE_ENTRY(s2, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  406. FSM_RULE_ENTRY(s3, s2, USER_EVT_EXIT, 0)
  407. FSM_RULE_ENTRY(s3, s2, USER_EVT_AUTHORIZE_FINISHED, 0)
  408. FSM_RULE_ENTRY(s3, s2, USER_EVT_QUERYAUTHORINFO_FINISHED, 0)
  409. FSM_RULE_ENTRY(s3, s2, EVT_TIMER, 0)
  410. FSM_RULE_ENTRY(s4, s2, USER_EVT_COLLECTFINGERPRINT_START, 0)
  411. FSM_RULE_ENTRY(s4, s2, USER_EVT_COLLECTFINGERPRINTEX_START, 0)
  412. FSM_RULE_ENTRY(s4, s2, USER_EVT_COLLECTFINGERPRINT_FINISHED, 0)
  413. FSM_RULE_ENTRY(s4, s2, USER_EVT_COLLECTFINGERPRINTEX_FINISHED, 0)
  414. FSM_RULE_ENTRY(s4, s2, USER_EVT_COLLECTFINGERPRINTINFO_FINISHED, 0)
  415. FSM_RULE_ENTRY(s4, s2, USER_EVT_GENERATE_TEMPLATE_FINISHED, 0)
  416. FSM_RULE_ENTRY(s4, s2, USER_EVT_SAVEFINGERPRINT_FINISHED, 0)
  417. FSM_RULE_ENTRY(s4, s2, USER_EVT_CHECKUKEY_FINISHED, 0)
  418. FSM_RULE_ENTRY(s3, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  419. FSM_RULE_ENTRY(s5, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  420. END_FSM_RULE()
  421. CCustMngrAuthFSM():m_pFingerPrint(NULL), m_bCancelCollectFP(false)
  422. , m_bCancelAuthorize(false), m_bAuthorizeTimeout(false) {
  423. hStopUpdate = ::CreateEventA(NULL, TRUE, FALSE, NULL);
  424. m_TimeLimit = 55;//默认授权超时秒数
  425. m_ctx = NULL;
  426. InitializeCriticalSection(&m_cs);
  427. }
  428. ~CCustMngrAuthFSM(){
  429. DeleteCriticalSection(&m_cs);
  430. }
  431. virtual ErrorCodeEnum OnInit();
  432. virtual ErrorCodeEnum OnExit();
  433. void s0_on_entry();
  434. void s0_on_exit();
  435. unsigned int s0_on_event(FSMEvent* event);
  436. void s1_on_entry();
  437. void s1_on_exit();
  438. unsigned int s1_on_event(FSMEvent* event);
  439. void s2_on_entry();
  440. void s2_on_exit();
  441. unsigned int s2_on_event(FSMEvent* event);
  442. void s3_on_entry();
  443. void s3_on_exit();
  444. unsigned int s3_on_event(FSMEvent* event);
  445. void s4_on_entry();
  446. void s4_on_exit();
  447. unsigned int s4_on_event(FSMEvent* event);
  448. void s5_on_entry();
  449. void s5_on_exit();
  450. unsigned int s5_on_event(FSMEvent* event);
  451. HANDLE hStopUpdate;
  452. int Initial();
  453. SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer m_ctx;
  454. SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer qaInfoCtx;
  455. AuthContext m_authCtx;
  456. ErrorCodeEnum MatchFingerPrintEx(SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer ctx, bool& bStopAuthorize, DWORD& dwUserErrCode);
  457. void CancelAuthorize();
  458. void CancelCollect();
  459. ErrorCodeEnum CollectFingerPrintInfo(SpReqAnsContext<CustMngrAuthService_CollectFingerPrintInfo_Req, CustMngrAuthService_CollectFingerPrintInfo_Ans>::Pointer ctx, DWORD& dwUserErrCode);
  460. ErrorCodeEnum GenerateTemplate(SpReqAnsContext<CustMngrAuthService_GenerateTemplate_Req, CustMngrAuthService_GenerateTemplate_Ans>::Pointer ctx, DWORD& dwUserErrCode);
  461. ErrorCodeEnum GetImgBlob(CBlob &data, CSimpleStringA imgPath);
  462. void BroadcastPressFinger(int times, bool bPressFinger);
  463. void BroadcastGetFinger(int status);
  464. void DeleteBmp(int type);
  465. ErrorCodeEnum DeleteFileIfExisted(const char* fileName);
  466. //在旧dep路径下找到文件时告警,未继承CCommDevFSM,单独实现
  467. void UpdateAndWarnFileFindInDepBak(CSimpleStringA& newDepPath, const char* filename, DWORD userCode);
  468. #pragma region 废弃的方法
  469. ErrorCodeEnum MatchFingerPrint(SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx, bool& bStopAuthorize);//废弃的方法
  470. ErrorCodeEnum CollectFingerPrint(SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx, DWORD& dwUserErrCode);//废弃的方法
  471. ErrorCodeEnum CollectFingerPrintEx(SpReqAnsContext<CustMngrAuthService_CollectFingerPrintEx_Req, CustMngrAuthService_CollectFingerPrintEx_Ans>::Pointer ctx, DWORD& dwUserErrCode);//废弃的方法
  472. ErrorCodeEnum SaveFingerPrint(SpReqAnsContext<CustMngrAuthService_SaveFingerPrint_Req, CustMngrAuthService_SaveFingerPrint_Ans>::Pointer ctx);//废弃的方法
  473. #pragma endregion
  474. private:
  475. FingerPrintService_ClientBase *m_pFingerPrint;
  476. bool m_bCancelCollectFP, m_bCancelAuthorize, m_bAuthorizeTimeout;
  477. int m_TimeLimit;
  478. CRITICAL_SECTION m_cs;//临界区变量
  479. };
  480. //初始化:检查、配置路径、起特征更新任务(使用)
  481. struct InitTask : public ITaskSp
  482. {
  483. CCustMngrAuthFSM *fsm;
  484. InitTask(CCustMngrAuthFSM *f) : fsm(f) {}
  485. void Process()
  486. {
  487. LOG_FUNCTION();
  488. FSMEvent *e = new FSMEvent(USER_EVT_INIT_FINISHED);
  489. e->param1 = fsm->Initial();
  490. fsm->PostEventFIFO(e);
  491. }
  492. };
  493. //因QueryAuthorInfo使用(使用)
  494. struct MatchFingerPrintTaskEx : public ITaskSp
  495. {
  496. CCustMngrAuthFSM* fsm;
  497. MatchFingerPrintTaskEx(CCustMngrAuthFSM* f) : fsm(f) {}
  498. SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer ctx;
  499. void Process()
  500. {
  501. bool bStopAuthorize = false;
  502. DWORD dwUserErrorCode = 0;
  503. //加入指纹交易日志
  504. ErrorCodeEnum eErr = fsm->MatchFingerPrintEx(ctx, bStopAuthorize, dwUserErrorCode);
  505. QueryAuthorInfoFinishedEvent* e = new QueryAuthorInfoFinishedEvent();
  506. e->ctx = ctx;
  507. e->param1 = eErr;
  508. e->param2 = dwUserErrorCode;
  509. fsm->PostEventFIFO(e);//指纹匹配结束,结束授权
  510. }
  511. };
  512. //因CollectFingerPrintInfo使用(使用)
  513. struct CollectFingerPrintInfoTask : public ITaskSp
  514. {
  515. CCustMngrAuthFSM* fsm;
  516. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintInfo_Req, CustMngrAuthService_CollectFingerPrintInfo_Ans>::Pointer ctx;
  517. CollectFingerPrintInfoTask(CCustMngrAuthFSM* f) : fsm(f) {}
  518. void Process()
  519. {
  520. LOG_FUNCTION();
  521. CollectFingerPrintInfoFinishedEvent* e = new CollectFingerPrintInfoFinishedEvent();
  522. e->ctx = ctx;
  523. DWORD dwUserErrorCode = 0;
  524. ErrorCodeEnum eErr = fsm->CollectFingerPrintInfo(ctx, dwUserErrorCode);
  525. if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  526. ctx->Answer(eErr, dwUserErrorCode);
  527. else
  528. ctx->Answer(eErr);
  529. fsm->PostEventFIFO(e);
  530. }
  531. };
  532. //因GenerateTemplate使用(使用)
  533. struct GenerateTemplateTask : public ITaskSp
  534. {
  535. CCustMngrAuthFSM* fsm;
  536. SpReqAnsContext<CustMngrAuthService_GenerateTemplate_Req, CustMngrAuthService_GenerateTemplate_Ans>::Pointer ctx;
  537. GenerateTemplateTask(CCustMngrAuthFSM* f) : fsm(f) {}
  538. void Process()
  539. {
  540. LOG_FUNCTION();
  541. GenerateTemplateFinishedEvent* e = new GenerateTemplateFinishedEvent();
  542. e->ctx = ctx;
  543. DWORD dwUserErrorCode = 0;
  544. ErrorCodeEnum eErr = fsm->GenerateTemplate(ctx, dwUserErrorCode);
  545. if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  546. ctx->Answer(eErr, dwUserErrorCode);
  547. else
  548. ctx->Answer(eErr);
  549. fsm->PostEventFIFO(e);
  550. }
  551. };
  552. #pragma region 废弃的结构
  553. //因StartAuthorize不使用(废弃)
  554. struct MatchFingerPrintTask : public ITaskSp
  555. {
  556. CCustMngrAuthFSM* fsm;
  557. MatchFingerPrintTask(CCustMngrAuthFSM* f) : fsm(f) {}
  558. SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx;
  559. void Process()
  560. {
  561. //bool bStopAuthorize = false;
  562. //ErrorCodeEnum eErr = fsm->MatchFingerPrint(ctx, bStopAuthorize);
  563. ////if (bStopAuthorize)
  564. ////{
  565. // AuthorizeFinishedEvent *e = new AuthorizeFinishedEvent();
  566. // e->ctx = ctx;
  567. // e->param1 = eErr;
  568. // fsm->PostEventFIFO(e);
  569. //}
  570. //else
  571. //{
  572. // AuthorizeFinishedEvent *e = new AuthorizeFinishedEvent();
  573. // e->ctx = ctx;
  574. // e->param1 = fsm->WaitForUkey(eErr);
  575. // fsm->PostEventFIFO(e);//指纹匹配异常停止,继续等到超时或ukey插入结束授权,如果是ukey插入,这个event就不会被处理
  576. //}
  577. }
  578. };
  579. //因CollectFingerPrint不使用(废弃)
  580. struct CollectFingerPrintTask : public ITaskSp
  581. {
  582. CCustMngrAuthFSM* fsm;
  583. SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx;
  584. CollectFingerPrintTask(CCustMngrAuthFSM* f) : fsm(f) {}
  585. void Process()
  586. {
  587. //LOG_FUNCTION();
  588. //CollectFingerPrintFinishedEvent* e = new CollectFingerPrintFinishedEvent();
  589. //e->ctx = ctx;
  590. //DWORD dwUserErrorCode = 0;
  591. //ErrorCodeEnum eErr = fsm->CollectFingerPrint(ctx, dwUserErrorCode);
  592. //if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  593. // ctx->Answer(eErr, dwUserErrorCode);
  594. //else
  595. // ctx->Answer(eErr);
  596. //fsm->PostEventFIFO(e);
  597. }
  598. };
  599. //因CollectFingerPrintEx不使用(废弃)
  600. struct CollectFingerPrintExTask : public ITaskSp
  601. {
  602. CCustMngrAuthFSM* fsm;
  603. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintEx_Req, CustMngrAuthService_CollectFingerPrintEx_Ans>::Pointer ctx;
  604. CollectFingerPrintExTask(CCustMngrAuthFSM* f) : fsm(f) {}
  605. void Process()
  606. {
  607. //LOG_FUNCTION();
  608. //CollectFingerPrintExFinishedEvent* e = new CollectFingerPrintExFinishedEvent();
  609. //e->ctx = ctx;
  610. //DWORD dwUserErrorCode = 0;
  611. //ErrorCodeEnum eErr = fsm->CollectFingerPrintEx(ctx, dwUserErrorCode);
  612. //if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  613. // ctx->Answer(eErr, dwUserErrorCode);
  614. //else
  615. // ctx->Answer(eErr);
  616. //fsm->PostEventFIFO(e);
  617. }
  618. };
  619. //因SaveFingerPrint不使用(废弃)
  620. struct SaveFingerPrintTask : public ITaskSp
  621. {
  622. CCustMngrAuthFSM* fsm;
  623. SpReqAnsContext<CustMngrAuthService_SaveFingerPrint_Req, CustMngrAuthService_SaveFingerPrint_Ans>::Pointer ctx;
  624. SaveFingerPrintTask(CCustMngrAuthFSM* f) : fsm(f) {}
  625. void Process()
  626. {
  627. //LOG_FUNCTION();
  628. //SaveFingerPrintFinishedEvent* e = new SaveFingerPrintFinishedEvent();
  629. //e->ctx = ctx;
  630. //ErrorCodeEnum eErr = fsm->SaveFingerPrint(ctx);
  631. //ctx->Answer(eErr);
  632. //fsm->PostEventFIFO(e);
  633. }
  634. };
  635. #pragma endregion
  636. #endif //__CUSTMNGRAUTH_FSM_H