Medusa.net/Medusa.Core/Handlers/Common/PutPcbEventHandler.cs

46 lines
1.7 KiB
C#
Raw Normal View History

using Medusa.Core.Attributes;
using System.Xml.Linq;
namespace Medusa.Core.Handlers.Common
{
[Handler("pcbevent", "put")]
public class PutPcbEventHandler(ILogger<PutPcbEventHandler> logger, XDocument body) : IHandler
{
private readonly XDocument _body = body;
private readonly ILogger<PutPcbEventHandler> _logger = logger;
public Task<XDocument> HandleAsync(string model)
{
var rootCallElement = _body.Root;
var itemElement = rootCallElement?.Element("pcbevent")?.Element("item");
var timeElement = itemElement?.Element("time");
string time = timeElement is not null ? UnixTimeStampToDateTime(double.Parse(timeElement.Value)).ToString() : "";
_logger.LogInformation("PCBEvent: tag={Tag} srcid={SrcId} model={Model} name={Name} time={Time}",
rootCallElement?.Attribute("tag")?.Value ?? "",
rootCallElement?.Attribute("srcid")?.Value ?? "",
rootCallElement?.Attribute("model")?.Value ?? "",
itemElement?.Element("name")?.Value ?? "",
time
);
var pcbEvent = new XElement("response",
new XElement("pcbevent",
new XAttribute("status", "0")));
var document = new XDocument(new XElement("response", pcbEvent));
return Task.FromResult(document);
}
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
// Unix timestamp is seconds past epoch
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateTime = dateTime.AddSeconds(unixTimeStamp).ToLocalTime();
return dateTime;
}
}
}