mod_RemoteController.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "stdafx.h"
  2. #include "SpBase.h"
  3. #include "Event.h"
  4. #include "RemoteController_server_g.h"
  5. using namespace RemoteController;
  6. #include "RemoteControllerFSM.h"
  7. // Ô¶³Ì¿ØÖÆ 0x504
  8. class CRemoteControllerEntity;
  9. class CRemoteControllerSession : public RemoteControllerService_ServerSessionBase
  10. {
  11. public:
  12. CRemoteControllerSession(CRemoteControllerEntity *pEntity) : m_pEntity(pEntity) {}
  13. virtual ~CRemoteControllerSession() {}
  14. private:
  15. CRemoteControllerEntity *m_pEntity;
  16. };
  17. //class PinPadClass;
  18. class CRemoteControllerEntity : public CEntityBase, public ILogListener
  19. {
  20. public:
  21. CRemoteControllerEntity() { }
  22. virtual ~CRemoteControllerEntity() {}
  23. virtual const char *GetEntityName() const { return "RemoteController"; }
  24. virtual bool IsService()const{return true;}
  25. virtual void OnStarted()
  26. {
  27. m_FSM.Init(this);
  28. // subscribe heartbeat entity event for create remote control channel
  29. GetFunction()->SubscribeLog(m_LogSubID, this, Log_Event, Severity_None, Error_IgnoreAll, EVENT_START_REMOTE_CONTROL, "HeartBeat", true);
  30. }
  31. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
  32. {
  33. m_FSM.PostExitEvent();
  34. GetFunction()->UnsubscribeLog(m_LogSubID);
  35. pTransactionContext->SendAnswer(Error_Succeed);
  36. }
  37. virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszClass*/)
  38. {
  39. return new CRemoteControllerSession(this);
  40. }
  41. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  42. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  43. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo)
  44. {
  45. //assert(dwUserCode == EVENT_START_REMOTE_CONTROL);
  46. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnLog")("recv log event: %d", dwUserCode);
  47. if (dwUserCode == EVENT_START_REMOTE_CONTROL)
  48. {
  49. if (m_FSM.GetCurrStateName() != "None")
  50. {
  51. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnLog")("already in remote control mode, terminate it now");
  52. m_FSM.PostEventFIFO(new FSMEvent(CRemoteControllerFSM::Event_ReleaseChannel));
  53. }
  54. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnLog")("trigger event Event_CreateChannel");
  55. m_FSM.PostEventFIFO(new FSMEvent(CRemoteControllerFSM::Event_CreateChannel));
  56. }
  57. }
  58. protected:
  59. CUUID m_LogSubID;
  60. CRemoteControllerFSM m_FSM;
  61. };
  62. SP_BEGIN_ENTITY_MAP()
  63. SP_ENTITY(CRemoteControllerEntity)
  64. SP_END_ENTITY_MAP()