CustMngrAuthFSM.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  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. CSimpleStringA m_TerminalID;
  457. CSimpleStringA m_csMachineType;
  458. ErrorCodeEnum MatchFingerPrintEx(SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer ctx, bool& bStopAuthorize, DWORD& dwUserErrCode);
  459. void CancelAuthorize();
  460. void CancelCollect();
  461. ErrorCodeEnum CollectFingerPrintInfo(SpReqAnsContext<CustMngrAuthService_CollectFingerPrintInfo_Req, CustMngrAuthService_CollectFingerPrintInfo_Ans>::Pointer ctx, DWORD& dwUserErrCode);
  462. ErrorCodeEnum GenerateTemplate(SpReqAnsContext<CustMngrAuthService_GenerateTemplate_Req, CustMngrAuthService_GenerateTemplate_Ans>::Pointer ctx, DWORD& dwUserErrCode);
  463. ErrorCodeEnum GetImgBlob(CBlob &data, CSimpleStringA imgPath);
  464. void BroadcastPressFinger(int times, bool bPressFinger);
  465. void BroadcastGetFinger(int status);
  466. void DeleteBmp(int type);
  467. ErrorCodeEnum DeleteFileIfExisted(const char* fileName);
  468. ErrorCodeEnum OpenRunInfoFile();//Initial使用
  469. //ErrorCodeEnum WaitForUkey(ErrorCodeEnum eErr);//未使用,废弃
  470. #pragma region 废弃的方法
  471. ErrorCodeEnum MatchFingerPrint(SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx, bool& bStopAuthorize);//废弃的方法
  472. ErrorCodeEnum CollectFingerPrint(SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx, DWORD& dwUserErrCode);//废弃的方法
  473. ErrorCodeEnum CollectFingerPrintEx(SpReqAnsContext<CustMngrAuthService_CollectFingerPrintEx_Req, CustMngrAuthService_CollectFingerPrintEx_Ans>::Pointer ctx, DWORD& dwUserErrCode);//废弃的方法
  474. ErrorCodeEnum SaveFingerPrint(SpReqAnsContext<CustMngrAuthService_SaveFingerPrint_Req, CustMngrAuthService_SaveFingerPrint_Ans>::Pointer ctx);//废弃的方法
  475. #pragma endregion
  476. private:
  477. FingerPrintService_ClientBase *m_pFingerPrint;
  478. CSimpleStringA m_FingerSection;//人脸特征路径
  479. CSimpleStringA m_RunInfoPath;
  480. bool m_bCancelCollectFP, m_bCancelAuthorize, m_bAuthorizeTimeout;
  481. int m_TimeLimit;
  482. CRITICAL_SECTION m_cs;//临界区变量
  483. };
  484. //初始化:检查、配置路径、起特征更新任务(使用)
  485. struct InitTask : public ITaskSp
  486. {
  487. CCustMngrAuthFSM *fsm;
  488. InitTask(CCustMngrAuthFSM *f) : fsm(f) {}
  489. void Process()
  490. {
  491. LOG_FUNCTION();
  492. FSMEvent *e = new FSMEvent(USER_EVT_INIT_FINISHED);
  493. e->param1 = fsm->Initial();
  494. fsm->PostEventFIFO(e);
  495. }
  496. };
  497. //因QueryAuthorInfo使用(使用)
  498. struct MatchFingerPrintTaskEx : public ITaskSp
  499. {
  500. CCustMngrAuthFSM* fsm;
  501. MatchFingerPrintTaskEx(CCustMngrAuthFSM* f) : fsm(f) {}
  502. SpReqAnsContext<CustMngrAuthService_QueryAuthorInfo_Req, CustMngrAuthService_QueryAuthorInfo_Ans>::Pointer ctx;
  503. void Process()
  504. {
  505. bool bStopAuthorize = false;
  506. DWORD dwUserErrorCode = 0;
  507. //加入指纹交易日志
  508. ErrorCodeEnum eErr = fsm->MatchFingerPrintEx(ctx, bStopAuthorize, dwUserErrorCode);
  509. //if (bStopAuthorize)
  510. //{
  511. QueryAuthorInfoFinishedEvent* e = new QueryAuthorInfoFinishedEvent();
  512. e->ctx = ctx;
  513. e->param1 = eErr;
  514. e->param2 = dwUserErrorCode;
  515. fsm->PostEventFIFO(e);//指纹匹配结束,结束授权
  516. //}
  517. //else
  518. //{
  519. // QueryAuthorInfoFinishedEvent* e = new QueryAuthorInfoFinishedEvent();
  520. // e->ctx = ctx;
  521. // e->param1 = fsm->WaitForUkey(eErr);
  522. // fsm->PostEventFIFO(e);//指纹匹配异常停止,继续等到超时或ukey插入结束授权,如果是ukey插入,这个event就不会被处理
  523. //}
  524. }
  525. };
  526. //因CollectFingerPrintInfo使用(使用)
  527. struct CollectFingerPrintInfoTask : public ITaskSp
  528. {
  529. CCustMngrAuthFSM* fsm;
  530. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintInfo_Req, CustMngrAuthService_CollectFingerPrintInfo_Ans>::Pointer ctx;
  531. CollectFingerPrintInfoTask(CCustMngrAuthFSM* f) : fsm(f) {}
  532. void Process()
  533. {
  534. LOG_FUNCTION();
  535. CollectFingerPrintInfoFinishedEvent* e = new CollectFingerPrintInfoFinishedEvent();
  536. e->ctx = ctx;
  537. DWORD dwUserErrorCode = 0;
  538. ErrorCodeEnum eErr = fsm->CollectFingerPrintInfo(ctx, dwUserErrorCode);
  539. if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  540. ctx->Answer(eErr, dwUserErrorCode);
  541. else
  542. ctx->Answer(eErr);
  543. fsm->PostEventFIFO(e);
  544. }
  545. };
  546. //因GenerateTemplate使用(使用)
  547. struct GenerateTemplateTask : public ITaskSp
  548. {
  549. CCustMngrAuthFSM* fsm;
  550. SpReqAnsContext<CustMngrAuthService_GenerateTemplate_Req, CustMngrAuthService_GenerateTemplate_Ans>::Pointer ctx;
  551. GenerateTemplateTask(CCustMngrAuthFSM* f) : fsm(f) {}
  552. void Process()
  553. {
  554. LOG_FUNCTION();
  555. GenerateTemplateFinishedEvent* e = new GenerateTemplateFinishedEvent();
  556. e->ctx = ctx;
  557. DWORD dwUserErrorCode = 0;
  558. ErrorCodeEnum eErr = fsm->GenerateTemplate(ctx, dwUserErrorCode);
  559. if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  560. ctx->Answer(eErr, dwUserErrorCode);
  561. else
  562. ctx->Answer(eErr);
  563. fsm->PostEventFIFO(e);
  564. }
  565. };
  566. #pragma region 废弃的结构
  567. //因StartAuthorize不使用(废弃)
  568. struct MatchFingerPrintTask : public ITaskSp
  569. {
  570. CCustMngrAuthFSM* fsm;
  571. MatchFingerPrintTask(CCustMngrAuthFSM* f) : fsm(f) {}
  572. SpReqAnsContext<CustMngrAuthService_StartAuthorize_Req, CustMngrAuthService_StartAuthorize_Ans>::Pointer ctx;
  573. void Process()
  574. {
  575. //bool bStopAuthorize = false;
  576. //ErrorCodeEnum eErr = fsm->MatchFingerPrint(ctx, bStopAuthorize);
  577. ////if (bStopAuthorize)
  578. ////{
  579. // AuthorizeFinishedEvent *e = new AuthorizeFinishedEvent();
  580. // e->ctx = ctx;
  581. // e->param1 = eErr;
  582. // fsm->PostEventFIFO(e);
  583. //}
  584. //else
  585. //{
  586. // AuthorizeFinishedEvent *e = new AuthorizeFinishedEvent();
  587. // e->ctx = ctx;
  588. // e->param1 = fsm->WaitForUkey(eErr);
  589. // fsm->PostEventFIFO(e);//指纹匹配异常停止,继续等到超时或ukey插入结束授权,如果是ukey插入,这个event就不会被处理
  590. //}
  591. }
  592. };
  593. //因CollectFingerPrint不使用(废弃)
  594. struct CollectFingerPrintTask : public ITaskSp
  595. {
  596. CCustMngrAuthFSM* fsm;
  597. SpReqAnsContext<CustMngrAuthService_CollectFingerPrint_Req, CustMngrAuthService_CollectFingerPrint_Ans>::Pointer ctx;
  598. CollectFingerPrintTask(CCustMngrAuthFSM* f) : fsm(f) {}
  599. void Process()
  600. {
  601. //LOG_FUNCTION();
  602. //CollectFingerPrintFinishedEvent* e = new CollectFingerPrintFinishedEvent();
  603. //e->ctx = ctx;
  604. //DWORD dwUserErrorCode = 0;
  605. //ErrorCodeEnum eErr = fsm->CollectFingerPrint(ctx, dwUserErrorCode);
  606. //if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  607. // ctx->Answer(eErr, dwUserErrorCode);
  608. //else
  609. // ctx->Answer(eErr);
  610. //fsm->PostEventFIFO(e);
  611. }
  612. };
  613. //因CollectFingerPrintEx不使用(废弃)
  614. struct CollectFingerPrintExTask : public ITaskSp
  615. {
  616. CCustMngrAuthFSM* fsm;
  617. SpReqAnsContext<CustMngrAuthService_CollectFingerPrintEx_Req, CustMngrAuthService_CollectFingerPrintEx_Ans>::Pointer ctx;
  618. CollectFingerPrintExTask(CCustMngrAuthFSM* f) : fsm(f) {}
  619. void Process()
  620. {
  621. //LOG_FUNCTION();
  622. //CollectFingerPrintExFinishedEvent* e = new CollectFingerPrintExFinishedEvent();
  623. //e->ctx = ctx;
  624. //DWORD dwUserErrorCode = 0;
  625. //ErrorCodeEnum eErr = fsm->CollectFingerPrintEx(ctx, dwUserErrorCode);
  626. //if (eErr == Error_Unexpect && dwUserErrorCode > 0)
  627. // ctx->Answer(eErr, dwUserErrorCode);
  628. //else
  629. // ctx->Answer(eErr);
  630. //fsm->PostEventFIFO(e);
  631. }
  632. };
  633. //因SaveFingerPrint不使用(废弃)
  634. struct SaveFingerPrintTask : public ITaskSp
  635. {
  636. CCustMngrAuthFSM* fsm;
  637. SpReqAnsContext<CustMngrAuthService_SaveFingerPrint_Req, CustMngrAuthService_SaveFingerPrint_Ans>::Pointer ctx;
  638. SaveFingerPrintTask(CCustMngrAuthFSM* f) : fsm(f) {}
  639. void Process()
  640. {
  641. //LOG_FUNCTION();
  642. //SaveFingerPrintFinishedEvent* e = new SaveFingerPrintFinishedEvent();
  643. //e->ctx = ctx;
  644. //ErrorCodeEnum eErr = fsm->SaveFingerPrint(ctx);
  645. //ctx->Answer(eErr);
  646. //fsm->PostEventFIFO(e);
  647. }
  648. };
  649. #pragma endregion
  650. #endif //__CUSTMNGRAUTH_FSM_H