namespace CommonConsole { using Common.Hardware.SIRT; using Common.Hardware.SIRT.Parameters; using Common.Hardware.WaterMeter.eRegister; using Common.Hardware.WaterMeter.eRegister.Features; using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.IO; public class Program { public static void Main() { var client = new SIRTClient("COM6"); client.OpenConnection(); Console.ReadKey(); client.CloseConnection(); } } public class SIRTClient { private readonly ConcurrentDictionary tasks; private readonly SIRTBroadcaster broadcaster; public SIRTClient(string comPort) { this.tasks = new ConcurrentDictionary(); this.broadcaster = new SIRTBroadcaster(comPort); this.broadcaster.Activated += this.Broadcaster_Activated; this.broadcaster.Connected += this.Broadcaster_Connected; this.broadcaster.Disconnected += this.Broadcaster_Disconnected; this.broadcaster.Logging += this.Broadcaster_Logging; this.broadcaster.MessageReceived += this.Broadcaster_MessageReceived; } internal void CloseConnection() => this.broadcaster.Close(); internal void OpenConnection() => this.broadcaster.Open(); private void Broadcaster_Activated() { Console.WriteLine(nameof(Broadcaster_Activated)); this.tasks.GetOrAdd(4291796386, _ => { var task = new EregisterTask(868) { Cmd = SIRTMessage.W_PAM, P1 = new P811 { DelPamSemi = true, }, Data = new ChangeRadioId { Address = 309030150 }.Append(new ProvidePin { AuthLevel = AuthLevel.III }), RequestAddress = 4291796386, ResponseAddress = 309030150 }; task.Completed += this.Task_Completed; this.broadcaster.EnqueueTask(task); return task; }); } private void Broadcaster_Connected() => Console.WriteLine(nameof(Broadcaster_Connected)); private void Broadcaster_Disconnected() => Console.WriteLine(nameof(Broadcaster_Disconnected)); private void Broadcaster_Logging(string message) { } private void Broadcaster_MessageReceived(SIRTMessage message) { } private void Task_Completed(SIRTTask task) { task.Completed -= this.Task_Completed; Console.WriteLine($"Task_Completed: {task}"); File.WriteAllText($"..\\..\\Tasks\\{task.RequestAddress}.json", JsonConvert.SerializeObject(task, new JsonSerializerSettings { Formatting = Formatting.Indented })); } } }