guitask.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #ifndef __GUI_TASK_H
  2. #define __GUI_TASK_H
  3. #pragma once
  4. #include "SpBase.h"
  5. #include "SpFSM.h"
  6. #include "rpc_server.h"
  7. using namespace rest_rpc;
  8. using namespace rpc_service;
  9. #include <fstream>
  10. #include <memory>
  11. #include <vector>
  12. #include "qps.h"
  13. #include "format.hpp"
  14. struct EntityEntryPlus
  15. {
  16. std::string Name;
  17. std::string ModuleName;
  18. int Type;
  19. int State;
  20. int Id;
  21. int Pid;
  22. int DevelopID;
  23. int DebugLevel;
  24. MSGPACK_DEFINE(Name, ModuleName, Type, State, Id, Pid, DevelopID, DebugLevel);
  25. };
  26. struct EntityEntryPlusVec {
  27. std::vector<EntityEntryPlus> entityArr;
  28. MSGPACK_DEFINE(entityArr);
  29. virtual bool Read(msgpack::object& obj)
  30. {
  31. obj.convert(*this);
  32. return true;
  33. }
  34. virtual bool Write(msgpack::packer<msgpack::sbuffer>& pack)
  35. {
  36. pack.pack(*this);
  37. return true;
  38. }
  39. };
  40. struct outputMsg {
  41. std::string entityName;
  42. int logType;
  43. int logLevel;
  44. LONG sysError;
  45. LONG userCode;
  46. std::string msg;
  47. static const char* GetLogType(int state)
  48. {
  49. static const char* _names[] = {
  50. "Ignore","Event","Warning","Error","Debug"
  51. };
  52. return _names[state % ARRAYSIZE(_names)];
  53. }
  54. MSGPACK_DEFINE(entityName, logType, logLevel, sysError, userCode, msg);
  55. };
  56. struct entityStateChange
  57. {
  58. std::string entityName;
  59. int state;
  60. int pid;
  61. MSGPACK_DEFINE(entityName, state, pid);
  62. };
  63. struct EntityEntry
  64. {
  65. CSimpleStringA Name;
  66. CSimpleStringA ModuleName;
  67. int Type;
  68. int State;
  69. int Id;
  70. int Pid;
  71. int DevelopID;
  72. int DebugLevel;
  73. static const char *GetTypeName(int type)
  74. {
  75. static const char *_names[] = {
  76. "auto",
  77. "manual"
  78. };
  79. return _names[type % ARRAYSIZE(_names)];
  80. }
  81. static const char *GetStateName(int state)
  82. {
  83. static const char *_names[] = {
  84. "NoStart",
  85. "Starting",
  86. "Idle",
  87. "Busy",
  88. "Pause",
  89. "UnLoading",
  90. "Lost",
  91. "Close",
  92. "Killed",
  93. };
  94. return _names[state % ARRAYSIZE(_names)];
  95. }
  96. static const char *GetErrorName(ErrorCodeEnum Error)
  97. {
  98. return "Unknown Error";
  99. }
  100. };
  101. struct StartMenuEntry
  102. {
  103. CSimpleStringA strEntity;
  104. CSimpleStringA strCmdLine;
  105. };
  106. class GUITask : public ICallbackListener, public IEntityStateListener, public ILogListener
  107. {
  108. public:
  109. GUITask();
  110. virtual ~GUITask();
  111. void Kickoff(CEntityBase* pEntity);
  112. ErrorCodeEnum AsyncStartEntity(const char *entity_name, const char *cmdline, void *pData);
  113. ErrorCodeEnum AsyncStopEntity(const char *entity_name, void *pData);
  114. ErrorCodeEnum AsyncPauseEntity(const char *entity_name, void *pData);
  115. ErrorCodeEnum AsyncContinueEntity(const char *entity_name, void *pData);
  116. ErrorCodeEnum AsyncTerminateEntity(const char *entity_name, void *pData);
  117. ErrorCodeEnum GetAllEntity(CAutoArray<EntityEntry> &Entities);
  118. ErrorCodeEnum GetEntity(const char *entity_name, EntityEntry &e);
  119. ErrorCodeEnum GetCustomizeStartMenuList(CAutoArray<StartMenuEntry> &StartItems);
  120. ErrorCodeEnum SubscribeLog();
  121. ErrorCodeEnum UnSubscribeLog();
  122. inline bool HasSubscibeLog(){return (__int64)m_logSubID != 0;}
  123. ErrorCodeEnum SetDebugLevel(const char *pszEntity, int nLevel);
  124. ErrorCodeEnum GetShellDebugLevel(int &nLevel);
  125. ErrorCodeEnum GetFrameworkInfo(CSimpleStringA &strInfo);
  126. ErrorCodeEnum ReqFrameworkQuit(bool bRebootOS);
  127. ErrorCodeEnum BeginInitialize();
  128. ErrorCodeEnum DeleteKeySet();
  129. ErrorCodeEnum BeginAccessAuth();
  130. CEntityBase* GetEntity();
  131. ErrorCodeEnum ShowMaintainView(bool bShow, bool bHighLevel);
  132. ErrorCodeEnum SetWindowPosition(bool bTop);
  133. ErrorCodeEnum ShowBeginInit(bool bShow);
  134. void CloseSoftKeyboard();
  135. ErrorCodeEnum ShowBlueScreen();
  136. ErrorCodeEnum ShowFatalError();
  137. ErrorCodeEnum HideBlueScreen();
  138. ErrorCodeEnum ShowOutputConsole();
  139. ErrorCodeEnum CloseOutputConsole();
  140. // IEntityStateListener
  141. virtual void OnEntityStateHook(const char *pszEntityName,const char *pszTriggerEntity,EntityStateEnum eState,EntityStateEnum eLastState);
  142. virtual void OnCeateConnection(const char *pszCallerEntity,const char *pszServiceEntity) {}
  143. virtual void OnCloseConnection(const char *pszCallerEntity,const char *pszServiceEntity) {}
  144. virtual void OnUserStateHook(const char *pszEntityName,DWORD dwState,DWORD dwLastState) {
  145. //Dbg("OnUserStateHook: %s, %d -> %d", pszEntityName, dwLastState, dwState);
  146. }
  147. // ICallbackListener
  148. virtual void OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp);
  149. // ILogListener
  150. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  151. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  152. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage);
  153. CSimpleString m_lastErrorMsg;
  154. //rpc call function
  155. bool openrpcServer(int port);
  156. void publishMsg(outputMsg out);
  157. private:
  158. std::unique_ptr<rpc_server> m_server;
  159. private:
  160. ErrorCodeEnum OutputMsg(const char *pMsg);
  161. ErrorCodeEnum RegistEntityStateEvent();
  162. ErrorCodeEnum UnregistEntityStateEvent();
  163. private:
  164. HANDLE m_hEventStartReady;
  165. HANDLE m_hEventStopReady;
  166. HANDLE m_hThread;
  167. HWND m_hWndMainFrame;
  168. CEntityBase *m_pEntity;
  169. CUUID m_logSubID;
  170. bool m_bHighLevel;
  171. };
  172. extern GUITask g_task;
  173. template<class TFirst, class... TOther>
  174. void outputMsgToGUI(const char* format, TFirst&& first, TOther&&... other);
  175. #endif // __GUI_TASK_H