CustMngrAuthFSM.h 23 KB

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