diff --git a/MachineSim/MachineSim.csproj b/MachineSim/MachineSim.csproj
index c4d5316..515763c 100644
--- a/MachineSim/MachineSim.csproj
+++ b/MachineSim/MachineSim.csproj
@@ -21,28 +21,31 @@
-
+
Always
-
+
Always
-
+
Always
-
+
Always
-
+
Always
-
+
Always
-
+
Always
-
+
+ Always
+
+
Always
diff --git a/MachineSim/Program.cs b/MachineSim/Program.cs
index 35a41d6..0a1a834 100644
--- a/MachineSim/Program.cs
+++ b/MachineSim/Program.cs
@@ -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? statusList = new List();
+List? modeList = new List();
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();
///
-/// Hash Redis contenente i dati MP di una specifico TYPE (es StatusMacchina, StateMachineIngressi, ...)
+/// Setup e salvataggio redis delle conf (es modi/stati)
///
-///
-///
-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? statusList = JsonConvert.DeserializeObject>(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>(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 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));
diff --git a/MachineSim/Simulator.cs b/MachineSim/Simulator.cs
index fe0b150..6c167e2 100644
--- a/MachineSim/Simulator.cs
+++ b/MachineSim/Simulator.cs
@@ -25,9 +25,14 @@ namespace MachineSim
#region Public Constructors
- public Simulator(string _basePath)
+ protected int numMode { get; set; } = 1;
+ protected int numStatus { get; set; } = 1;
+
+ public Simulator(string _basePath, int nMode, int nStatus)
{
basePath = _basePath;
+ numMode = nMode;
+ numStatus = nStatus;
setupConfig();
}
@@ -240,7 +245,7 @@ namespace MachineSim
///
public MachineDTO getStatus()
{
- int maxRun = 5;
+ int maxRun = 7;
int maxExe = 7;
MachineDTO currMachDto = new MachineDTO()
@@ -249,8 +254,10 @@ namespace MachineSim
Model = "SIM Machine",
Name = "DEMO 01",
SerNumber = "2022-0001",
- Mode = $"{(Enums.MachRunMode)rand.Next(0, maxRun)}",
- Status = $"{(Enums.MachExeStatus)rand.Next(0, maxExe)}"
+ ModeId = rand.Next(0, maxRun),
+ StatusId = rand.Next(0, maxExe)
+ //Mode = $"{(Enums.MachRunMode)rand.Next(0, maxRun)}",
+ //Status = $"{(Enums.MachExeStatus)rand.Next(0, maxExe)}"
};
return currMachDto;