123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- #pragma once
- class SpModule;
- #include "SpBase.h"
- #include "sp_cfg.h"
- #include "sp_mod.h"
- #include "sp_rpc.h"
- #include "sp_log.h"
- #include "sp_var.h"
- #include "sp_ses.h"
- #include "sp_tbs.h"
- #include "sp_bcm.h"
- #include "sp_def.h"
- #include "hashset.h"
- #include "spinlock.h"
- #include "threadpool.h"
- typedef struct SpTimerList SpTimerList;
- class SpEntity : public IEntityFunction//, public IEntityFunctionHidden
- {
- public:
- SpEntity(SpModule *pModule, sp_entity_t *ent, sp_cfg_shell_entity_t *cfg_ent, CEntityBase *pEntityBase);
- virtual ~SpEntity();
- sp_svc_t *get_svc() { return m_svc; }
- sp_rpc_client_mgr_t *get_rpc_mgr() { return m_rpc_mgr; }
- sp_ses_mgr_t *get_ses_mgr() { return m_ses_mgr; }
- virtual ErrorCodeEnum Init();
- virtual void Term();
- ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, const char *pMessage);
- ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, CAutoArray<DWORD> Param, const char *pMessage);
- ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, const char* pMessage, const linkContext &t_context);
- ErrorCodeEnum LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD iSysErrorCode, DWORD iUserErrorCode, CAutoArray<DWORD> Param, const char* pMessage, const linkContext& t_context);
- ErrorCodeEnum LogFlush();
- sp_entity_t *get_ent() { return m_ent; }
- sp_cfg_shell_entity_t *get_cfg_ent() { return m_cfg_ent; }
- CEntityBase *GetEntityBase() { return m_pEntityBase; }
- // finish ops
- void FinishStart(ErrorCodeEnum Error);
- void FinishClose(ErrorCodeEnum Error);
- void FinishPause(ErrorCodeEnum Error);
- void FinishContinue(ErrorCodeEnum Error);
- void FinishSelfTest(ErrorCodeEnum Error, DWORD dwResult);
- //
- // IEntityFunction
- //
- // timer
- virtual ErrorCodeEnum SetTimer(DWORD nTimerID, ITimerListener *pListener, DWORD dwInterval);
- virtual ErrorCodeEnum SetTimerData(DWORD dwTimerID, IReleasable *pData);
- virtual ErrorCodeEnum GetTimerData(DWORD dwTimerID, CSmartPointer<IReleasable> &pData);
- virtual ErrorCodeEnum KillTimer(DWORD nTimerID);
- virtual ErrorCodeEnum ResetTimer(DWORD dwTimerID, DWORD dwInterval);
- virtual ErrorCodeEnum GetTimerInterval(DWORD dwTimerID, DWORD &dwInterval);
- // log
- virtual ErrorCodeEnum SubscribeLog(CUUID &SubscribeID, ILogListener *pListener,LogTypeEnum eLogType=Log_Ignore,SeverityLevelEnum eLevel=Severity_None,
- ErrorCodeEnum eSysError=Error_IgnoreAll,DWORD dwUserCode=0,const char *pszEntityName=NULL,bool bIgnoreMessage=true);
- virtual ErrorCodeEnum UnsubscribeLog(CUUID SubscribeID);
- virtual ErrorCodeEnum FlushLogFile();
- /** Set self define state enum for out side notice */
- virtual ErrorCodeEnum SetUserDefineState(DWORD dwState);
- virtual DWORD GetUserDefineState();
- // sys-var
- virtual ErrorCodeEnum SetSysVar(const char *pszKey,const char *pszValue, bool bPersist =false);
- virtual ErrorCodeEnum GetSysVar(const char *pszKey,CSimpleStringA &strValue);
- virtual ErrorCodeEnum RegistSysVarEvent(const char *pszKey,ISysVarListener *pListener);
- virtual ErrorCodeEnum UnregistSysVarEvent(const char *pszKey);
- virtual ErrorCodeEnum RegistTerminalStateChangeEvent(ITerminalStateChangedListener* pListener);
- virtual ErrorCodeEnum UnregistTerminalStateChangeEvent();
- // evt bcast
- virtual ErrorCodeEnum SendBroadcast(DWORD dwMessageId, DWORD dwMessageSignature,CAutoBuffer Buffer);
- virtual ErrorCodeEnum GetBroadcastReceivers(CAutoArray<BroadcastSubscribeInfo> &Subscribers);
- virtual ErrorCodeEnum SubscribeBroadcast(const char *pszRemoteEntity, const char *pszParam, IBroadcastListener *pListener, CUUID &SubscribeID);
- virtual ErrorCodeEnum UnsubscribeBroadcast(CUUID SubscribeID);
- virtual ErrorCodeEnum UnsubscribeBroadcast(const char *pszRemoteEntity);
- // ini-config, always return Error_Succeed!!!!
- virtual ErrorCodeEnum OpenConfig(ConfigTypeEnum eConfigType,CSmartPointer<IConfigInfo> &pConfigInfo, bool forceFile);
- // gets
- virtual MachineTypeEnum GetMachineType(CSimpleStringA* outStrMachine = NULL);
- virtual ErrorCodeEnum GetSystemStaticInfo(CSystemStaticInfo &Info);
- virtual ErrorCodeEnum GetInstallInfo(CVersion Version,CInstallInfo &Info);
- virtual ErrorCodeEnum GetPath(const char *pszKey,CSimpleStringA &strPath);
- virtual ErrorCodeEnum GetSystemRunInfo(CSystemRunInfo &Info);
- virtual ErrorCodeEnum GetEntityBusyRate(WORD &nBusyEntity,WORD &nAllEntity);
- virtual ErrorCodeEnum GetRebootInfo(CSmallDateTime BeforeThisTime,CBootInfo &Info);
- virtual ErrorCodeEnum GetAllRegistSpFile(CAutoArray<CSimpleStringA> &strSpNames);
- virtual ErrorCodeEnum GetSpFileInfo(const char *pszSpName,CSpInfo &Info);
- virtual ErrorCodeEnum GetAllRegistedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<WORD> &wEntityDevelopIDs);
- virtual ErrorCodeEnum GetAllStartedEntity(CAutoArray<CSimpleStringA> &strEntityNames,CAutoArray<DWORD> &dwEntityInstanceIDs);
- virtual ErrorCodeEnum GetSelfEntityRunInfo(CEntityRunInfo &Info);
- virtual ErrorCodeEnum GetEntityStaticInfo(const char *pszEntityName,CEntityStaticInfo &Info);
- virtual ErrorCodeEnum GetEntityStaticInfo(WORD wEntitySerialNO,CEntityStaticInfo &Info);
- virtual ErrorCodeEnum GetEntityRunInfo(const char *pszEntityName, CEntityRunInfo &Info);
- virtual ErrorCodeEnum GetEntityName(WORD wEntityDevelopID, CSimpleStringA &strName);
- virtual ErrorCodeEnum GetEntityName(DWORD dwEntityInstanceID, CSimpleStringA &strName);
- virtual ErrorCodeEnum GetModuleName(DWORD nModuleID, CSimpleStringA &strName); //@
- virtual ErrorCodeEnum GetEntitySessionInfo(const char *pszEntityName, CAutoArray<CEntitySessionInfo> &Infos);
- virtual ErrorCodeEnum GetAllEntityStartInfo(CAutoArray<CSimpleStringA>& strEntityNames, CAutoArray<int>& strEntityIdx, CAutoArray<CEntityStartInfo>& Infos);
- virtual ErrorCodeEnum GetEntityLogPath(const char* pszEntityName, CEntityLogInfo& Info);
- virtual WORD GetDevID();
- virtual ErrorCodeEnum GetToken(CSimpleString &channelId, CSimpleString &token);
- virtual ErrorCodeEnum SetNewPathToFirewall(CSimpleString &pszPath, int maxWaitMs = 30000); // Input path:D:\\Runxxx\\version\\7.1.1.1
- // connect
- virtual ErrorCodeEnum ConnectRemoteEntity(CClientSessionBase *pClientSession, const char *pszRemoteEntity,const char *pszParam,CSmartPointer<IAsynWaitSp> &pAsynWaitSp);
- virtual ErrorCodeEnum RedirectSession(CClientSessionBase *pClientSession);
- virtual ErrorCodeEnum RedirectSession(const char *pszSuggestEntity);
- virtual ErrorCodeEnum RedirectSubscribBroadcast(CUUID SubID, const char *pszSugguestEntity);
- // misc
- virtual bool HasPrivilege();
- virtual CSmartPointer<IEntityFunctionPrivilege> GetPrivilegeFunction();
- virtual ErrorCodeEnum PostQuit();
- virtual ErrorCodeEnum PostReload();
- virtual ErrorCodeEnum InitLogCurrentThread();
- virtual ErrorCodeEnum PostEntityTaskFIFO(ITaskSp *pTask);
- virtual ErrorCodeEnum PostEntityTaskLIFO(ITaskSp *pTask);
- virtual ErrorCodeEnum PostThreadPoolTask(ITaskSp *pTask);
- virtual ErrorCodeEnum StartTcpBridgeServer(unsigned short port);
- virtual ErrorCodeEnum StopTcpBridgeServer();
- virtual void SetPostLinkFun(postLink cur);
- virtual ErrorCodeEnum RequestCloseDelay(WORD nSecond);
- virtual void SendLog(const LogTypeEnum eLogType,const SeverityLevelEnum eLevel,DWORD dwUserEventCode,CAutoArray<DWORD> Param,const char *pszMessage=NULL);
- virtual ErrorCodeEnum VerifySignature(const char *pszSignedFile, CSimpleStringA &strErrInfo);
- virtual ErrorCodeEnum ShowFatalError(const char *pszMsg, SeverityLevelEnum eLevel = Severity_None);
- virtual ErrorCodeEnum ShowStartupInfo(const char *pszMsg);
- virtual ErrorCodeEnum GetEntityLastError(const char* pszEntityName, CEntityLastErrorInfo& errInfo);
- virtual void ResetEntityLastError();
- virtual ErrorCodeEnum GetRunningVersion(CSimpleString& ver);
- virtual ErrorCodeEnum GetRunningDepVersion(CSimpleString& ver);
- virtual ErrorCodeEnum GetVTMErrMsg(DWORD dwUserCode, CSimpleStringA& strDescription, CSimpleStringA& strVTMCode);
- virtual CSimpleStringA UserCodeToRTACode(DWORD dwUserCode);
- virtual ErrorCodeEnum SetSelfPriority(EntityPriorityEnum nPriority);
- virtual ErrorCodeEnum GetSelfPriority(EntityPriorityEnum& nPriority);
- protected:
- ErrorCodeEnum AskShell(int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
- ErrorCodeEnum PostInfoShell(int call_type, iobuffer_t **info_pkt);
- ErrorCodeEnum AskEntityByRPC(const char* pszEntityName, int call_type, iobuffer_t **req_pkt, iobuffer_t **ans_pkt);
- void SetEntityLastError(ErrorCodeEnum systemCode, DWORD dwUserCode, const char* lpcszMessage);
- private:
- void on_entity_prestart(int trigger_entity_id, int argc, char *argv[]);
- void on_entity_stop(int trigger_entity_id, int cause_code);
- void on_entity_prepause(int trigger_entity_id);
- void on_entity_precontinue(int trigger_entity_id);
- void on_entity_test(int trigger_entity_id, int test_type);
- void on_entity_redirect_subscribe(sp_uid_t *uid, int from_entity_id, const char *param);
- static void __on_entity_prestart(sp_mod_entity_stub_t *, int trigger_entity_id, int argc, char *argv[], void *user_data);
- static void __on_entity_stop(sp_mod_entity_stub_t *, int trigger_entity_id, int cause_code, void *user_data);
- static void __on_entity_prepause(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
- static void __on_entity_precontinue(sp_mod_entity_stub_t *, int trigger_entity_id, void *user_data);
- static void __on_entity_test(sp_mod_entity_stub_t *, int trigger_entity_id, int test_type, void *user_data);
- 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);
- 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);
- int on_accept(int epid, int svc_id, int conn_id, iobuffer_t **conn_pkt, int *redirect_entity_id);
- void OnQueryEntitySessions(int epid, int svc_id, int rpc_id);
- 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);
- void on_thread_init();
- void on_thread_term();
- static void __on_thread_init(threadpool_t *, void *);
- static void __on_thread_term(threadpool_t *, void *);
- protected:
- CEntityBase *m_pEntityBase;
- SpModule *m_pModule;
- SpTimerList *m_pTimerList;
- sp_entity_t *m_ent;
- sp_cfg_shell_entity_t *m_cfg_ent;
- sp_mod_entity_stub_t *m_stub;
- sp_var_client_t *m_var_client;
- sp_bcm_client_t *m_bcm_client;
- sp_log_client_t *m_log_client;
- sp_svc_t *m_svc;
- sp_rpc_client_mgr_t *m_rpc_mgr;
- sp_ses_mgr_t *m_ses_mgr;
- sp_tbs_t *m_tbs;
- array_header_t *m_arr_bcm_listener;
- sp_var_listener_t *m_arr_var[SP_MAX_SYSEVT];
- sp_var_listener_t *m_arr_any_var;
- threadpool_t *m_tpool;
- sp_log_listener_mgr_t *m_log_mgr;
- sp_entity_t *m_redirect_entity_cache;
- };
|