#include "stdafx.h" #include "SpBase.h" #include "SpTest.h" #include "modVer.h" #include "UpsFSM.h" #include "DevEntityCommBase.hpp" using namespace Ups; class CUpsEntity; class UpsServerSession : public UpsService_ServerSessionBase { public: UpsServerSession(CUpsEntity* pEntity) : m_pEntity(pEntity){} virtual ~UpsServerSession(){} virtual void Handle_Open(SpReqAnsContext::Pointer ctx); virtual void Handle_GetStatus(SpReqAnsContext::Pointer ctx); virtual void Handle_Shutdown(SpReqAnsContext::Pointer ctx); virtual void Handle_Close(SpReqAnsContext::Pointer ctx); private: CUpsEntity* m_pEntity; }; class CUpsEntity : public CDevAdptEntityBase { public: CUpsEntity(){} virtual ~CUpsEntity(){} virtual const char *GetEntityName() const { return "Ups"; } const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } virtual void OnPreStart(CAutoArray strArgs,CSmartPointer pTransactionContext) { LOG_FUNCTION(); ErrorCodeEnum err = m_fsm.Init(this); pTransactionContext->SendAnswer(err); } ON_ENTITYT_TEST() virtual void OnPrePause(CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext) { pTransactionContext->SendAnswer(Error_Succeed); } virtual CServerSessionBase* OnNewSession(const char*,const char*) { LOG_FUNCTION(); return new UpsServerSession(this); } void Open(SpReqAnsContext::Pointer ctx) { //OpenUpsEvent* e = new OpenUpsEvent(); //e->ctx = ctx; //m_fsm.PostEventFIFO(e); ctx->Answer(Error_NotImpl); } void GetStatus(SpReqAnsContext::Pointer ctx) { GetStatusEvent* e = new GetStatusEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void Shutdown(SpReqAnsContext::Pointer ctx) { ShutDownEvent* e = new ShutDownEvent(); e->ctx = ctx; m_fsm.PostEventFIFO(e); } void Close(SpReqAnsContext::Pointer ctx) { ctx->Answer(Error_NotImpl); } virtual bool IsService()const{return true;} virtual bool IsMultiThread()const{return false;} private: CUpsFSM m_fsm; }; void UpsServerSession::Handle_Open(SpReqAnsContext::Pointer ctx) { m_pEntity->Open(ctx); } void UpsServerSession::Handle_GetStatus(SpReqAnsContext::Pointer ctx) { m_pEntity->GetStatus(ctx); } void UpsServerSession::Handle_Shutdown(SpReqAnsContext::Pointer ctx) { m_pEntity->Shutdown(ctx); } void UpsServerSession::Handle_Close(SpReqAnsContext::Pointer ctx) { m_pEntity->Close(ctx); } SP_BEGIN_ENTITY_MAP() SP_ENTITY(CUpsEntity) SP_END_ENTITY_MAP()