#ifndef RVC_MOD_CENTERSETTING_H__ #define RVC_MOD_CENTERSETTING_H__ #pragma once #include #include #include "CenterSetting_server_g.h" using namespace CenterSetting; #include "modVer.h" #include "CenterSettingConn.h" #include "SpTest.h" enum ConnectServerType { DEFAULT = 0, BACKUP = 1, PARAM = 2 }; class CCenterSettingEntity : public CEntityBase, public ITimerListener { public: CCenterSettingEntity() : /*m_dwLastSyncTime(0),*/ m_pConnection(nullptr), m_nConnectFailCount(0), m_bUseBackupNow(false){} virtual ~CCenterSettingEntity() {} virtual const char *GetEntityName() const { return "CenterSetting"; } const char* GetEntityVersion() const { return MODULE_VERSION_FULL; } virtual bool IsService()const{return true;} ON_ENTITYT_TEST() void OnPreStart(CAutoArray strArgs, CSmartPointer pTransactionContext); virtual void OnStarted(); virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer pTransactionContext); virtual void OnTimeout(DWORD dwTimerID); virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszClass*/); ErrorCodeEnum GetSyncInfo(unsigned int &dwSyncTime, CSimpleStringA &strSyncHash, CSimpleStringA &strSyncFile); ErrorCodeEnum DownloadCenterSetting(SpReqAnsContext::Pointer sp); void OnPrePause(CSmartPointer pTransactionContext); private: ErrorCodeEnum BeginDownloadCenterSetting(LPCTSTR serverIP = NULL, int port = 0); ErrorCodeEnum EndDownloadCenterSetting(ErrorCodeEnum rc); bool SecureClientConnect(ConnectServerType type, LPCTSTR serverIP = NULL, int port = 0); void SecureClientRelease(); bool ParseIPAddress(const char *str, CSimpleStringA &ip, int &port); bool TryExtractSiteFromFileName(const char *pszPath, CSimpleStringA &strFileName, CSimpleStringA &strSite); bool IsServerConnectedNow() const { return (m_pConnection != nullptr && m_pConnection->IsConnectionOK()); } private: struct ConfigFileInfo { CSimpleStringA strFileHash; CSimpleStringA strFileName; DWORD dwSyncTime; }; std::map m_SyncFileInfo; CSimpleStringA m_strCurSiteExtName; // 当前场所集中配置扩展名:LAN或DMZ CSimpleStringA m_strRvcWebVersion; // 当前RVCWeb版本 bool m_bUseBackupNow; int m_nConnectFailCount; CCenterSettingConn *m_pConnection; SpReqAnsContext::Pointer m_spDownloadCall; friend class CCenterSettingConn; }; struct DownloadCenterSettingsTask : public ITaskSp { DownloadCenterSettingsTask(CCenterSettingEntity* entity) :pEntity(entity) {} void Process() { pEntity->DownloadCenterSetting(NULL); } CCenterSettingEntity* pEntity; }; class CCenterSettingService : public CenterSettingService_ServerSessionBase { public: CCenterSettingService(CCenterSettingEntity *pEntity) :m_pEntity(pEntity){} virtual ~CCenterSettingService(){} virtual void Handle_Download(SpReqAnsContext::Pointer ctx) { Dbg("%s: %s, %d", __FUNCTION__, ctx->Req.strAddr.GetData(), ctx->Req.nPort); if (ctx->Req.strAddr.IsNullOrEmpty() || ctx->Req.nPort <= 0) { ctx->Answer(Error_Param); } else { m_pEntity->DownloadCenterSetting(ctx); } } virtual void Handle_GetSyncInfo(SpReqAnsContext::Pointer ctx) { auto rc = m_pEntity->GetSyncInfo(ctx->Ans.nSyncTime, ctx->Ans.strFileHash, ctx->Ans.strFileName); ctx->Answer(rc); } private: CCenterSettingEntity *m_pEntity; }; #endif /*RVC_MOD_CENTERSETTING_H__*/