mod_centersetting.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #include "stdafx.h"
  2. #include "SpBase.h"
  3. #include "Event.h"
  4. #include "mod_centersetting.h"
  5. #include <regex>
  6. #include "fileutil.h"
  7. #include "array.h"
  8. using namespace std;
  9. CServerSessionBase* CCenterSettingEntity::OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszClass*/)
  10. {
  11. return new CCenterSettingService(this);
  12. }
  13. void CCenterSettingEntity::OnStarted()
  14. {
  15. GetFunction()->GetPath("CenterSetting", m_strFilePath);
  16. GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig);
  17. GetFunction()->GetPath("RunInfo", m_strBakPath);
  18. m_strBakPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "CenterSetting.ini";
  19. m_pMicroServiceHelper = new CenterSettingsMicroServiceHelper(this);
  20. if (!m_pCenterConfig->storageInMem()) {
  21. m_isUseMemCfg = false;
  22. BeginDownloadCenterSetting();
  23. } else {
  24. m_isUseMemCfg = true;
  25. }
  26. // 启动轮询定时器
  27. const DWORD interval = 60000 * 5;
  28. GetFunction()->SetTimer(1, this, interval);
  29. }
  30. void CCenterSettingEntity::OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext)
  31. {
  32. GetFunction()->KillTimer(1);
  33. pTransactionContext->SendAnswer(Error_Succeed);
  34. }
  35. ErrorCodeEnum CCenterSettingEntity::BeginDownloadCenterSetting(bool bByHand, const string& url)
  36. {
  37. LOG_FUNCTION();
  38. #ifdef _MSC_VER
  39. EnterCriticalSection(&m_lock);
  40. #else
  41. std::unique_lock<std::mutex> lock1(m_lock);
  42. #endif
  43. if (!url.empty()) {
  44. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("update centersettings url...");
  45. m_pMicroServiceHelper->UpdateUrl(url);
  46. }
  47. int rc = m_pMicroServiceHelper->GetCenterSetting(bByHand);
  48. if (EXIST == rc) {
  49. } else if (SUCC == rc) {
  50. LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_CENTER,
  51. CSimpleStringA::Format("下载集中配置成功:%s", m_pMicroServiceHelper->GetCurUrl().c_str()));
  52. LogEvent(Severity_Low, EVENT_MOD_CENTERSETTING_UPDATE_CENTER, "Update Centersetting.");
  53. if (bByHand)
  54. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR040210101")("手工下载集中配置成功");
  55. else
  56. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402101Z01")("自动下载集中配置成功");
  57. } else {
  58. LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
  59. CSimpleStringA::Format("下载集中配置失败:%s", m_pMicroServiceHelper->GetErrMsg()));
  60. if (!bByHand)
  61. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
  62. }
  63. if (m_spDownloadCall != NULL) {
  64. m_spDownloadCall->Ans.downloadStat = rc;
  65. m_spDownloadCall->Ans.retCenterConfigUrl = m_pMicroServiceHelper->GetCurUrl().c_str();
  66. if (rc == AllAddressNull) {
  67. m_spDownloadCall->Ans.strErrMsg = "所有地址都为空,请检查终端版本";
  68. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1101")("所有集中配置下载地址都为空");
  69. } else if (rc == AccessServiceFail) {
  70. m_spDownloadCall->Ans.strErrMsg = "网络异常,请检查网络连接情况";
  71. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1102")("网络异常,请检查网络连接情况");
  72. } else if (rc == CalcSM3Fail || rc == CheckSM3Fail) {
  73. m_spDownloadCall->Ans.strErrMsg = "集中配置内容校验失败,请重试";
  74. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1103")("集中配置内容校验失败");
  75. } else if (rc == MANUAL) {
  76. m_spDownloadCall->Ans.strErrMsg = "集中配置下载失败";
  77. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1104")("集中配置下载失败");
  78. } else if (rc == EXIST) {
  79. m_spDownloadCall->Ans.strErrMsg = "集中配置已是最新版本";
  80. }
  81. CSimpleStringA hostUrl;
  82. m_pCenterConfig->ReadConfigValue("AccessAuthorization", "HostInitUrl", hostUrl);
  83. m_spDownloadCall->Ans.HostUrl = hostUrl;
  84. m_spDownloadCall->Answer(Error_Succeed);
  85. m_spDownloadCall.Clear();
  86. }
  87. #ifdef _MSC_VER
  88. LeaveCriticalSection(&m_lock);
  89. #endif
  90. return Error_Succeed;
  91. }
  92. ErrorCodeEnum CCenterSettingEntity::DownloadCenterSetting(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer sp)
  93. {
  94. if (m_spDownloadCall != NULL) {
  95. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DownloadCenterSetting")("last download call not complet");
  96. sp->Answer(Error_Duplication);
  97. return Error_Duplication;
  98. }
  99. m_spDownloadCall = sp;
  100. ErrorCodeEnum error = BeginDownloadCenterSetting(true, sp->Req.reqCenterConfigUrl.GetData());
  101. if (error != Error_Succeed) {
  102. m_spDownloadCall = nullptr;
  103. if (sp != NULL) {
  104. sp->Answer(Error_Succeed);
  105. }
  106. return error;
  107. }
  108. return Error_Succeed;
  109. }
  110. void CCenterSettingEntity::OnTimeout(DWORD dwTimerID)
  111. {
  112. if (m_isUseMemCfg) {
  113. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("use memory config....");
  114. bool isUpdate = false, isReset = false;
  115. CSimpleString version;
  116. ErrorCodeEnum ret = Error_NotSupport;
  117. ret = GetFunction()->GetPrivilegeFunction()->TryUpdateCenterCfg(isUpdate, isReset, version);
  118. if (ret != ErrorCodeEnum::Error_Succeed) {
  119. LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
  120. CSimpleStringA::Format("下载集中配置失败:%d", ret));
  121. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
  122. return;
  123. } else {
  124. DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Update centersettings config succ.");
  125. }
  126. if (!isUpdate) {
  127. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed from spshell");
  128. return;
  129. }
  130. LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_CENTER,
  131. CSimpleStringA::Format("下载集中配置成功,版本号变更成:%s", version.GetData()));
  132. LogEvent(Severity_Low, EVENT_MOD_CENTERSETTING_UPDATE_CENTER, "Update Centersetting.");
  133. if (isReset)
  134. LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "SpShell:Update centersetting with critical items.");
  135. } else {
  136. BeginDownloadCenterSetting();
  137. }
  138. }
  139. ErrorCodeEnum CCenterSettingEntity::GetAccessUrl(CSimpleStringA& url) //初始化地址
  140. {
  141. CSimpleStringA hostInitUrl;
  142. m_pCenterConfig->ReadConfigValue("AccessAuthorization", "HostInitUrl", hostInitUrl);
  143. if (hostInitUrl.IsNullOrEmpty())
  144. url = "初始化地址为空";
  145. else
  146. url = hostInitUrl;
  147. return Error_Succeed;
  148. }
  149. ErrorCodeEnum CCenterSettingEntity::GetCertainAceessUrl(CSimpleStringA& accessName, CSimpleStringA& url) //准入地址
  150. {
  151. LOG_FUNCTION();
  152. CSimpleStringA tUrl;
  153. m_pCenterConfig->ReadConfigValue("AccessAuthorization", accessName.GetData(), tUrl);
  154. if (tUrl.IsNullOrEmpty())
  155. url = "地址为空";
  156. else
  157. url = tUrl;
  158. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("准入地址 = %s", url.GetData());
  159. return Error_Succeed;
  160. }
  161. SP_BEGIN_ENTITY_MAP()
  162. SP_ENTITY(CCenterSettingEntity)
  163. SP_END_ENTITY_MAP()