SpEntity.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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 LogFlush();
  30. sp_entity_t *get_ent() { return m_ent; }
  31. sp_cfg_shell_entity_t *get_cfg_ent() { return m_cfg_ent; }
  32. CEntityBase *GetEntityBase() { return m_pEntityBase; }
  33. // finish ops
  34. void FinishStart(ErrorCodeEnum Error);
  35. void FinishClose(ErrorCodeEnum Error);
  36. void FinishPause(ErrorCodeEnum Error);
  37. void FinishContinue(ErrorCodeEnum Error);
  38. void FinishSelfTest(ErrorCodeEnum Error);
  39. //
  40. // IEntityFunction
  41. //
  42. // timer
  43. virtual ErrorCodeEnum SetTimer(DWORD nTimerID, ITimerListener *pListener, DWORD dwInterval);
  44. virtual ErrorCodeEnum SetTimerData(DWORD dwTimerID, IReleasable *pData);
  45. virtual ErrorCodeEnum GetTimerData(DWORD dwTimerID, CSmartPointer<IReleasable> &pData);
  46. virtual ErrorCodeEnum KillTimer(DWORD nTimerID);
  47. virtual ErrorCodeEnum ResetTimer(DWORD dwTimerID, DWORD dwInterval);
  48. virtual ErrorCodeEnum GetTimerInterval(DWORD dwTimerID, DWORD &dwInterval);
  49. // persist
  50. virtual ErrorCodeEnum ReadPersistObject(const char *pszClass, const char *pszKey, IEntityPersistObject *pInstance);
  51. virtual ErrorCodeEnum WritePersistObject(const char *pszClass, const char *pszKey, const IEntityPersistObject *pInstance);
  52. virtual ErrorCodeEnum ReadNumOfPersistObject(const char *pClassName,DWORD &nNum);
  53. virtual ErrorCodeEnum GetPersistClassObjectKeys(const char *pClassName, CAutoArray<CSimpleStringA> &Keys);
  54. virtual ErrorCodeEnum DeleteKeyOfPersistObject(const char *pClassName,const char *pszKey);
  55. virtual ErrorCodeEnum EnumKeyOfPersistObject(const char *pClassName,CSimpleStringA &strKey,DWORD &Handle);
  56. virtual ErrorCodeEnum CleanAllOfPersistObject(const char *pClassName);
  57. // log
  58. virtual ErrorCodeEnum SubscribeLog(CUUID &SubscribeID, ILogListener *pListener,LogTypeEnum eLogType=Log_Ignore,SeverityLevelEnum eLevel=Severity_None,
  59. ErrorCodeEnum eSysError=Error_IgnoreAll,DWORD dwUserCode=0,const char *pszEntityName=NULL,bool bIgnoreMessage=true);
  60. virtual ErrorCodeEnum UnsubscribeLog(CUUID SubscribeID);
  61. virtual ErrorCodeEnum FlushLogFile();
  62. /** Set self define state enum for out side notice */
  63. virtual ErrorCodeEnum SetUserDefineState(DWORD dwState);
  64. // sys-var
  65. virtual ErrorCodeEnum SetSysVar(const char *pszKey,const char *pszValue, bool bPersist =false);
  66. virtual ErrorCodeEnum GetSysVar(const char *pszKey,CSimpleStringA &strValue);
  67. virtual ErrorCodeEnum RegistSysVarEvent(const char *pszKey,ISysVarListener *pListener);
  68. virtual ErrorCodeEnum UnregistSysVarEvent(const char *pszKey);
  69. // evt bcast
  70. virtual ErrorCodeEnum SendBroadcast(DWORD dwMessageId, DWORD dwMessageSignature,CAutoBuffer Buffer);
  71. virtual ErrorCodeEnum GetBroadcastReceivers(CAutoArray<BroadcastSubscribeInfo> &Subscribers);
  72. virtual ErrorCodeEnum SubscribeBroadcast(const char *pszRemoteEntity, const char *pszParam, IBroadcastListener *pListener, CUUID &SubscribeID);
  73. virtual ErrorCodeEnum UnsubscribeBroadcast(CUUID SubscribeID);
  74. virtual ErrorCodeEnum UnsubscribeBroadcast(const char *pszRemoteEntity);
  75. // ini-config
  76. virtual ErrorCodeEnum OpenConfig(ConfigTypeEnum eConfigType,CSmartPointer<IConfigInfo> &pConfigInfo);
  77. // gets
  78. virtual ErrorCodeEnum GetSystemStaticInfo(CSystemStaticInfo &Info);
  79. virtual ErrorCodeEnum GetInstallInfo(CVersion Version,CInstallInfo &Info);
  80. virtual bool IsPackInstalled(const char *pPackName);
  81. virtual ErrorCodeEnum GetPath(const char *pszKey,CSimpleStringA &strPath);
  82. virtual ErrorCodeEnum GetSystemRunInfo(CSystemRunInfo &Info);
  83. virtual ErrorCodeEnum GetEntityBusyRate(WORD &nBusyEntity,WORD &nAllEntity);
  84. virtual ErrorCodeEnum GetRebootInfo(CSmallDateTime BeforeThisTime,CBootInfo &Info);
  85. virtual ErrorCodeEnum GetAllRegistSpFile(CAutoArray<CSimpleStringA> &strSpNames);
  86. virtual ErrorCodeEnum GetSpFileInfo(const char *pszSpName,CSpInfo &Info);
  87. virtual ErrorCodeEnum GetAllRegistedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<WORD> &wEntityDevelopIDs);
  88. virtual ErrorCodeEnum GetAllStartedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<DWORD> &dwEntityInstanceIDs);
  89. virtual ErrorCodeEnum GetSelfEntityRunInfo(CEntityRunInfo &Info);
  90. virtual ErrorCodeEnum GetEntityStaticInfo(const char *pszEntityName,CEntityStaticInfo &Info);
  91. virtual ErrorCodeEnum GetEntityStaticInfo(WORD wEntitySerialNO,CEntityStaticInfo &Info);
  92. virtual ErrorCodeEnum GetEntityRunInfo(const char *pszEntityName, CEntityRunInfo &Info);
  93. virtual ErrorCodeEnum GetEntityName(WORD wEntityDevelopID, CSimpleStringA &strName);
  94. virtual ErrorCodeEnum GetEntityName(DWORD dwEntityInstanceID, CSimpleStringA &strName);
  95. virtual ErrorCodeEnum GetModuleName(DWORD nModuleID, CSimpleStringA &strName); //@
  96. virtual ErrorCodeEnum GetEntitySessionInfo(const char *pszEntityName, CAutoArray<CEntitySessionInfo> &Infos);
  97. // connect
  98. virtual ErrorCodeEnum ConnectRemoteEntity(CClientSessionBase *pClientSession, const char *pszRemoteEntity,const char *pszParam,CSmartPointer<IAsynWaitSp> &pAsynWaitSp);
  99. virtual ErrorCodeEnum RedirectSession(CClientSessionBase *pClientSession);
  100. virtual ErrorCodeEnum RedirectSession(const char *pszSuggestEntity);
  101. virtual ErrorCodeEnum RedirectSubscribBroadcast(CUUID SubID, const char *pszSugguestEntity);
  102. // misc
  103. virtual bool HasPrivilege();
  104. virtual CSmartPointer<IEntityFunctionPrivilege> GetPrivilegeFunction();
  105. virtual ErrorCodeEnum PostQuit();
  106. virtual ErrorCodeEnum PostReload();
  107. virtual ErrorCodeEnum InitLogCurrentThread();
  108. virtual ErrorCodeEnum PostEntityTaskFIFO(ITaskSp *pTask);
  109. virtual ErrorCodeEnum PostEntityTaskLIFO(ITaskSp *pTask);
  110. virtual ErrorCodeEnum PostThreadPoolTask(ITaskSp *pTask);
  111. virtual ErrorCodeEnum StartTcpBridgeServer(unsigned short port);
  112. virtual ErrorCodeEnum StopTcpBridgeServer();
  113. virtual ErrorCodeEnum RequestCloseDelay(WORD nSecond);
  114. virtual void SendLog(const LogTypeEnum eLogType,const SeverityLevelEnum eLevel,DWORD dwUserEventCode,CAutoArray<DWORD> Param,const char *pszMessage=NULL);
  115. virtual ErrorCodeEnum VerifySignature(const char *pszSignedFile, CSimpleStringA &strErrInfo);
  116. virtual ErrorCodeEnum ShowFatalError(const char *pszMsg);
  117. virtual ErrorCodeEnum ShowStartupInfo(const char *pszMsg);
  118. protected:
  119. ErrorCodeEnum AskShell(int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
  120. ErrorCodeEnum PostInfoShell(int call_type, iobuffer_t **info_pkt);
  121. ErrorCodeEnum AskEntityByRPC(const char* pszEntityName, int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
  122. const char *GetCenterSettingNameBySite();
  123. private:
  124. void on_entity_prestart(int trigger_entity_id, int argc, char *argv[]);
  125. void on_entity_stop(int trigger_entity_id, int cause_code);
  126. void on_entity_prepause(int trigger_entity_id);
  127. void on_entity_precontinue(int trigger_entity_id);
  128. void on_entity_test(int trigger_entity_id, int test_type);
  129. void on_entity_redirect_subscribe(sp_uid_t *uid, int from_entity_id, const char *param);
  130. static void __on_entity_prestart(sp_mod_entity_stub_t *, int trigger_entity_id, int argc, char *argv[], void *user_data);
  131. static void __on_entity_stop(sp_mod_entity_stub_t *, int trigger_entity_id, int cause_code, void *user_data);
  132. static void __on_entity_prepause(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
  133. static void __on_entity_precontinue(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
  134. static void __on_entity_test(sp_mod_entity_stub_t *, int trigger_entity_id, int test_type, void *user_data);
  135. 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);
  136. 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);
  137. int on_accept(int epid, int svc_id, int conn_id, iobuffer_t **conn_pkt, int *redirect_entity_id);
  138. void OnQueryEntitySessions(int epid, int svc_id, int rpc_id);
  139. 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);
  140. void on_thread_init();
  141. void on_thread_term();
  142. static void __on_thread_init(threadpool_t *, void *);
  143. static void __on_thread_term(threadpool_t *, void *);
  144. protected:
  145. CEntityBase *m_pEntityBase;
  146. SpModule *m_pModule;
  147. SpTimerList *m_pTimerList;
  148. sp_entity_t *m_ent;
  149. sp_cfg_shell_entity_t *m_cfg_ent;
  150. sp_mod_entity_stub_t *m_stub;
  151. sp_var_client_t *m_var_client;
  152. sp_bcm_client_t *m_bcm_client;
  153. sp_log_client_t *m_log_client;
  154. sp_svc_t *m_svc;
  155. sp_rpc_client_mgr_t *m_rpc_mgr;
  156. sp_ses_mgr_t *m_ses_mgr;
  157. sp_tbs_t *m_tbs;
  158. array_header_t *m_arr_bcm_listener;
  159. sp_var_listener_t *m_arr_var[SP_MAX_SYSEVT];
  160. sp_var_listener_t *m_arr_any_var;
  161. threadpool_t *m_tpool;
  162. sp_log_listener_mgr_t *m_log_mgr;
  163. sp_entity_t *m_redirect_entity_cache;
  164. };