using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Net.Http.Json;
using System.Text;
using System.Text.Json;
namespace VolPro.Warehouse.Services;
public class GatewayClient
{
private readonly HttpClient _http;
private readonly IConfiguration _config;
public GatewayClient(IHttpClientFactory factory, IConfiguration config)
{
_http = factory.CreateClient("IntegrationGateway");
_config = config;
}
/// 检查网关健康状态
public async Task?> HealthCheckAsync(string gatewayBaseUrl)
{
var resp = await _http.GetAsync($"{gatewayBaseUrl}/api/gateway/health");
resp.EnsureSuccessStatusCode();
var json = await resp.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize(json)?.Adapters;
}
/// 获取实时数据
public async Task GetRealtimeAsync(string gatewayBaseUrl, string adapter, string deviceId)
{
var resp = await _http.GetAsync($"{gatewayBaseUrl}/api/gateway/realtime/{adapter}/{deviceId}");
resp.EnsureSuccessStatusCode();
return await resp.Content.ReadAsStringAsync();
}
/// 设备控制
public async Task ControlDeviceAsync(string gatewayBaseUrl, string adapter, string deviceId, int pointIndex, double value)
{
var resp = await _http.PostAsJsonAsync($"{gatewayBaseUrl}/api/gateway/realtime/{adapter}/control", new
{
deviceSourceId = deviceId,
pointIndex,
value
});
resp.EnsureSuccessStatusCode();
}
private class GatewayHealth
{
public string Gateway { get; set; } = "";
public Dictionary Adapters { get; set; } = new();
}
}