using System.Net.Http.Json; using System.Text; using System.Text.Json; namespace IntegrationGateway.Core.Infrastructure; public class GatewayClientFactory { private readonly IHttpClientFactory _httpFactory; private readonly string _volProBaseUrl; public GatewayClientFactory(IHttpClientFactory httpFactory, string volProBaseUrl) { _httpFactory = httpFactory; _volProBaseUrl = volProBaseUrl.TrimEnd('/'); } public HttpClient CreateClient() => _httpFactory.CreateClient("VolPro"); public async Task RegisterAsync(GatewayRegisterRequest req) { var http = CreateClient(); var resp = await http.PostAsJsonAsync($"{_volProBaseUrl}/api/gateway/register", req); if (!resp.IsSuccessStatusCode) return null; return await resp.Content.ReadFromJsonAsync(); } public async Task HeartbeatAsync(GatewayHeartbeatRequest req) { var http = CreateClient(); var resp = await http.PostAsJsonAsync($"{_volProBaseUrl}/api/gateway/heartbeat", req); return resp.IsSuccessStatusCode; } public async Task SyncDevicesAsync(string nodeCode, string token, List devices) { var http = CreateClient(); var resp = await http.PostAsJsonAsync($"{_volProBaseUrl}/api/gateway/sync/devices", new { nodeCode, token, devices }); if (!resp.IsSuccessStatusCode) return null; return await resp.Content.ReadFromJsonAsync(); } public async Task SyncAlarmsAsync(string nodeCode, string token, List alarms) { var http = CreateClient(); var resp = await http.PostAsJsonAsync($"{_volProBaseUrl}/api/gateway/sync/alarms", new { nodeCode, token, alarms }); if (!resp.IsSuccessStatusCode) return null; return await resp.Content.ReadFromJsonAsync(); } } public class GatewayRegisterRequest { public string NodeCode { get; set; } = ""; public string Token { get; set; } = ""; public string AdapterTypes { get; set; } = ""; public string BaseUrl { get; set; } = ""; } public class GatewayHeartbeatRequest { public string NodeCode { get; set; } = ""; public string Token { get; set; } = ""; }