#pragma once #include "sp_svc.h" #include "sp_iom.h" #include "sp_mod.h" #include "sp_cfg.h" #include "sp_log.h" #include "array.h" class SpEntity; typedef ErrorCodeEnum (*EntryRoutine)(); class SpModule { public: SpModule(sp_mod_t *mod, sp_cfg_shell_module_t *cfg_mod); ~SpModule(); ErrorCodeEnum Init(const char *url); VOID Term(); void SetThreadEntity(SpEntity* pEntity); SpEntity* GetThreadEntity(); sp_iom_t *get_iom() { return m_iom; } sp_mod_t *get_mod() { return m_mod; } ErrorCodeEnum AddEntityBase(CEntityBase *pEntity); ErrorCodeEnum RemoveEntityBase(CEntityBase *pEntity); ErrorCodeEnum GetEntityBase(const char *pszEntityName,CSmartPointer &pEntity); int GetEntityCount(); SpEntity *FindEntity(const char *lpName); ErrorCodeEnum Run(); static void SetEntryRoutine(EntryRoutine pfMain, EntryRoutine pfExit) { s_pfMain = pfMain;s_pfExit = pfExit;} void LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD dwSysErrorCode, DWORD dwUserErrorCode, const char *pMessage); void LogMessage(const LogTypeEnum LogType, const SeverityLevelEnum Level, DWORD dwSysErrorCode, DWORD dwUserErrorCode, const char* pMessage, const linkContext& t_context); void getEntryRoutine(void **pfMain, void **pfExit) { *pfMain = (void*)s_pfMain; *pfExit = (void*)s_pfExit; } private: int on_module_init(); int on_module_term(); static int __on_module_init(sp_mod_stub_t *, void *user_data); static int __on_module_term(sp_mod_stub_t *, void *user_data); private: DWORD m_dwEntityTls; array_header_t *m_arrEntity; sp_iom_t *m_iom; sp_mod_t *m_mod; sp_cfg_shell_module_t *m_cfg_mod; sp_log_client_t *m_anonymous_log; sp_mod_stub_t *m_stub; static EntryRoutine s_pfMain; static EntryRoutine s_pfExit; }; SpModule *GetSpModule();