Update SIM
This commit is contained in:
+50
-18
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user