#include "CardIssuerStore_server_g.h" #include "CardIssuerStore_def_g.h" #include "CardIssuerFSM.h" #include "DevEntityCommBase.hpp" using namespace CardIssuerStore; class CCardIssuerEntity; class CardIssuerStoreServerSession : public CardIssuerStoreService_ServerSessionBase { public: CardIssuerStoreServerSession(CCardIssuerEntity* pEntity):m_pEntity(pEntity){} virtual ~CardIssuerStoreServerSession(){} virtual void Handle_Read(SpReqAnsContext::Pointer ctx); virtual void Handle_Capture(SpReqAnsContext::Pointer ctx); virtual void Handle_Eject(SpReqAnsContext::Pointer ctx); virtual void Handle_PreOnline(SpReqAnsContext::Pointer ctx); virtual void Handle_PostOnline(SpReqAnsContext::Pointer ctx); virtual void Handle_Exit(SpOnewayCallContext::Pointer ctx); virtual void Handle_SetIssueFlag(SpOnewayCallContext::Pointer ctx); virtual void Handle_QueryCardInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_WriteTrack(SpReqAnsContext::Pointer ctx); virtual void Handle_GetMaterialCountEx(SpReqAnsContext::Pointer ctx); virtual void Handle_SetMaterialCountEx(SpReqAnsContext::Pointer ctx); virtual void Handle_SetSomeFlag(SpReqAnsContext::Pointer ctx); virtual void Handle_IssueEx(SpReqAnsContext::Pointer ctx); virtual void Handle_SAMICCommand(SpReqAnsContext::Pointer ctx); virtual void Handle_QueryCardInfoOnStore(SpReqAnsContext::Pointer ctx); virtual void Handle_GetAddCardInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_PrintCardImmediately(SpReqAnsContext::Pointer ctx); virtual void Handle_QueryCIStatus(SpReqAnsContext::Pointer ctx); virtual void Handle_GetDevInfo(SpReqAnsContext::Pointer ctx); //JS接口定义 virtual void Handle_ReadJS(SpReqAnsContext::Pointer ctx); virtual void Handle_PostOnlineJS(SpReqAnsContext::Pointer ctx); virtual void Handle_EjectJS(SpReqAnsContext::Pointer ctx); virtual void Handle_CaptureJS(SpReqAnsContext::Pointer ctx); //virtual void Handle_QueryInternalHasCardJS(SpReqAnsContext::Pointer ctx); virtual void Handle_QueryHasCardJS(SpReqAnsContext::Pointer ctx); virtual void Handle_IssueFromBoxJS(SpReqAnsContext::Pointer ctx); //virtual void Handle_IssueFromSlotJS(SpReqAnsContext::Pointer ctx); //virtual void Handle_SAMICCommandJS(SpReqAnsContext::Pointer ctx); virtual void Handle_ICCommandJS(SpReqAnsContext::Pointer ctx); virtual void Handle_WriteTrackJS(SpReqAnsContext::Pointer ctx); virtual void Handle_PrintCardImmediatelyJS(SpReqAnsContext::Pointer ctx); virtual void Handle_PreOnlineCrossJS(SpReqAnsContext::Pointer ctx); virtual void Handle_ReadBatchCardInfoInRangeJS(SpReqAnsContext::Pointer ctx); virtual void Handle_GetCardInStoreJS(SpReqAnsContext::Pointer ctx); virtual void Handle_AddAndReadCardFromBoxJS(SpReqAnsContext::Pointer ctx); virtual void Handle_MoveAndReadCardFromSlotJS(SpReqAnsContext::Pointer ctx); virtual void Handle_MoveBacktoSlotJS(SpReqAnsContext::Pointer ctx); //新增接口 virtual void Handle_AddCardFromBoxJS(SpReqAnsContext::Pointer ctx); virtual void Handle_MoveCardFromSlotJS(SpReqAnsContext::Pointer ctx); private: CCardIssuerEntity* m_pEntity; }; class CCardIssuerEntity : public CDevAdptEntityBase, public ISysVarListener { public: CCardIssuerEntity() :bInitialized(false) { } virtual ~CCardIssuerEntity(){} virtual const char *GetEntityName() const { return "CardIssuerStore"; } virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext) { LOG_FUNCTION(); ErrorCodeEnum eStart = m_fsm.Init(this); if (eStart == Error_Succeed) { } GetFunction()->RegistSysVarEvent("UIState", this); pTransactionContext->SendAnswer(eStart); } virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext) { ErrorCodeEnum Error = __OnStart(Error_Succeed); pTransactionContext->SendAnswer(Error); } virtual void OnPrePause(CSmartPointer pTransactionContext) { ErrorCodeEnum Error = __OnPause(Error_Succeed,pTransactionContext); pTransactionContext->SendAnswer(Error); } virtual ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError) { return Error_Succeed; } virtual ErrorCodeEnum __OnPause(ErrorCodeEnum preOperationError, CSmartPointer pTransactionContext) { return Error_Succeed; } virtual ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError) { return Error_Succeed; } virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer pTransactionContext) { m_fsm.SelfTest(eTestType,pTransactionContext); } virtual CServerSessionBase* OnNewSession(const char*,const char*) { DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("A new connecting request arrived."); m_bNewSessionInit = true; return new CardIssuerStoreServerSession(this); } void Read(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); CardReadEvent* e = new CardReadEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void Capture(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); CardCaptureEvent* e = new CardCaptureEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void Eject(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); CardEjectEvent* e = new CardEjectEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void PreOnline(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { if (ctx->Req.reserved1.GetLength() > 0 && strnicmp("kaku#", (const char*)ctx->Req.reserved1, 5) == 0) { int state = m_fsm.GetFSMState(); if (state == 9) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_EntityInFailState); return; } else if (state != 2 || m_fsm.CheckIsCrossPreOnline())//借用跨机标识来识别是否跨机中 { ctx->Answer(Error_InvalidState, CardIssuerStore_UserErrorCode_CardActive_CardStore_Issuing); return; } else if (!m_fsm.IsInMainPage()) {//判断是否在首页 DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PreOnline req is unhandled ,CardissuerStore is busying"); ctx->Answer(Error_InvalidState, CardIssuerStore_UserErrorCode_CardActive_CardStore_Issuing); return; } } PreOnlineEvent* e = new PreOnlineEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } } void PostOnline(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); PostOnlineEvent* e = new PostOnlineEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void Exit(SpOnewayCallContext::Pointer ctx) { LOG_FUNCTION(); m_bNewSessionInit = false; FSMEvent *evt = new FSMEvent(USER_EVT_EXIT); m_fsm.PostEventFIFO(evt); } void QueryCardInfo(SpReqAnsContext::Pointer ctx) { if (m_bNewSessionInit) { FSMEvent *pEvt = new FSMEvent(USER_EVT_EXIT); m_fsm.PostEventFIFO(pEvt); ctx->Ans.position = CI_MEDIA_NOTPRESENT; ctx->Answer(Error_Succeed); } else { ctx->Ans.position = m_fsm.QueryCardInfo(); ctx->Answer(Error_Succeed); } } void WriteTrack(SpReqAnsContext::Pointer ctx) { CardWriteEvent *pEvt = new CardWriteEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } void SetIssueFlag(SpOnewayCallContext::Pointer ctx){ m_fsm.FrontSetIssueFlag(true); } void GetMaterialCountEx(SpReqAnsContext::Pointer ctx) { m_bNewSessionInit = false; GetMaterialExEvent *pEvt = new GetMaterialExEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } void SetMaterialCountEx(SpReqAnsContext::Pointer ctx) { m_bNewSessionInit = false; SetMaterialExEvent *pEvt = new SetMaterialExEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } void SetSomeFlag(SpReqAnsContext::Pointer ctx) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set issue flag to %d", ctx->Req.IssueBusiness); if (ctx->Req.IssueBusiness == 1) m_fsm.FrontSetIssueFlag(true); else if (ctx->Req.IssueBusiness == 0) m_fsm.FrontSetIssueFlag(false); else if (ctx->Req.IssueBusiness == 2)//oilyang@20170621 query issue direction { ctx->Ans.reserved1.Init(1); ctx->Ans.reserved1[0] = (m_fsm.QueryIssueFlag() ? 0 : 1);//according to yzx DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("issue direction:%d",ctx->Ans.reserved1[0]);//if 0 capture card eles eject card } else if (ctx->Req.IssueBusiness == 3)//oilyang@20181210 { m_fsm.SetCancelByRFICFlag(); } else if (ctx->Req.IssueBusiness == 4)//oilyang@20181220 get ic card account,for simple/lazy... { ctx->Ans.reserved2.Init(1); ctx->Ans.reserved2[0] = m_fsm.GetPreOnlineICCardNo(); DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPreOnlineICCardNo:%d", ctx->Ans.reserved2[0].GetLength()); } if (ctx->Req.reserved1.GetCount() > 0) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set hopper num:%d",ctx->Req.reserved1[0]); if (ctx->Req.reserved1[0] == 1) m_fsm.SetHopperNum(1); else if (ctx->Req.reserved1[0] == 3) m_fsm.SetHopperNum(3); } ctx->Answer(Error_Succeed); } void IssueEx(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { m_bNewSessionInit = false; CardIssueExEvent* pEvt = new CardIssueExEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void SAMICCommand(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); SAMICCommandEvent *pEvt = new SAMICCommandEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } void QueryCardInfoOnStore(SpReqAnsContext::Pointer ctx) { if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { QueryCardInfoOnStoreEvent* pEvt = new QueryCardInfoOnStoreEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void GetAddCardInfo(SpReqAnsContext::Pointer ctx) { if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { m_fsm.GetAddCardInfo(ctx); } } void PrintCardImmediately(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); PrintCardImEvent* pEvt = new PrintCardImEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } void GetDevInfo(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); ctx->Ans.state = m_fsm.GetDevState(); DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo state=%d", ctx->Ans.state); if (m_fsm.GetDevInitingFlag()) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo device is opening,state return 0"); ctx->Ans.state = DEVICE_STATUS_NOT_READY; ctx->Answer(Error_NotInit, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { //设备未正常打开时,直接报state=0; if (!m_fsm.GetDevInitFlag()) { DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevInfo device is not open,state return 0"); ctx->Ans.state = DEVICE_STATUS_NOT_READY; ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { ctx->Answer(Error_Succeed); } } } void QueryCIStatus(SpReqAnsContext::Pointer ctx) { m_fsm.QueryCIStatus(ctx); } //实体具体接口实现 void EjectJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("EjectJS req is unhandled ,CurrState=%d",state); ctx->Answer(Error_Unexpect, errCode); } else { EjectJSEvent* e = new EjectJSEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } } void CaptureJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if(_stricmp(m_fsm.GetCurrStateName(), "Hold") == 0 || _stricmp(m_fsm.GetCurrStateName(), "Idle") == 0){ CaptureJSEvent* e = new CaptureJSEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } else { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CaptureJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } } void ReadBatchCardInfoInRangeJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ReadBatchCardInfoInRangeJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { ReadBatchCardInfoInRangeJSEvent* pEvt = new ReadBatchCardInfoInRangeJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void GetCardInStoreJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetCardInStoreJS but DevOpen failed."); } else { m_fsm.GetCardInStoreJS(ctx); } } void AddAndReadCardFromBoxJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("AddAndReadCardFromBoxJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { AddAndReadCardFromBoxJSEvent* pEvt = new AddAndReadCardFromBoxJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void AddCardFromBoxJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("AddCardFromBoxJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { AddCardFromBoxJSEvent* pEvt = new AddCardFromBoxJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void MoveAndReadCardFromSlotJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveAndReadCardFromSlotJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { MoveAndReadCardFromSlotJSEvent* pEvt = new MoveAndReadCardFromSlotJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void MoveCardFromSlotJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveCardFromSlotJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { MoveCardFromSlotJSEvent* pEvt = new MoveCardFromSlotJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void MoveBacktoSlotJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveBacktoSlotJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { MoveBacktoSlotJSEvent* pEvt = new MoveBacktoSlotJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void QueryHasCardJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("QueryHasCardJS but DevOpen failed."); ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else { m_fsm.QueryHasCardJS(ctx); } } void ICCommandJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ICCommandJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { ICCommandJSEvent* pEvt = new ICCommandJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void WriteTrackJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("WriteTrackJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { WriteTrackJSEvent* pEvt = new WriteTrackJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void PrintCardImmediatelyJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PrintCardImmediatelyJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { PrintCardImmediatelyJSEvent* pEvt = new PrintCardImmediatelyJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void PostOnlineJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PostOnlineJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { PostOnlineJSEvent* pEvt = new PostOnlineJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void IssueFromBoxJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("IssueFromBoxJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { IssueFromBoxJSEvent* pEvt = new IssueFromBoxJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void PreOnlineCrossJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Failed") == 0) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_EntityInFailState); return; } else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0 || m_fsm.CheckIsCrossPreOnline()) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PreOnlineCrossJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_InvalidState, CardIssuerStore_UserErrorCode_CardActive_CardStore_Issuing); return; } else if (!m_fsm.IsInMainPage()) { DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PreOnlineCrossJS req is unhandled ,CardissuerStore is busying"); ctx->Answer(Error_InvalidState, CardIssuerStore_UserErrorCode_CardActive_CardStore_Issuing); return; } else { PreOnlineCrossJSEvent* pEvt = new PreOnlineCrossJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } void ReadJS(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); if (!m_fsm.GetDevInitFlag()) { ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed); } else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) { //不符合请求调用,告知具体错误流程 DWORD errCode = m_fsm.GetFsmStateErrCode(); int state = m_fsm.GetFSMState(); DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ReadJS req is unhandled ,CurrState=%d", state); ctx->Answer(Error_Unexpect, errCode); } else { ReadJSEvent* pEvt = new ReadJSEvent(); pEvt->ctx = ctx; m_fsm.PostEventFIFO(pEvt); } } virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName); virtual bool IsService()const{return true;} virtual bool IsMultiThread()const{return true;} protected: private: CCardIssuerFSM m_fsm; bool bInitialized,m_bNewSessionInit; };