#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 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 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 &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 &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 &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 &strSpNames); virtual ErrorCodeEnum GetSpFileInfo(const char *pszSpName,CSpInfo &Info); virtual ErrorCodeEnum GetAllRegistedEntity(CAutoArray &strEntityNames,CAutoArray &wEntityDevelopIDs); virtual ErrorCodeEnum GetAllStartedEntity(CAutoArray &strEntityNames,CAutoArray &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 &Infos); virtual ErrorCodeEnum GetAllEntityStartInfo(CAutoArray& strEntityNames, CAutoArray& strEntityIdx, CAutoArray& 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 &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 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 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; };