mod_GuiConsole.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #pragma once
  2. #include "GUIConsole_def_g.h"
  3. #include "GUIConsole_server_g.h"
  4. using namespace GUIConsole;
  5. #include "SpBase.h"
  6. #include "guiconsole_define.h"
  7. #include <thread>
  8. #include <condition_variable>
  9. #include <mutex>
  10. #include <chrono>
  11. // 本地控制台 GUIConsole 0x508
  12. class CGUIConsoleEntity;
  13. class CGUIConsoleSession : public GUIConsoleService_ServerSessionBase
  14. {
  15. public:
  16. CGUIConsoleSession(CGUIConsoleEntity* pEntity) :m_pEntity(pEntity) {}
  17. virtual ~CGUIConsoleSession() {}
  18. virtual void Handle_OpenLogSender(SpReqAnsContext<GUIConsoleService_OpenLogSender_Req, GUIConsoleService_OpenLogSender_Ans>::Pointer ctx);
  19. virtual void Handle_CloseLogSender(SpReqAnsContext<GUIConsoleService_CloseLogSender_Req, GUIConsoleService_CloseLogSender_Ans>::Pointer ctx);
  20. virtual void Handle_OpenEntityMonitor(SpReqAnsContext<GUIConsoleService_OpenEntityMonitor_Req, GUIConsoleService_OpenEntityMonitor_Ans>::Pointer ctx);
  21. virtual void Handle_CloseEntityMonitor(SpReqAnsContext<GUIConsoleService_CloseEntityMonitor_Req, GUIConsoleService_CloseEntityMonitor_Ans>::Pointer ctx);
  22. virtual void Handle_OpenPerformanceSender(SpReqAnsContext<GUIConsoleService_OpenPerformanceSender_Req, GUIConsoleService_OpenPerformanceSender_Ans>::Pointer ctx);
  23. virtual void Handle_ClosePerformanceSender(SpReqAnsContext<GUIConsoleService_ClosePerformanceSender_Req, GUIConsoleService_ClosePerformanceSender_Ans>::Pointer ctx);
  24. virtual void Handle_VTMSystemControl(SpReqAnsContext<GUIConsoleService_VTMSystemControl_Req, GUIConsoleService_VTMSystemControl_Ans>::Pointer ctx);
  25. virtual void Handle_VTM_controlEntity(SpReqAnsContext<GUIConsoleService_VTM_controlEntity_Req, GUIConsoleService_VTM_controlEntity_Ans>::Pointer ctx);
  26. virtual void Handle_GetAllEntityList(SpReqAnsContext<GUIConsoleService_GetAllEntityList_Req, GUIConsoleService_GetAllEntityList_Ans>::Pointer ctx);
  27. virtual void Handle_GetBasicInformation(SpReqAnsContext<GUIConsoleService_GetBasicInformation_Req, GUIConsoleService_GetBasicInformation_Ans>::Pointer ctx);
  28. virtual void Handle_GetHelpInformationArr(SpReqAnsContext<GUIConsoleService_GetHelpInformationArr_Req, GUIConsoleService_GetHelpInformationArr_Ans>::Pointer ctx);
  29. virtual void Handle_GetHelpDetail(SpReqAnsContext<GUIConsoleService_GetHelpDetail_Req, GUIConsoleService_GetHelpDetail_Ans>::Pointer ctx);
  30. virtual void Handle_OpenCommonPage(SpReqAnsContext<GUIConsoleService_OpenCommonPage_Req, GUIConsoleService_OpenCommonPage_Ans>::Pointer ctx);
  31. virtual void Handle_CloseCommonPage(SpReqAnsContext<GUIConsoleService_CloseCommonPage_Req, GUIConsoleService_CloseCommonPage_Ans>::Pointer ctx);
  32. virtual void Handle_ReservedCall(SpReqAnsContext<GUIConsoleService_ReservedCall_Req, GUIConsoleService_ReservedCall_Ans>::Pointer ctx);
  33. private:
  34. CGUIConsoleEntity* m_pEntity;
  35. };
  36. class CGUIConsoleEntity : public CEntityBase, public ILogListener, public ITimerListener, IEntityStateListener, ICallbackListener
  37. {
  38. public:
  39. CGUIConsoleEntity();
  40. virtual ~CGUIConsoleEntity();
  41. virtual const char *GetEntityName() const { return "GUIConsole"; }
  42. const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
  43. virtual bool IsService()const{return true;}
  44. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext);
  45. void OnStarted() {}
  46. virtual CServerSessionBase* OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszParam*/)
  47. {
  48. return new CGUIConsoleSession(this);
  49. }
  50. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext) ;
  51. std::pair<DWORD, std::string> openLogSender(SpReqAnsContext<GUIConsoleService_OpenLogSender_Req, GUIConsoleService_OpenLogSender_Ans>::Pointer ctx);
  52. std::pair<DWORD, std::string> closeLogSender();
  53. std::pair<DWORD, std::string> openEntityMonitor(SpReqAnsContext<GUIConsoleService_OpenEntityMonitor_Req, GUIConsoleService_OpenEntityMonitor_Ans>::Pointer ctx);
  54. std::pair<DWORD, std::string> closeEntityMonitor();
  55. std::pair<DWORD, std::string> openPerformanceSender(SpReqAnsContext<GUIConsoleService_OpenPerformanceSender_Req, GUIConsoleService_OpenPerformanceSender_Ans>::Pointer ctx);
  56. std::pair<DWORD, std::string> closePerformanceSender();
  57. std::pair<DWORD, std::string> VTMSystemControl(SpReqAnsContext<GUIConsoleService_VTMSystemControl_Req, GUIConsoleService_VTMSystemControl_Ans>::Pointer ctx);
  58. std::pair<DWORD, std::string> VTM_controlEntity(SpReqAnsContext<GUIConsoleService_VTM_controlEntity_Req, GUIConsoleService_VTM_controlEntity_Ans>::Pointer ctx);
  59. std::pair<DWORD, std::string> GetBasicInformation(SpReqAnsContext<GUIConsoleService_GetBasicInformation_Req, GUIConsoleService_GetBasicInformation_Ans>::Pointer ctx);
  60. std::pair<DWORD, std::string> GetHelpInformationArr(SpReqAnsContext<GUIConsoleService_GetHelpInformationArr_Req, GUIConsoleService_GetHelpInformationArr_Ans>::Pointer ctx);
  61. std::pair<DWORD, std::string> GetHelpDetail(SpReqAnsContext<GUIConsoleService_GetHelpDetail_Req, GUIConsoleService_GetHelpDetail_Ans>::Pointer ctx);
  62. CSimpleString getRunVersion();
  63. private:
  64. // ILogListener
  65. virtual void OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  66. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  67. const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo);
  68. //ITimerListener
  69. void OnTimeout(DWORD dwTimerID);
  70. //IEntityStateListener
  71. virtual void OnEntityStateHook(const char* pszEntityName, const char* pszTriggerEntity, EntityStateEnum eState, EntityStateEnum eLastState);
  72. virtual void OnCeateConnection(const char* pszCallerEntity, const char* pszServiceEntity) {}
  73. virtual void OnCloseConnection(const char* pszCallerEntity, const char* pszServiceEntity) {}
  74. virtual void OnUserStateHook(const char* pszEntityName, DWORD dwState, DWORD dwLastState) {}
  75. void updateStartupEntity();
  76. public:
  77. //Async
  78. ErrorCodeEnum AsyncStartEntity(const char* entity_name, const char* cmdline, void* pData);
  79. ErrorCodeEnum AsyncStopEntity(const char* entity_name, void* pData);
  80. ErrorCodeEnum AsyncPauseEntity(const char* entity_name, void* pData);
  81. ErrorCodeEnum AsyncContinueEntity(const char* entity_name, void* pData);
  82. ErrorCodeEnum AsyncTerminateEntity(const char* entity_name, void* pData);
  83. //sync
  84. int sync_StartEntity(const char* entity_name, const char* cmdline, void* pData);
  85. int sync_StopEntity(const char* entity_name, void* pData);
  86. int sync_PauseEntity(const char* entity_name, void* pData);
  87. int sync_ContinueEntity(const char* entity_name, void* pData);
  88. int sync_TerminateEntity(const char* entity_name, void* pData);
  89. int sync_OpenLog(const char* entity_name, void* pData);
  90. ErrorCodeEnum GetEntity(const char* entity_name, EntityEntry& e);
  91. std::pair<DWORD, std::string> GetAllEntity(CAutoArray<EntityEntry>& Entities);
  92. void PostEntityVary(const char* entity_name);
  93. //ICallbackListener
  94. virtual void OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp);
  95. private:
  96. bool m_isOpenLogSender, m_isOpenEntityMonitor, m_isOpenPerformanceSender;
  97. int m_performanceSenderFrequence, m_sendLogType;
  98. CUUID m_logSubID;
  99. std::thread *thread_performanceSend, *thread_entityMonitor;
  100. int m_longestEntityMonitor, m_leastEntityMonitor;
  101. bool m_entityMonitor_shouldwork;
  102. std::chrono::steady_clock::time_point m_entityMonitorlast_notify_time;
  103. std::vector<std::string> m_startupEntityArr;
  104. };