using Application.Domain.Entities; using CSScriptLib; using Hangfire; using Infrastructure.Events; using System; using System.Collections.Concurrent; namespace IoTNode.Services { public class IoTNodeEventHandler : IEventHander>, IEventHander>, IEventHander>, IEventHander>, IEventHander>, IEventHander>, IEventHander> { public static ConcurrentDictionary Tiggers = new ConcurrentDictionary(); public void Handle(EntityInsertedEvent message) { RecurringJob.AddOrUpdate(message.Message.Id.ToString(), o => o.TimerHanle(message.Message.Id), message.Message.Cron); } public void Handle(EntityUpdatedEvent message) { RecurringJob.AddOrUpdate(message.Message.Id.ToString(), o => o.TimerHanle(message.Message.Id), message.Message.Cron); } public void Handle(EntityDeletedEvent message) { RecurringJob.RemoveIfExists(message.Message.Id.ToString()); } public void Handle(EntityInsertedEvent message) { Tiggers.TryAdd(message.Message.Id, message.Message); } public void Handle(EntityUpdatedEvent message) { Tiggers.TryRemove(message.Message.Id, out IoTTigger tigger); Tiggers.TryAdd(message.Message.Id, message.Message); } public void Handle(EntityDeletedEvent message) { Tiggers.TryRemove(message.Message.Id, out IoTTigger tigger); } public void Handle(EntityUpdatedEvent 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 } } } } }