Files
SecMPS/api_sqlsugar/Warehouse/Services/GatewayClient.cs
2026-05-16 23:24:41 +08:00

54 lines
1.8 KiB
C#

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
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;
}
/// <summary>检查网关健康状态</summary>
public async Task<Dictionary<string, bool>?> HealthCheckAsync(string gatewayBaseUrl)
{
var resp = await _http.GetAsync($"{gatewayBaseUrl}/api/gateway/health");
resp.EnsureSuccessStatusCode();
var json = await resp.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<GatewayHealth>(json)?.Adapters;
}
/// <summary>获取实时数据</summary>
public async Task<string> 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();
}
/// <summary>设备控制</summary>
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<string, bool> Adapters { get; set; } = new();
}
}