You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.9 KiB
C#

3 months ago
using Infrastructure.Cache;
using Infrastructure.CloudSdk.mqttmessagecenter;
using OpenAuth.App.ServiceApp;
using OpenAuth.Repository.Domain;
using System.Text.Json.Nodes;
3 months ago
namespace OpenAuth.WebApi.Model.mqtt
{
public class ThingOsdHandler : IMqttMessageHandler
{
private readonly ILogger<ThingRequestHandler> _logger;
3 months ago
AirportMaintenanceApp _app;
private readonly ICacheContext _cache;
public ThingOsdHandler(ILogger<ThingRequestHandler> logger, AirportMaintenanceApp app, ICacheContext cache)
3 months ago
{
_logger = logger;
3 months ago
_app = app;
_cache = cache;
3 months ago
}
public bool CanHandle(string topic)
{
return topic.Contains("/osd");
}
public Task HandleAsync(string topic, string payload)
{
_logger.LogError($"[osd] Topic={topic}, Payload={payload}");
Console.WriteLine($"[osd] Topic={topic}, Payload={payload}");
3 months ago
var root = JsonNode.Parse(payload)?.AsObject();
_app.AddLog(new LasaLog
3 months ago
{
3 months ago
Id = Guid.NewGuid().ToString(),
Topic = topic,
Method = root["method"]?.ToString() ?? "",
CreateTime = DateTime.Now,
Data = payload
3 months ago
});
var sub_device = root["data"]?["sub_device"]?.ToString() ?? "";
if (!string.IsNullOrEmpty(sub_device))
{
var data = new
{
device_sn = root["data"]?["sub_device"]?["device_sn"]?.ToString() ?? "",
device_online_status = root["data"]?["sub_device"]?["device_online_status"]?.ToString() ?? "",
mode_code = root["data"]?["mode_code"]?.ToString() ?? "",
};
var a = _cache.Set("DeviceState", data, DateTime.Now.AddMinutes(1));
}
3 months ago
// 自定义处理逻辑
return Task.CompletedTask;
}
}
}