mod_centersetting.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifndef RVC_MOD_CENTERSETTING_H__
  2. #define RVC_MOD_CENTERSETTING_H__
  3. #pragma once
  4. #include <map>
  5. #include <string>
  6. #include "CenterSetting_server_g.h"
  7. using namespace CenterSetting;
  8. #include "modVer.h"
  9. #include "CenterSettingConn.h"
  10. #include "SpTest.h"
  11. enum ConnectServerType
  12. {
  13. DEFAULT = 0,
  14. BACKUP = 1,
  15. PARAM = 2
  16. };
  17. class CCenterSettingEntity : public CEntityBase, public ITimerListener
  18. {
  19. public:
  20. CCenterSettingEntity() : /*m_dwLastSyncTime(0),*/
  21. m_pConnection(nullptr), m_nConnectFailCount(0), m_bUseBackupNow(false){}
  22. virtual ~CCenterSettingEntity() {}
  23. virtual const char *GetEntityName() const { return "CenterSetting"; }
  24. const char* GetEntityVersion() const { return MODULE_VERSION_FULL; }
  25. virtual bool IsService()const{return true;}
  26. ON_ENTITYT_TEST()
  27. void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  28. virtual void OnStarted();
  29. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext);
  30. virtual void OnTimeout(DWORD dwTimerID);
  31. virtual CServerSessionBase *OnNewSession(const char* /*pszRemoteEntityName*/, const char * /*pszClass*/);
  32. ErrorCodeEnum GetSyncInfo(unsigned int &dwSyncTime, CSimpleStringA &strSyncHash, CSimpleStringA &strSyncFile);
  33. ErrorCodeEnum DownloadCenterSetting(SpReqAnsContext<CenterSettingService_Download_Req, CenterSettingService_Download_Ans>::Pointer sp);
  34. void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext);
  35. private:
  36. ErrorCodeEnum BeginDownloadCenterSetting(LPCTSTR serverIP = NULL, int port = 0);
  37. ErrorCodeEnum EndDownloadCenterSetting(ErrorCodeEnum rc);
  38. bool SecureClientConnect(ConnectServerType type, LPCTSTR serverIP = NULL, int port = 0);
  39. void SecureClientRelease();
  40. bool ParseIPAddress(const char *str, CSimpleStringA &ip, int &port);
  41. bool TryExtractSiteFromFileName(const char *pszPath, CSimpleStringA &strFileName, CSimpleStringA &strSite);
  42. bool IsServerConnectedNow() const
  43. {
  44. return (m_pConnection != nullptr && m_pConnection->IsConnectionOK());
  45. }
  46. private:
  47. struct ConfigFileInfo
  48. {
  49. CSimpleStringA strFileHash;
  50. CSimpleStringA strFileName;
  51. DWORD dwSyncTime;
  52. };
  53. std::map<std::string, ConfigFileInfo> m_SyncFileInfo;
  54. CSimpleStringA m_strCurSiteExtName; // 当前场所集中配置扩展名:LAN或DMZ
  55. CSimpleStringA m_strRvcWebVersion; // 当前RVCWeb版本
  56. bool m_bUseBackupNow;
  57. int m_nConnectFailCount;
  58. CCenterSettingConn *m_pConnection;
  59. SpReqAnsContext<CenterSettingService_Download_Req, CenterSettingService_Download_Ans>::Pointer m_spDownloadCall;
  60. friend class CCenterSettingConn;
  61. };
  62. struct DownloadCenterSettingsTask : public ITaskSp
  63. {
  64. DownloadCenterSettingsTask(CCenterSettingEntity* entity) :pEntity(entity) {}
  65. void Process()
  66. {
  67. pEntity->DownloadCenterSetting(NULL);
  68. }
  69. CCenterSettingEntity* pEntity;
  70. };
  71. class CCenterSettingService : public CenterSettingService_ServerSessionBase
  72. {
  73. public:
  74. CCenterSettingService(CCenterSettingEntity *pEntity) :m_pEntity(pEntity){}
  75. virtual ~CCenterSettingService(){}
  76. virtual void Handle_Download(SpReqAnsContext<CenterSettingService_Download_Req, CenterSettingService_Download_Ans>::Pointer ctx)
  77. {
  78. Dbg("%s: %s, %d", __FUNCTION__, ctx->Req.strAddr.GetData(), ctx->Req.nPort);
  79. if (ctx->Req.strAddr.IsNullOrEmpty() || ctx->Req.nPort <= 0) {
  80. ctx->Answer(Error_Param);
  81. } else {
  82. m_pEntity->DownloadCenterSetting(ctx);
  83. }
  84. }
  85. virtual void Handle_GetSyncInfo(SpReqAnsContext<CenterSettingService_GetSyncInfo_Req, CenterSettingService_GetSyncInfo_Ans>::Pointer ctx)
  86. {
  87. auto rc = m_pEntity->GetSyncInfo(ctx->Ans.nSyncTime, ctx->Ans.strFileHash, ctx->Ans.strFileName);
  88. ctx->Answer(rc);
  89. }
  90. private:
  91. CCenterSettingEntity *m_pEntity;
  92. };
  93. #endif /*RVC_MOD_CENTERSETTING_H__*/