SpEntity.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. // persist
  52. virtual ErrorCodeEnum ReadPersistObject(const char *pszClass, const char *pszKey, IEntityPersistObject *pInstance);
  53. virtual ErrorCodeEnum WritePersistObject(const char *pszClass, const char *pszKey, const IEntityPersistObject *pInstance);
  54. virtual ErrorCodeEnum ReadNumOfPersistObject(const char *pClassName,DWORD &nNum);
  55. virtual ErrorCodeEnum GetPersistClassObjectKeys(const char *pClassName, CAutoArray<CSimpleStringA> &Keys);
  56. virtual ErrorCodeEnum DeleteKeyOfPersistObject(const char *pClassName,const char *pszKey);
  57. virtual ErrorCodeEnum EnumKeyOfPersistObject(const char *pClassName,CSimpleStringA &strKey,DWORD &Handle);
  58. virtual ErrorCodeEnum CleanAllOfPersistObject(const char *pClassName);
  59. // log
  60. virtual ErrorCodeEnum SubscribeLog(CUUID &SubscribeID, ILogListener *pListener,LogTypeEnum eLogType=Log_Ignore,SeverityLevelEnum eLevel=Severity_None,
  61. ErrorCodeEnum eSysError=Error_IgnoreAll,DWORD dwUserCode=0,const char *pszEntityName=NULL,bool bIgnoreMessage=true);
  62. virtual ErrorCodeEnum UnsubscribeLog(CUUID SubscribeID);
  63. virtual ErrorCodeEnum FlushLogFile();
  64. /** Set self define state enum for out side notice */
  65. virtual ErrorCodeEnum SetUserDefineState(DWORD dwState);
  66. virtual DWORD GetUserDefineState();
  67. // sys-var
  68. virtual ErrorCodeEnum SetSysVar(const char *pszKey,const char *pszValue, bool bPersist =false);
  69. virtual ErrorCodeEnum GetSysVar(const char *pszKey,CSimpleStringA &strValue);
  70. virtual ErrorCodeEnum RegistSysVarEvent(const char *pszKey,ISysVarListener *pListener);
  71. virtual ErrorCodeEnum UnregistSysVarEvent(const char *pszKey);
  72. virtual ErrorCodeEnum RegistTerminalStateChangeEvent(ITerminalStateChangedListener* pListener);
  73. virtual ErrorCodeEnum UnregistTerminalStateChangeEvent();
  74. // evt bcast
  75. virtual ErrorCodeEnum SendBroadcast(DWORD dwMessageId, DWORD dwMessageSignature,CAutoBuffer Buffer);
  76. virtual ErrorCodeEnum GetBroadcastReceivers(CAutoArray<BroadcastSubscribeInfo> &Subscribers);
  77. virtual ErrorCodeEnum SubscribeBroadcast(const char *pszRemoteEntity, const char *pszParam, IBroadcastListener *pListener, CUUID &SubscribeID);
  78. virtual ErrorCodeEnum UnsubscribeBroadcast(CUUID SubscribeID);
  79. virtual ErrorCodeEnum UnsubscribeBroadcast(const char *pszRemoteEntity);
  80. // ini-config, always return Error_Succeed!!!!
  81. virtual ErrorCodeEnum OpenConfig(ConfigTypeEnum eConfigType,CSmartPointer<IConfigInfo> &pConfigInfo, bool forceFile);
  82. // gets
  83. virtual ErrorCodeEnum GetSystemStaticInfo(CSystemStaticInfo &Info);
  84. virtual ErrorCodeEnum GetInstallInfo(CVersion Version,CInstallInfo &Info);
  85. virtual ErrorCodeEnum GetPath(const char *pszKey,CSimpleStringA &strPath);
  86. virtual ErrorCodeEnum GetSystemRunInfo(CSystemRunInfo &Info);
  87. virtual ErrorCodeEnum GetEntityBusyRate(WORD &nBusyEntity,WORD &nAllEntity);
  88. virtual ErrorCodeEnum GetRebootInfo(CSmallDateTime BeforeThisTime,CBootInfo &Info);
  89. virtual ErrorCodeEnum GetAllRegistSpFile(CAutoArray<CSimpleStringA> &strSpNames);
  90. virtual ErrorCodeEnum GetSpFileInfo(const char *pszSpName,CSpInfo &Info);
  91. virtual ErrorCodeEnum GetAllRegistedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<WORD> &wEntityDevelopIDs);
  92. virtual ErrorCodeEnum GetAllStartedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<DWORD> &dwEntityInstanceIDs);
  93. virtual ErrorCodeEnum GetSelfEntityRunInfo(CEntityRunInfo &Info);
  94. virtual ErrorCodeEnum GetEntityStaticInfo(const char *pszEntityName,CEntityStaticInfo &Info);
  95. virtual ErrorCodeEnum GetEntityStaticInfo(WORD wEntitySerialNO,CEntityStaticInfo &Info);
  96. virtual ErrorCodeEnum GetEntityRunInfo(const char *pszEntityName, CEntityRunInfo &Info);
  97. virtual ErrorCodeEnum GetEntityName(WORD wEntityDevelopID, CSimpleStringA &strName);
  98. virtual ErrorCodeEnum GetEntityName(DWORD dwEntityInstanceID, CSimpleStringA &strName);
  99. virtual ErrorCodeEnum GetModuleName(DWORD nModuleID, CSimpleStringA &strName); //@
  100. virtual ErrorCodeEnum GetEntitySessionInfo(const char *pszEntityName, CAutoArray<CEntitySessionInfo> &Infos);
  101. virtual ErrorCodeEnum GetAllEntityStartInfo(CAutoArray<CSimpleStringA>& strEntityNames, CAutoArray<int>& strEntityIdx, CAutoArray<CEntityStartInfo>& Infos);
  102. virtual ErrorCodeEnum GetEntityLogPath(const char* pszEntityName, CEntityLogInfo& Info);
  103. virtual WORD GetDevID();
  104. virtual ErrorCodeEnum GetToken(CSimpleString &channelId, CSimpleString &token);
  105. virtual ErrorCodeEnum SetNewPathToFirewall(CSimpleString &pszPath, int maxWaitMs = 30000); // Input path:D:\\Runxxx\\version\\7.1.1.1
  106. // connect
  107. virtual ErrorCodeEnum ConnectRemoteEntity(CClientSessionBase *pClientSession, const char *pszRemoteEntity,const char *pszParam,CSmartPointer<IAsynWaitSp> &pAsynWaitSp);
  108. virtual ErrorCodeEnum RedirectSession(CClientSessionBase *pClientSession);
  109. virtual ErrorCodeEnum RedirectSession(const char *pszSuggestEntity);
  110. virtual ErrorCodeEnum RedirectSubscribBroadcast(CUUID SubID, const char *pszSugguestEntity);
  111. // misc
  112. virtual bool HasPrivilege();
  113. virtual CSmartPointer<IEntityFunctionPrivilege> GetPrivilegeFunction();
  114. virtual ErrorCodeEnum PostQuit();
  115. virtual ErrorCodeEnum PostReload();
  116. virtual ErrorCodeEnum InitLogCurrentThread();
  117. virtual ErrorCodeEnum PostEntityTaskFIFO(ITaskSp *pTask);
  118. virtual ErrorCodeEnum PostEntityTaskLIFO(ITaskSp *pTask);
  119. virtual ErrorCodeEnum PostThreadPoolTask(ITaskSp *pTask);
  120. virtual ErrorCodeEnum StartTcpBridgeServer(unsigned short port);
  121. virtual ErrorCodeEnum StopTcpBridgeServer();
  122. virtual void SetPostLinkFun(postLink cur);
  123. virtual ErrorCodeEnum RequestCloseDelay(WORD nSecond);
  124. virtual void SendLog(const LogTypeEnum eLogType,const SeverityLevelEnum eLevel,DWORD dwUserEventCode,CAutoArray<DWORD> Param,const char *pszMessage=NULL);
  125. virtual ErrorCodeEnum VerifySignature(const char *pszSignedFile, CSimpleStringA &strErrInfo);
  126. virtual ErrorCodeEnum ShowFatalError(const char *pszMsg, SeverityLevelEnum eLevel = Severity_None);
  127. virtual ErrorCodeEnum ShowStartupInfo(const char *pszMsg);
  128. virtual ErrorCodeEnum GetEntityLastError(const char* pszEntityName, CEntityLastErrorInfo& errInfo);
  129. virtual void ResetEntityLastError();
  130. virtual ErrorCodeEnum GetRunningVersion(CSimpleString& ver);
  131. virtual ErrorCodeEnum GetRunningDepVersion(CSimpleString& ver);
  132. virtual ErrorCodeEnum GetVTMErrMsg(DWORD dwUserCode, CSimpleStringA& strDescription, CSimpleStringA& strVTMCode);
  133. virtual CSimpleStringA UserCodeToRTACode(DWORD dwUserCode);
  134. virtual ErrorCodeEnum SetSelfPriority(EntityPriorityEnum nPriority);
  135. virtual ErrorCodeEnum GetSelfPriority(EntityPriorityEnum& nPriority);
  136. protected:
  137. ErrorCodeEnum AskShell(int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
  138. ErrorCodeEnum PostInfoShell(int call_type, iobuffer_t **info_pkt);
  139. ErrorCodeEnum AskEntityByRPC(const char* pszEntityName, int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
  140. void SetEntityLastError(ErrorCodeEnum systemCode, DWORD dwUserCode, const char* lpcszMessage);
  141. private:
  142. void on_entity_prestart(int trigger_entity_id, int argc, char *argv[]);
  143. void on_entity_stop(int trigger_entity_id, int cause_code);
  144. void on_entity_prepause(int trigger_entity_id);
  145. void on_entity_precontinue(int trigger_entity_id);
  146. void on_entity_test(int trigger_entity_id, int test_type);
  147. void on_entity_redirect_subscribe(sp_uid_t *uid, int from_entity_id, const char *param);
  148. static void __on_entity_prestart(sp_mod_entity_stub_t *, int trigger_entity_id, int argc, char *argv[], void *user_data);
  149. static void __on_entity_stop(sp_mod_entity_stub_t *, int trigger_entity_id, int cause_code, void *user_data);
  150. static void __on_entity_prepause(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
  151. static void __on_entity_precontinue(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
  152. static void __on_entity_test(sp_mod_entity_stub_t *, int trigger_entity_id, int test_type, void *user_data);
  153. 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);
  154. 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);
  155. int on_accept(int epid, int svc_id, int conn_id, iobuffer_t **conn_pkt, int *redirect_entity_id);
  156. void OnQueryEntitySessions(int epid, int svc_id, int rpc_id);
  157. 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);
  158. void on_thread_init();
  159. void on_thread_term();
  160. static void __on_thread_init(threadpool_t *, void *);
  161. static void __on_thread_term(threadpool_t *, void *);
  162. protected:
  163. CEntityBase *m_pEntityBase;
  164. SpModule *m_pModule;
  165. SpTimerList *m_pTimerList;
  166. sp_entity_t *m_ent;
  167. sp_cfg_shell_entity_t *m_cfg_ent;
  168. sp_mod_entity_stub_t *m_stub;
  169. sp_var_client_t *m_var_client;
  170. sp_bcm_client_t *m_bcm_client;
  171. sp_log_client_t *m_log_client;
  172. sp_svc_t *m_svc;
  173. sp_rpc_client_mgr_t *m_rpc_mgr;
  174. sp_ses_mgr_t *m_ses_mgr;
  175. sp_tbs_t *m_tbs;
  176. array_header_t *m_arr_bcm_listener;
  177. sp_var_listener_t *m_arr_var[SP_MAX_SYSEVT];
  178. sp_var_listener_t *m_arr_any_var;
  179. threadpool_t *m_tpool;
  180. sp_log_listener_mgr_t *m_log_mgr;
  181. sp_entity_t *m_redirect_entity_cache;
  182. };