54 lines
1.8 KiB
C#
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();
|
|
}
|
|
}
|