CustMngrAuthFSM.h 23 KB

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