Update SIM

This commit is contained in:
Samuele Locatelli
2022-03-09 20:00:52 +01:00
parent 76d5a0343e
commit b888c542b6
3 changed files with 72 additions and 30 deletions
+50 -18
View File
@@ -1,6 +1,8 @@
// See https://aka.ms/new-console-template for more information
using MachineSim;
using MP.MONO.Core.CONF;
using MP.MONO.Core.DTO;
using MP.MONO.Data;
using MP.MONO.Data.Controllers;
using Newtonsoft.Json;
using StackExchange.Redis;
@@ -9,6 +11,8 @@ string lineSep = "------------------------------------------------------";
string redisConf = "127.0.0.1:6379";
Random rand = new Random();
List<MachineStatus>? statusList = new List<MachineStatus>();
List<MachineMode>? modeList = new List<MachineMode>();
Console.WriteLine(lineSep);
Console.WriteLine($"Starting Machine SIM - redis server on {redisConf}!");
@@ -22,8 +26,12 @@ ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(redisConf);
ISubscriber sub = redis.GetSubscriber();
IDatabase? redisDb = redis.GetDatabase();
// imposto parametri simulatore
var currSimGen = new Simulator(Directory.GetCurrentDirectory());
string confPath = Path.Combine(Directory.GetCurrentDirectory(), "conf");
// salvo configurazioni in redis
setupConf();
var currSimGen = new Simulator(confPath, modeList.Count, statusList.Count);
// avvio tutti i thread...
Thread threadStatus = new Thread(simStatus);
@@ -47,19 +55,40 @@ threadEvHistory.Start();
threadActLog.Start();
/// <summary>
/// Hash Redis contenente i dati MP di una specifico TYPE (es StatusMacchina, StateMachineIngressi, ...)
/// Setup e salvataggio redis delle conf (es modi/stati)
/// </summary>
/// <param name="dataType"></param>
/// <returns></returns>
string mHash(string dataType)
void setupConf()
{
return $"MAPO-MONO:{dataType}";
// leggo e salvo conf stati
string fullPath = Path.Combine(confPath, "ConfStatus.json");
if (File.Exists(fullPath))
{
var rawData = File.ReadAllText(fullPath);
if (!string.IsNullOrEmpty(rawData))
{
List<MachineStatus>? statusList = JsonConvert.DeserializeObject<List<MachineStatus>>(rawData);
// salvo in redis!
redisDb.StringSetAsync(Utils.mHash("Conf:Status"), JsonConvert.SerializeObject(statusList));
}
}
// leggo e salvo conf modi
fullPath = Path.Combine(confPath, "ConfMode.json");
if (File.Exists(fullPath))
{
var rawData = File.ReadAllText(fullPath);
if (!string.IsNullOrEmpty(rawData))
{
var localObj = JsonConvert.DeserializeObject<List<MachineMode>>(rawData);
// salvo in redis!
redisDb.StringSetAsync(Utils.mHash("Conf:Mode"), JsonConvert.SerializeObject(localObj));
}
}
}
void saveAndSendMessage(string memKey, string value, string notifyChannel, string message)
{
// effettuo la scrittura nell'area di memoria indicata
redisDb.StringSetAsync(memKey, value); ;
redisDb.StringSetAsync(memKey, value);
//redis.GetDatabase().SetAdd(memKey, value);
//redis.GetDatabase().StringSetAsync(memKey, value);
@@ -67,6 +96,7 @@ void saveAndSendMessage(string memKey, string value, string notifyChannel, strin
sub.Publish(notifyChannel, message);
Console.WriteLine($"[{notifyChannel}] key: {memKey} | val: {value} | message: {message}");
}
void simAlarms()
{
int minPeriod = 3000;
@@ -88,11 +118,12 @@ void simAlarms()
}
string rawData = JsonConvert.SerializeObject(activeAlarms);
// decodifico allarme e lo trasformo in List<String> di allarmi attivi...
saveAndSendMessage(mHash("Machine:Alarms:Current"), rawData, "allarms", rawData);
saveAndSendMessage(Utils.mHash("Machine:Alarms:Current"), rawData, "allarms", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
} while (true);
}
void simParameters()
{
int minPeriod = 250;
@@ -102,22 +133,23 @@ void simParameters()
{
var newParams = currSimGen.getParameters();
string rawData = JsonConvert.SerializeObject(newParams);
saveAndSendMessage(mHash("Machine:Parameters:Current"), rawData, "parameters", rawData);
saveAndSendMessage(Utils.mHash("Machine:Parameters:Current"), rawData, "parameters", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
} while (true);
}
void simStatus()
{
int minPeriod = 2000;
int maxPeriod = 3000;
int minPeriod = 1000;
int maxPeriod = 5000;
do
{
// recupero uno stato simulato
var newStatus = currSimGen.getStatus();
string rawData = JsonConvert.SerializeObject(newStatus);
saveAndSendMessage(mHash("Machine:Status:Current"), rawData, "status", rawData);
saveAndSendMessage(Utils.mHash("Machine:Status:Current"), rawData, "status", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
@@ -134,7 +166,7 @@ void simProd()
// recupero uno stato simulato
var newStatus = currSimGen.getProd();
string rawData = JsonConvert.SerializeObject(newStatus);
saveAndSendMessage(mHash("Machine:Production:Current"), rawData, "production", rawData);
saveAndSendMessage(Utils.mHash("Machine:Production:Current"), rawData, "production", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
@@ -151,7 +183,7 @@ void simMachStat()
// recupero uno stato simulato
var newVal = currSimGen.getProdStats();
string rawData = JsonConvert.SerializeObject(newVal);
saveAndSendMessage(mHash("Machine:MachStats:Current"), rawData, "machstats", rawData);
saveAndSendMessage(Utils.mHash("Machine:MachStats:Current"), rawData, "machstats", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
@@ -168,7 +200,7 @@ void simMaint()
// recupero uno stato simulato
var newVal = currSimGen.getMaint();
string rawData = JsonConvert.SerializeObject(newVal);
saveAndSendMessage(mHash("Machine:Maintenance:Current"), rawData, "maintenance", rawData);
saveAndSendMessage(Utils.mHash("Machine:Maintenance:Current"), rawData, "maintenance", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
@@ -185,7 +217,7 @@ void simTools()
// recupero uno stato simulato
var newVal = currSimGen.getTools();
string rawData = JsonConvert.SerializeObject(newVal);
saveAndSendMessage(mHash("Machine:Tools:Current"), rawData, "tools", rawData);
saveAndSendMessage(Utils.mHash("Machine:Tools:Current"), rawData, "tools", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
@@ -202,7 +234,7 @@ void simEvents()
// recupero uno stato simulato
var newVal = currSimGen.getEvents();
string rawData = JsonConvert.SerializeObject(newVal);
saveAndSendMessage(mHash("Machine:Events:Current"), rawData, "events", rawData);
saveAndSendMessage(Utils.mHash("Machine:Events:Current"), rawData, "events", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));
@@ -219,7 +251,7 @@ void simActivityLog()
// recupero uno stato simulato
var newVal = currSimGen.getActLog();
string rawData = JsonConvert.SerializeObject(newVal);
saveAndSendMessage(mHash("Machine:ActivityLog:Current"), rawData, "activitylog", rawData);
saveAndSendMessage(Utils.mHash("Machine:ActivityLog:Current"), rawData, "activitylog", rawData);
// attesa random
Thread.Sleep(rand.Next(minPeriod, maxPeriod));