using CloudGaming.Core.AgileConfig;
using CloudGaming.Core.Processors;
using HZY.Framework.DependencyInjection.Attributes;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace CloudGaming.Code.DataBaseModel;
///
/// 用于管理AgileConfig数据
///
public class AppConfigExtendServer(IServiceProvider serviceProvider) : IHostedService
{
[AppSettings("AgileConfig")]
public virtual AgileConfigVM AgileConfig { get; set; }
[Autowired]
public virtual AppConfigTenant AppConfigTenant { get; set; }
///
///
///
[Autowired]
public virtual IHttpClientFactory? httpClientFactory { get; set; }
[Autowired]
public AgileConfigServer agileConfigServer { get; set; }
public async Task StartAsync(CancellationToken cancellationToken)
{
if (AppConfigTenant == null)
{
AppConfigTenant = new AppConfigTenant();
}
AppConfigExtendProcessor appConfigExtendProcessor = new AppConfigExtendProcessor(serviceProvider, AgileConfig);
appConfigExtendProcessor.Run();
//agileConfigServer._httpClientFactory = httpClientFactory;
// await agileConfigServer.Init(AgileConfig);
//var json= await agileConfigServer.AgileConfigApi.GetJson();
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
public class AppConfigExtendProcessor(IServiceProvider serviceProvider, AgileConfigVM agileConfig) : ThreadProcessor
{
protected override async void Proc_Do()
{
using var service = serviceProvider.CreateScope();
var _serviceProvider = service.ServiceProvider;
var httpClientFactory = _serviceProvider.GetService();
var agileConfigServer = _serviceProvider.GetService();
if (agileConfigServer == null)
{
agileConfigServer = new AgileConfigServer();
}
if (agileConfigServer._httpClientFactory == null)
{
agileConfigServer._httpClientFactory = httpClientFactory;
}
try
{
await agileConfigServer.Init(agileConfig);
}
catch (Exception ex)
{
}
var appConfigTenant = _serviceProvider.GetService();
if (agileConfigServer == null)
{
agileConfigServer = new AgileConfigServer();
}
while (true)
{
if (agileConfigServer.ExAt < DateTime.Now)
{
await agileConfigServer.LoginAsync();
}
var json = await agileConfigServer.AgileConfigApi.GetJson(agileConfig.AppId, agileConfig.Env);
if (json != null && json.Success && !string.IsNullOrEmpty(json.Data))
{
var _json = json.Data;
var appConfigTenant1 = JsonConvert.DeserializeObject(_json);
if (appConfigTenant1 != null)
{
appConfigTenant.Tenants = appConfigTenant1.Tenants;
}
}
Thread.Sleep(1000 * 60 * 5);
}
}
}