SpEntity.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #pragma once
  2. class SpModule;
  3. #include "SpBase.h"
  4. #include "sp_cfg.h"
  5. #include "sp_mod.h"
  6. #include "sp_rpc.h"
  7. #include "sp_log.h"
  8. #include "sp_var.h"
  9. #include "sp_ses.h"
  10. #include "sp_tbs.h"
  11. #include "sp_bcm.h"
  12. #include "sp_def.h"
  13. #include "hashset.h"
  14. #include "spinlock.h"
  15. #include "threadpool.h"
  16. typedef struct SpTimerList SpTimerList;
  17. class SpEntity : public IEntityFunction//, public IEntityFunctionHidden
  18. {
  19. public:
  20. SpEntity(SpModule *pModule, sp_entity_t *ent, sp_cfg_shell_entity_t *cfg_ent, CEntityBase *pEntityBase);
  21. virtual ~SpEntity();
  22. sp_svc_t *get_svc() { return m_svc; }
  23. sp_rpc_client_mgr_t *get_rpc_mgr() { return m_rpc_mgr; }
  24. sp_ses_mgr_t *get_ses_mgr() { return m_ses_mgr; }
  25. virtual ErrorCodeEnum Init();
  26. virtual void Term();
  27. ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, const char *pMessage);
  28. ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, CAutoArray<DWORD> Param, const char *pMessage);
  29. ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, const char* pMessage, const linkContext &t_context);
  30. ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, CAutoArray<DWORD> Param, const char* pMessage, const linkContext& t_context);
  31. ErrorCodeEnum LogFlush();
  32. sp_entity_t *get_ent() { return m_ent; }
  33. sp_cfg_shell_entity_t *get_cfg_ent() { return m_cfg_ent; }
  34. CEntityBase *GetEntityBase() { return m_pEntityBase; }
  35. // finish ops
  36. void FinishStart(ErrorCodeEnum Error);
  37. void FinishClose(ErrorCodeEnum Error);
  38. void FinishPause(ErrorCodeEnum Error);
  39. void FinishContinue(ErrorCodeEnum Error);
  40. void FinishSelfTest(ErrorCodeEnum Error, DWORD dwResult);
  41. //
  42. // IEntityFunction
  43. //
  44. // timer
  45. virtual ErrorCodeEnum SetTimer(DWORD nTimerID, ITimerListener *pListener, DWORD dwInterval);
  46. virtual ErrorCodeEnum SetTimerData(DWORD dwTimerID, IReleasable *pData);
  47. virtual ErrorCodeEnum GetTimerData(DWORD dwTimerID, CSmartPointer<IReleasable> &pData);
  48. virtual ErrorCodeEnum KillTimer(DWORD nTimerID);
  49. virtual ErrorCodeEnum ResetTimer(DWORD dwTimerID, DWORD dwInterval);
  50. virtual ErrorCodeEnum GetTimerInterval(DWORD dwTimerID, DWORD &dwInterval);
  51. // log
  52. virtual ErrorCodeEnum SubscribeLog(CUUID &SubscribeID, ILogListener *pListener,LogTypeEnum eLogType=Log_Ignore,SeverityLevelEnum eLevel=Severity_None,
  53. ErrorCodeEnum eSysError=Error_IgnoreAll,DWORD dwUserCode=0,const char *pszEntityName=NULL,bool bIgnoreMessage=true);
  54. virtual ErrorCodeEnum UnsubscribeLog(CUUID SubscribeID);
  55. virtual ErrorCodeEnum FlushLogFile();
  56. /** Set self define state enum for out side notice */
  57. virtual ErrorCodeEnum SetUserDefineState(DWORD dwState);
  58. virtual DWORD GetUserDefineState();
  59. // sys-var
  60. virtual ErrorCodeEnum SetSysVar(const char *pszKey,const char *pszValue, bool bPersist =false);
  61. virtual ErrorCodeEnum GetSysVar(const char *pszKey,CSimpleStringA &strValue);
  62. virtual ErrorCodeEnum RegistSysVarEvent(const char *pszKey,ISysVarListener *pListener);
  63. virtual ErrorCodeEnum UnregistSysVarEvent(const char *pszKey);
  64. virtual ErrorCodeEnum RegistTerminalStateChangeEvent(ITerminalStateChangedListener* pListener);
  65. virtual ErrorCodeEnum UnregistTerminalStateChangeEvent();
  66. // evt bcast
  67. virtual ErrorCodeEnum SendBroadcast(DWORD dwMessageId, DWORD dwMessageSignature,CAutoBuffer Buffer);
  68. virtual ErrorCodeEnum GetBroadcastReceivers(CAutoArray<BroadcastSubscribeInfo> &Subscribers);
  69. virtual ErrorCodeEnum SubscribeBroadcast(const char *pszRemoteEntity, const char *pszParam, IBroadcastListener *pListener, CUUID &SubscribeID);
  70. virtual ErrorCodeEnum UnsubscribeBroadcast(CUUID SubscribeID);
  71. virtual ErrorCodeEnum UnsubscribeBroadcast(const char *pszRemoteEntity);
  72. // ini-config, always return Error_Succeed!!!!
  73. virtual ErrorCodeEnum OpenConfig(ConfigTypeEnum eConfigType,CSmartPointer<IConfigInfo> &pConfigInfo, bool forceFile);
  74. // gets
  75. virtual MachineTypeEnum GetMachineType(CSimpleStringA* outStrMachine = NULL);
  76. virtual ErrorCodeEnum GetSystemStaticInfo(CSystemStaticInfo &Info);
  77. virtual ErrorCodeEnum GetInstallInfo(CVersion Version,CInstallInfo &Info);
  78. virtual ErrorCodeEnum GetPath(const char *pszKey,CSimpleStringA &strPath);
  79. virtual ErrorCodeEnum GetSystemRunInfo(CSystemRunInfo &Info);
  80. virtual ErrorCodeEnum GetEntityBusyRate(WORD &nBusyEntity,WORD &nAllEntity);
  81. virtual ErrorCodeEnum GetRebootInfo(CSmallDateTime BeforeThisTime,CBootInfo &Info);
  82. virtual ErrorCodeEnum GetAllRegistSpFile(CAutoArray<CSimpleStringA> &strSpNames);
  83. virtual ErrorCodeEnum GetSpFileInfo(const char *pszSpName,CSpInfo &Info);
  84. virtual ErrorCodeEnum GetAllRegistedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<WORD> &wEntityDevelopIDs);
  85. virtual ErrorCodeEnum GetAllStartedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<DWORD> &dwEntityInstanceIDs);
  86. virtual ErrorCodeEnum GetSelfEntityRunInfo(CEntityRunInfo &Info);
  87. virtual ErrorCodeEnum GetEntityStaticInfo(const char *pszEntityName,CEntityStaticInfo &Info);
  88. virtual ErrorCodeEnum GetEntityStaticInfo(WORD wEntitySerialNO,CEntityStaticInfo &Info);
  89. virtual ErrorCodeEnum GetEntityRunInfo(const char *pszEntityName, CEntityRunInfo &Info);
  90. virtual ErrorCodeEnum GetEntityName(WORD wEntityDevelopID, CSimpleStringA &strName);
  91. virtual ErrorCodeEnum GetEntityName(DWORD dwEntityInstanceID, CSimpleStringA &strName);
  92. virtual ErrorCodeEnum GetModuleName(DWORD nModuleID, CSimpleStringA &strName); //@
  93. virtual ErrorCodeEnum GetEntitySessionInfo(const char *pszEntityName, CAutoArray<CEntitySessionInfo> &Infos);
  94. virtual ErrorCodeEnum GetAllEntityStartInfo(CAutoArray<CSimpleStringA>& strEntityNames, CAutoArray<int>& strEntityIdx, CAutoArray<CEntityStartInfo>& Infos);
  95. virtual ErrorCodeEnum GetEntityLogPath(const char* pszEntityName, CEntityLogInfo& Info);
  96. virtual WORD GetDevID();
  97. virtual ErrorCodeEnum GetToken(CSimpleString &channelId, CSimpleString &token);
  98. virtual ErrorCodeEnum SetNewPathToFirewall(CSimpleString &pszPath, int maxWaitMs = 30000); // Input path:D:\\Runxxx\\version\\7.1.1.1
  99. // connect
  100. virtual ErrorCodeEnum ConnectRemoteEntity(CClientSessionBase *pClientSession, const char *pszRemoteEntity,const char *pszParam,CSmartPointer<IAsynWaitSp> &pAsynWaitSp);
  101. virtual ErrorCodeEnum RedirectSession(CClientSessionBase *pClientSession);
  102. virtual ErrorCodeEnum RedirectSession(const char *pszSuggestEntity);
  103. virtual ErrorCodeEnum RedirectSubscribBroadcast(CUUID SubID, const char *pszSugguestEntity);
  104. // misc
  105. virtual bool HasPrivilege();
  106. virtual CSmartPointer<IEntityFunctionPrivilege> GetPrivilegeFunction();
  107. virtual ErrorCodeEnum PostQuit();
  108. virtual ErrorCodeEnum PostReload();
  109. virtual ErrorCodeEnum InitLogCurrentThread();
  110. virtual ErrorCodeEnum PostEntityTaskFIFO(ITaskSp *pTask);
  111. virtual ErrorCodeEnum PostEntityTaskLIFO(ITaskSp *pTask);
  112. virtual ErrorCodeEnum PostThreadPoolTask(ITaskSp *pTask);
  113. virtual ErrorCodeEnum StartTcpBridgeServer(unsigned short port);
  114. virtual ErrorCodeEnum StopTcpBridgeServer();
  115. virtual void SetPostLinkFun(postLink cur);
  116. virtual ErrorCodeEnum RequestCloseDelay(WORD nSecond);
  117. virtual void SendLog(const LogTypeEnum eLogType,const SeverityLevelEnum eLevel,DWORD dwUserEventCode,CAutoArray<DWORD> Param,const char *pszMessage=NULL);
  118. virtual ErrorCodeEnum VerifySignature(const char *pszSignedFile, CSimpleStringA &strErrInfo);
  119. virtual ErrorCodeEnum ShowFatalError(const char *pszMsg, SeverityLevelEnum eLevel = Severity_None);
  120. virtual ErrorCodeEnum ShowStartupInfo(const char *pszMsg);
  121. virtual ErrorCodeEnum GetEntityLastError(const char* pszEntityName, CEntityLastErrorInfo& errInfo);
  122. virtual void ResetEntityLastError();
  123. virtual ErrorCodeEnum GetRunningVersion(CSimpleString& ver);
  124. virtual ErrorCodeEnum GetRunningDepVersion(CSimpleString& ver);
  125. virtual ErrorCodeEnum GetVTMErrMsg(DWORD dwUserCode, CSimpleStringA& strDescription, CSimpleStringA& strVTMCode);
  126. virtual CSimpleStringA UserCodeToRTACode(DWORD dwUserCode);
  127. virtual ErrorCodeEnum SetSelfPriority(EntityPriorityEnum nPriority);
  128. virtual ErrorCodeEnum GetSelfPriority(EntityPriorityEnum& nPriority);
  129. protected:
  130. ErrorCodeEnum AskShell(int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
  131. ErrorCodeEnum PostInfoShell(int call_type, iobuffer_t **info_pkt);
  132. ErrorCodeEnum AskEntityByRPC(const char* pszEntityName, int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
  133. void SetEntityLastError(ErrorCodeEnum systemCode, DWORD dwUserCode, const char* lpcszMessage);
  134. private:
  135. void on_entity_prestart(int trigger_entity_id, int argc, char *argv[]);
  136. void on_entity_stop(int trigger_entity_id, int cause_code);
  137. void on_entity_prepause(int trigger_entity_id);
  138. void on_entity_precontinue(int trigger_entity_id);
  139. void on_entity_test(int trigger_entity_id, int test_type);
  140. void on_entity_redirect_subscribe(sp_uid_t *uid, int from_entity_id, const char *param);
  141. static void __on_entity_prestart(sp_mod_entity_stub_t *, int trigger_entity_id, int argc, char *argv[], void *user_data);
  142. static void __on_entity_stop(sp_mod_entity_stub_t *, int trigger_entity_id, int cause_code, void *user_data);
  143. static void __on_entity_prepause(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
  144. static void __on_entity_precontinue(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
  145. static void __on_entity_test(sp_mod_entity_stub_t *, int trigger_entity_id, int test_type, void *user_data);
  146. static void __on_entity_redirect_subscribe(sp_mod_entity_stub_t *, sp_uid_t *uid, int from_entity_id, const char *param, void *user_data);
  147. static int __on_accept(sp_ses_mgr_t *mgr, int epid, int svc_id, int conn_id, iobuffer_t **conn_pkt, int *redirect_entity_id, void *user_data);
  148. int on_accept(int epid, int svc_id, int conn_id, iobuffer_t **conn_pkt, int *redirect_entity_id);
  149. void OnQueryEntitySessions(int epid, int svc_id, int rpc_id);
  150. static void __on_rpc_request(sp_rpc_client_mgr_t *mgr, int epid, int svc_id, int rpc_id, int call_type, iobuffer_t **req_pkt, void *user_data);
  151. void on_thread_init();
  152. void on_thread_term();
  153. static void __on_thread_init(threadpool_t *, void *);
  154. static void __on_thread_term(threadpool_t *, void *);
  155. protected:
  156. CEntityBase *m_pEntityBase;
  157. SpModule *m_pModule;
  158. SpTimerList *m_pTimerList;
  159. sp_entity_t *m_ent;
  160. sp_cfg_shell_entity_t *m_cfg_ent;
  161. sp_mod_entity_stub_t *m_stub;
  162. sp_var_client_t *m_var_client;
  163. sp_bcm_client_t *m_bcm_client;
  164. sp_log_client_t *m_log_client;
  165. sp_svc_t *m_svc;
  166. sp_rpc_client_mgr_t *m_rpc_mgr;
  167. sp_ses_mgr_t *m_ses_mgr;
  168. sp_tbs_t *m_tbs;
  169. array_header_t *m_arr_bcm_listener;
  170. sp_var_listener_t *m_arr_var[SP_MAX_SYSEVT];
  171. sp_var_listener_t *m_arr_any_var;
  172. threadpool_t *m_tpool;
  173. sp_log_listener_mgr_t *m_log_mgr;
  174. sp_entity_t *m_redirect_entity_cache;
  175. };