From 4a7b75ab7c88b1b628ab3e1e8cddfbfa4ed0f905 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 7 Mar 2022 10:54:54 +0100 Subject: [PATCH] update SIM x generare status --- MachineSim/MachineSim.csproj | 6 ++++++ MachineSim/Program.cs | 38 ++++++++++++++++++++++-------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/MachineSim/MachineSim.csproj b/MachineSim/MachineSim.csproj index 2e5263d..b73c8ce 100644 --- a/MachineSim/MachineSim.csproj +++ b/MachineSim/MachineSim.csproj @@ -8,9 +8,15 @@ + + + + + + diff --git a/MachineSim/Program.cs b/MachineSim/Program.cs index dec365e..d8f4973 100644 --- a/MachineSim/Program.cs +++ b/MachineSim/Program.cs @@ -1,4 +1,6 @@ // See https://aka.ms/new-console-template for more information +using MP.MONO.Data.Controllers; +using Newtonsoft.Json; using StackExchange.Redis; using System.Configuration; @@ -6,6 +8,7 @@ string lineSep = "------------------------------------------------------"; string redisConf = "127.0.0.1:6379"; Random rand = new Random(); +SimController simGen = new SimController(); Console.WriteLine(lineSep); Console.WriteLine($"Starting Machine SIM - redis server on {redisConf}!"); @@ -17,19 +20,9 @@ Console.WriteLine(""); //Create a connection ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(redisConf); ISubscriber sub = redis.GetSubscriber(); +IDatabase? redisDb = redis.GetDatabase(); - -#if false -// ciclo principale -string input; -do -{ - input = Console.ReadLine(); - sub.Publish("allarmi", input); -} while (input != "exit"); -#endif - // avvio tutti i thread... Thread threadStatus = new Thread(simStatus); Thread threadAlarms = new Thread(simAlarms); @@ -45,8 +38,11 @@ void simStatus() int maxPeriod = 3000; do { - var statusCode = rand.Next(1, 5); - saveAndSendMessage("Machine:Status:Current", $"{statusCode} | Stato {statusCode:00}", "status", $"{statusCode}"); + // recupero uno stato simulato + var newStatus = simGen.MachineGetStatus(); + string rawData = JsonConvert.SerializeObject(newStatus); + saveAndSendMessage(mHash("Machine:Status:Current"), rawData, "status", rawData); + // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); } while (true); @@ -59,7 +55,7 @@ void simAlarms() do { var alarmCode = rand.Next(1, 100); - saveAndSendMessage("Machine:Alarms:Current", $"{alarmCode:000} | Allarme PLC {alarmCode}", "allarmi", $"{alarmCode:000}"); + saveAndSendMessage(mHash("Machine:Alarms:Current"), $"{alarmCode:000} | Allarme PLC {alarmCode}", "allarms", $"{alarmCode:000}"); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); } while (true); @@ -69,9 +65,21 @@ void simAlarms() void saveAndSendMessage(string memKey, string value, string notifyChannel, string message) { // effettuo la scrittura nell'area di memoria indicata - redis.GetDatabase().SetAdd(memKey, value); + redisDb.StringSetAsync(memKey, value); ; + //redis.GetDatabase().SetAdd(memKey, value); + //redis.GetDatabase().StringSetAsync(memKey, value); // invio notifica tramite il canale richiesto sub.Publish(notifyChannel, message); Console.WriteLine($"[{notifyChannel}] key: {memKey} | val: {value} | message: {message}"); +} + +/// +/// Hash Redis contenente i dati MP di una specifico TYPE (es StatusMacchina, StateMachineIngressi, ...) +/// +/// +/// +string mHash(string dataType) +{ + return $"MAPO-MONO:{dataType}"; } \ No newline at end of file