guitask.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #ifndef __GUI_TASK_H
  2. #define __GUI_TASK_H
  3. #pragma once
  4. #include "SpBase.h"
  5. #include "SpFSM.h"
  6. #if defined(RVC_OS_LINUX)
  7. #include <pthread.h>
  8. #endif //RVC_OS_LINUX
  9. struct EntityEntry
  10. {
  11. CSimpleStringA Name;
  12. CSimpleStringA ModuleName;
  13. int Type;
  14. int State;
  15. int Id;
  16. int Pid;
  17. int DevelopID;
  18. int DebugLevel;
  19. static const char *GetTypeName(int type)
  20. {
  21. static const char *_names[] = {
  22. "auto",
  23. "manual"
  24. };
  25. return _names[type % ARRAYSIZE(_names)];
  26. }
  27. static const char *GetStateName(int state)
  28. {
  29. static const char *_names[] = {
  30. "NoStart",
  31. "Starting",
  32. "Idle",
  33. "Busy",
  34. "Pause",
  35. "UnLoading",
  36. "Lost",
  37. "Close",
  38. "Killed",
  39. };
  40. return _names[state % ARRAYSIZE(_names)];
  41. }
  42. static const char *GetErrorName(ErrorCodeEnum Error)
  43. {
  44. return "Unknown Error";
  45. }
  46. };
  47. struct StartMenuEntry
  48. {
  49. CSimpleStringA strEntity;
  50. CSimpleStringA strCmdLine;
  51. };
  52. class GUITask : public ICallbackListener, public IEntityStateListener, public ILogListener
  53. {
  54. public:
  55. GUITask();
  56. virtual ~GUITask();
  57. ErrorCodeEnum Kickoff(CEntityBase *pEntity);
  58. ErrorCodeEnum Close();
  59. ErrorCodeEnum AsyncStartEntity(const char *entity_name, const char *cmdline, void *pData);
  60. ErrorCodeEnum AsyncStopEntity(const char *entity_name, void *pData);
  61. ErrorCodeEnum AsyncPauseEntity(const char *entity_name, void *pData);
  62. ErrorCodeEnum AsyncContinueEntity(const char *entity_name, void *pData);
  63. ErrorCodeEnum AsyncTerminateEntity(const char *entity_name, void *pData);
  64. ErrorCodeEnum GetAllEntity(CAutoArray<EntityEntry> &Entities);
  65. ErrorCodeEnum GetEntity(const char *entity_name, EntityEntry &e);
  66. ErrorCodeEnum GetCustomizeStartMenuList(CAutoArray<StartMenuEntry> &StartItems);
  67. ErrorCodeEnum SubscribeLog();
  68. ErrorCodeEnum UnSubscribeLog();
  69. inline bool HasSubscibeLog() const {return (u__int64_t)m_logSubID != 0;}
  70. ErrorCodeEnum SetDebugLevel(const char *pszEntity, int nLevel);
  71. ErrorCodeEnum GetShellDebugLevel(int &nLevel);
  72. ErrorCodeEnum GetFrameworkInfo(CSimpleStringA &strInfo);
  73. ErrorCodeEnum ReqFrameworkQuit(bool bRebootOS);
  74. ErrorCodeEnum BeginInitialize();
  75. ErrorCodeEnum ShowMobileDialog();
  76. ErrorCodeEnum DeleteKeySet();
  77. ErrorCodeEnum BeginAccessAuth();
  78. CEntityBase* GetEntity();
  79. ErrorCodeEnum ShowMaintainView(bool bShow, bool bHighLevel);
  80. ErrorCodeEnum SetWindowPosition(bool bTop);
  81. ErrorCodeEnum ShowBeginInit(bool bShow);
  82. ErrorCodeEnum EnableMobileDialMenu(bool bEnable);
  83. void CloseSoftKeyboard();
  84. ErrorCodeEnum ShowBlueScreen();
  85. ErrorCodeEnum ShowFatalError();
  86. ErrorCodeEnum HideBlueScreen();
  87. ErrorCodeEnum ShowOutputConsole();
  88. ErrorCodeEnum CloseOutputConsole();
  89. // IEntityStateListener
  90. virtual void OnEntityStateHook(const char *pszEntityName,const char *pszTriggerEntity,EntityStateEnum eState,EntityStateEnum eLastState);
  91. virtual void OnCeateConnection(const char *pszCallerEntity,const char *pszServiceEntity) {}
  92. virtual void OnCloseConnection(const char *pszCallerEntity,const char *pszServiceEntity) {}
  93. virtual void OnUserStateHook(const char *pszEntityName,DWORD dwState,DWORD dwLastState) {
  94. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("OnUserStateHook: %s, %d -> %d", pszEntityName, dwLastState, dwState);
  95. }
  96. // ICallbackListener
  97. virtual void OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp);
  98. // ILogListener
  99. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  100. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  101. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext& pLinkInfo);
  102. private:
  103. ErrorCodeEnum OutputMsg(const char *pMsg);
  104. ErrorCodeEnum RegistEntityStateEvent();
  105. ErrorCodeEnum UnregistEntityStateEvent();
  106. void Process();
  107. static unsigned int __stdcall __Process(void *arg)
  108. {
  109. GUITask *pThis = static_cast<GUITask *>(arg);
  110. pThis->Process();
  111. #if defined(RVC_OS_WIN)
  112. _endthreadex(0);
  113. #else
  114. pthread_exit(0);
  115. #endif //RVC_OS_WIN
  116. return 0;
  117. }
  118. private:
  119. HANDLE m_hEventStartReady;
  120. HANDLE m_hEventStopReady;
  121. HANDLE m_hThread;
  122. HWND m_hWndMainFrame;
  123. CEntityBase *m_pEntity;
  124. CUUID m_logSubID;
  125. bool m_bHighLevel;
  126. };
  127. #endif // __GUI_TASK_H