You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.5 KiB
68 lines
2.5 KiB
using Application.Domain.Entities;
|
|
using CSScriptLib;
|
|
using Hangfire;
|
|
using Infrastructure.Events;
|
|
using System;
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace IoTNode.Services
|
|
{
|
|
public class EventHandler : IEventHander<EntityInsertedEvent<IoTTimer>>,
|
|
IEventHander<EntityUpdatedEvent<IoTTimer>>,
|
|
IEventHander<EntityDeletedEvent<IoTTimer>>,
|
|
IEventHander<EntityInsertedEvent<IoTTigger>>,
|
|
IEventHander<EntityUpdatedEvent<IoTTigger>>,
|
|
IEventHander<EntityDeletedEvent<IoTTigger>>,
|
|
IEventHander<EntityUpdatedEvent<Data>>
|
|
{
|
|
public static ConcurrentDictionary<Guid, IoTTigger> Tiggers = new ConcurrentDictionary<Guid, IoTTigger>();
|
|
|
|
public void Handle(EntityInsertedEvent<IoTTimer> message)
|
|
{
|
|
RecurringJob.AddOrUpdate<EventJob>(message.Message.Id.ToString(), o => o.TimerHanle(message.Message.Id), message.Message.Cron);
|
|
}
|
|
|
|
public void Handle(EntityUpdatedEvent<IoTTimer> message)
|
|
{
|
|
RecurringJob.AddOrUpdate<EventJob>(message.Message.Id.ToString(), o => o.TimerHanle(message.Message.Id), message.Message.Cron);
|
|
}
|
|
|
|
public void Handle(EntityDeletedEvent<IoTTimer> message)
|
|
{
|
|
RecurringJob.RemoveIfExists(message.Message.Id.ToString());
|
|
}
|
|
|
|
public void Handle(EntityInsertedEvent<IoTTigger> message)
|
|
{
|
|
Tiggers.TryAdd(message.Message.Id, message.Message);
|
|
}
|
|
|
|
public void Handle(EntityUpdatedEvent<IoTTigger> message)
|
|
{
|
|
Tiggers.TryRemove(message.Message.Id, out IoTTigger tigger);
|
|
Tiggers.TryAdd(message.Message.Id, message.Message);
|
|
}
|
|
|
|
public void Handle(EntityDeletedEvent<IoTTigger> message)
|
|
{
|
|
Tiggers.TryRemove(message.Message.Id, out IoTTigger tigger);
|
|
}
|
|
|
|
public void Handle(EntityUpdatedEvent<Data> message)
|
|
{
|
|
var data = message.Message;
|
|
foreach (var tigger in Tiggers)
|
|
{
|
|
var methodText = $"bool Valid(string name,string key,{data.Type.ToString().ToLower()} value,string description){{ return {tigger.Value};}}";
|
|
Console.WriteLine(methodText);
|
|
dynamic method = CSScript.Evaluator.LoadMethod(methodText);
|
|
dynamic value = message.Message.GetValue();
|
|
var result = method.Valid(data.Name, data.Key, value, data.Description);
|
|
if (result)
|
|
{
|
|
//call tigger's command
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |