#ifndef _MOD_CONTACTLESS_H #define _MOD_CONTACTLESS_H #pragma once #include "stdafx.h" #include "ContactlessFSM.h" #include "modVer.h" #include "SpTest.h" class CContactlessCardEntity; class ContactlessCardServerSession : public ContactlessCardService_ServerSessionBase { public: ContactlessCardServerSession(CContactlessCardEntity* pEntity):m_pEntity(pEntity){} virtual ~ContactlessCardServerSession(){} virtual void Handle_Insert(SpReqAnsContext::Pointer ctx); virtual void Handle_CancelInsert(SpOnewayCallContext::Pointer ctx); virtual void Handle_InsertWaitMore(SpOnewayCallContext::Pointer ctx); virtual void Handle_PreOnline(SpReqAnsContext::Pointer ctx); virtual void Handle_PostOnline(SpReqAnsContext::Pointer ctx); virtual void Handle_Eject(SpReqAnsContext::Pointer ctx); virtual void Handle_Exit(SpOnewayCallContext::Pointer ctx); virtual void Handle_QueryCardInfo(SpReqAnsContext::Pointer ctx); virtual void Handle_GetDevInfo(SpReqAnsContext::Pointer ctx); private: CContactlessCardEntity* m_pEntity; }; class CContactlessCardEntity : public CDevAdptEntityBase { public: CContactlessCardEntity() { } virtual ~CContactlessCardEntity(){} virtual const char *GetEntityName() const { return "ContactlessCard"; } virtual const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } ON_ENTITYT_TEST() virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext) { LOG_FUNCTION(); //MessageBoxA(0,0,0,0); ErrorCodeEnum eStart = m_fsm.Init(this); if (eStart == Error_Succeed) { } 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->SendAnswer(Error); } virtual ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError) { return Error_Succeed; } virtual ErrorCodeEnum __OnPause(ErrorCodeEnum preOperationError) { return Error_Succeed; } virtual ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError) { return Error_Succeed; } void Insert(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); m_fsm.SetExitFlag(false); CardAcceptEvent* e = new CardAcceptEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void CancelInsert(SpOnewayCallContext::Pointer ctx) { LOG_FUNCTION(); FSMEvent *evt = new FSMEvent(USER_EVT_ACCEPT_CANCEL); m_fsm.PostEventFIFO(evt); } void InsertWaitMore(SpOnewayCallContext::Pointer ctx) { if (m_fsm.GetWaitFlag()) m_fsm.SetWaitMore(); } void PreOnline(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); 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 Eject(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); CardEjectEvent* e = new CardEjectEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void Exit(SpOnewayCallContext::Pointer ctx) { LOG_FUNCTION(); FSMEvent *evt = new FSMEvent(USER_EVT_EXIT); m_fsm.PostEventFIFO(evt); } void QueryCardInfo(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); QueryCardInfoEvent* e = new QueryCardInfoEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void GetDevInfo(SpReqAnsContext::Pointer ctx) { LOG_FUNCTION(); } virtual void OnSelfTest(EntityTestEnum eTestType,CSmartPointer pTransactionContext) { m_fsm.SelfTest(eTestType,pTransactionContext); } virtual CServerSessionBase* OnNewSession(const char*,const char*) { return new ContactlessCardServerSession(this); } virtual bool IsService()const{return true;} virtual bool IsMultiThread()const{return true;} protected: private: CContactlessCardFSM m_fsm; private: }; #endif //_MOD_CONTACTLESS_H