This commit is contained in:
zaccaria.majid
2022-10-24 14:23:47 +02:00
17 changed files with 275 additions and 167 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Platforms>AnyCPU;x86;x64</Platforms>
<Version>1.2.2210.2318</Version>
<Version>1.2.2210.2410</Version>
</PropertyGroup>
<ItemGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>MAPO-MONO</i>
<h4>Version: 1.2.2210.2318</h4>
<h4>Version: 1.2.2210.2410</h4>
<br /> Release Note:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
1.2.2210.2318
1.2.2210.2410
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>1.2.2210.2318</version>
<version>1.2.2210.2410</version>
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.ANALYZER/stable/LAST/MP.Mon.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.ANALYZER/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+1
View File
@@ -46,6 +46,7 @@ namespace MP.MONO.Core
public static readonly string ALARM_BLINK_CURR_KEY = $"{BASE_HASH}:Current:AlarmsBlink";
public static readonly string ALARM_CURR_KEY = $"{BASE_HASH}:Current:Alarms";
public static readonly string ALARM_RECEIV_KEY = $"{BASE_HASH}:Current:AlarmsReceived";
public static readonly string ALARM_PEND_KEY = $"{BASE_HASH}:Current:AlarmsPendingClose";
public static readonly string EVENT_LOG_CURR_KEY = $"{BASE_HASH}:Current:EventsLog";
public static readonly string MACH_STATS_CURR_KEY = $"{BASE_HASH}:Current:MachStats";
public static readonly string MAINT_STATS_CURR_KEY = $"{BASE_HASH}:Current:Maintenance";
+177 -17
View File
@@ -1,5 +1,7 @@
using Microsoft.Extensions.Configuration;
using MP.MONO.Core;
using MP.MONO.Data;
using MP.MONO.Data.Controllers;
using Newtonsoft.Json;
using NLog;
using StackExchange.Redis;
@@ -8,19 +10,6 @@ namespace MP.MONO.DECODER
{
public class AlarmsBlinkManager
{
#region Protected Fields
protected static Logger Log = LogManager.GetCurrentClassLogger();
#endregion Protected Fields
#region Private Fields
private static ConnectionMultiplexer? redisConn = null;
private static IDatabase? redisDb = null;
#endregion Private Fields
#region Public Constructors
public AlarmsBlinkManager()
@@ -34,6 +23,22 @@ namespace MP.MONO.DECODER
redisConn = ConnectionMultiplexer.Connect(config.GetConnectionString("Redis"));
redisDb = redisConn.GetDatabase();
Log.Info("ABM: Redis OK!");
// altri parametri per check vari
string connStringDB = DbConfig.CONNECTION_STRING;
if (string.IsNullOrEmpty(connStringDB))
{
Log.Error("ABM: ConnString empty!");
}
else
{
dbController = new MpDbController();
Log.Info("ABM: DbController OK");
Console.WriteLine("ABM: DbController OK");
}
setupAlarmState();
Log.Info("AlarmsBlinkManager OK");
Console.WriteLine("AlarmsBlinkManager OK");
@@ -41,6 +46,112 @@ namespace MP.MONO.DECODER
#endregion Public Constructors
#region Public Properties
/// <summary>
/// Elenco allarmi attivi e acknowled ad es: subito i nuovi, con ritardo i cessati
/// </summary>
public static List<string> alarmsActAck
{
get
{
List<string> answ = new List<string>();
if (useRedis)
{
answ = getAlarms("Current");
}
else
{
answ = _alarmsActAck;
}
return answ;
}
set
{
if (useRedis)
{
setAlarms("Current", value);
}
else
{
_alarmsActAck = value;
}
}
}
/// <summary>
/// Elenco ultimo set allarmi ricevuti
/// </summary>
public static List<string> alarmsLastRec
{
get
{
List<string> answ = new List<string>();
if (useRedis)
{
answ = getAlarms("LastReceived");
}
else
{
answ = _alarmsLastRec;
}
return answ;
}
set
{
if (useRedis)
{
setAlarms("LastReceived", value);
}
else
{
_alarmsLastRec = value;
}
}
}
/// <summary>
/// Ultima Stringa LOG allarmi salvata
/// </summary>
public static string alarmsLogSaved
{
get => _alarmsLogSaved;
set => _alarmsLogSaved = value;
}
public static List<string> alarmsPendingClose
{
get
{
// rileggo da REDIS SE ci sono allarmi che sono pending close... in un area che dura poco (2 sec)
List<string> lista = new List<string>();
// in base al tipo leggo una chiave redis o l'altra...
if (redisDb != null)
{
string rawData = redisDb.StringGet(Constants.ALARM_PEND_KEY);
if (!string.IsNullOrEmpty(rawData))
{
var desList = JsonConvert.DeserializeObject<List<string>>(rawData);
if (desList != null)
{
lista = desList;
}
}
}
return lista;
}
set
{
if (redisDb != null)
{
string rawData = JsonConvert.SerializeObject(value);
redisDb.StringSet(Constants.ALARM_PEND_KEY, rawData, TimeSpan.FromMilliseconds(3000));
}
}
}
#endregion Public Properties
#region Public Methods
/// <summary>
@@ -66,15 +177,15 @@ namespace MP.MONO.DECODER
.Select(grp => grp.First())
.OrderBy(x => x)
.ToList();
Log.Info($"Ricezione update allarmi | {alarmListReceived.Count} --> {alarmListReceivedOk.Count} distinct");
Log.Debug($"Ricezione update allarmi | {alarmListReceived.Count} --> {alarmListReceivedOk.Count} distinct");
}
else
{
Log.Info($"Ricezione ZERO allarmi | {alarmListReceived.Count}");
Log.Debug($"Ricezione ZERO allarmi | {alarmListReceived.Count}");
}
// salvo set allarmi ricevuti...
setAlarms("LastReceived", alarmListReceivedOk);
alarmsLastRec = alarmListReceivedOk;
Log.Debug($"Salvataggio LastReceived | count {alarmListReceivedOk.Count}");
// elenco allarmi confermati
@@ -95,7 +206,7 @@ namespace MP.MONO.DECODER
// riordino
alarmListCurrent = alarmListCurrent.OrderBy(x => x).ToList();
// ...e salvo subito
setAlarms("Current", alarmListCurrent);
alarmsActAck = alarmListCurrent;
// loggo controllo
Log.Debug($"Esito controllo | {alarmListReceivedOk.Count} ricevuti | {alarmListAdded.Count} aggiunti | {alarmListCeased.Count} cessati");
@@ -262,6 +373,43 @@ namespace MP.MONO.DECODER
#endregion Public Methods
#region Protected Fields
protected static Logger Log = LogManager.GetCurrentClassLogger();
#endregion Protected Fields
#region Private Fields
private static ConnectionMultiplexer? redisConn = null;
private static IDatabase? redisDb = null;
private static bool useRedis = true;
private MpDbController dbController = null!;
#endregion Private Fields
#region Private Properties
/// <summary>
/// Elenco allarmi attivi e acknowled ad es: subito i nuovi, con ritardo i cessati
/// </summary>
private static List<string> _alarmsActAck { get; set; } = new List<string>();
/// <summary>
/// Elenco ultimo set allarmi ricevuti
/// </summary>
private static List<string> _alarmsLastRec { get; set; } = new List<string>();
/// <summary>
/// Elenco allarmi registrati come LOG (=ultima variazione riconosciuta)
/// </summary>
private static string _alarmsLogSaved { get; set; } = "";
#endregion Private Properties
#region Private Methods
/// <summary>
@@ -318,6 +466,18 @@ namespace MP.MONO.DECODER
return fatto;
}
/// <summary>
/// Setup iniziale allarmi
/// </summary>
private void setupAlarmState()
{
// setup preliminare allarmi da DB
alarmsActAck = dbController.AlarmRecGetActive().Select(x => x.AlarmListNav.FullValue).Distinct().ToList();
alarmsLastRec = new List<string>();
alarmsPendingClose = new List<string>();
Log.Debug($"Setup Stato allarmi | act: {alarmsActAck.Count}");
}
#endregion Private Methods
}
}
+1 -1
View File
@@ -6,7 +6,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Platforms>AnyCPU;x86;x64</Platforms>
<Version>1.2.2210.2318</Version>
<Version>1.2.2210.2411</Version>
</PropertyGroup>
<ItemGroup>
+16 -16
View File
@@ -6,29 +6,29 @@
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue" />
<variable name="myvar" value="myvalue" />
<!--
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<targets>
<!--
<!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target xsi:type="File"
<target xsi:type="File"
name="fileTarget"
fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=false} | ${message}"
@@ -38,20 +38,20 @@
maxArchiveFiles="90"
enableArchiveFileCompression="true"
keepFileOpen="false" />
<target xsi:type="ColoredConsole"
<target xsi:type="ColoredConsole"
name="consoleTarget"
layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=true}| ${message}" />
</targets>
</targets>
<rules>
<!-- add your logging rules here -->
<rules>
<!-- add your logging rules here -->
<!--
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
<logger name="*" minlevel="Info" writeTo="consoleTarget" />
<logger name="*" minlevel="Info" writeTo="fileTarget" />
</rules>
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
<!--<logger name="*" minlevel="Info" writeTo="consoleTarget" />-->
<logger name="*" minlevel="Info" writeTo="fileTarget" />
</rules>
</nlog>
+58 -111
View File
@@ -81,7 +81,6 @@ IDatabase? redisDb = redisConn.GetDatabase();
AlarmReportingMode alarmMode = AlarmReportingMode.ND;
List<BaseAlarmBankConf>? alarmsBankBitConf = new List<BaseAlarmBankConf>();
List<BaseAlarmRawConf>? alarmsRListConf = new List<BaseAlarmRawConf>();
List<string>? activeAlarmList = new List<string>();
List<AlarmListModel>? alarmsRecorded = new List<AlarmListModel>();
List<MachineMode>? machineModeConf = new List<MachineMode>();
List<MachineStatus>? machineStatusConf = new List<MachineStatus>();
@@ -162,77 +161,11 @@ MessagePipe alarmsRecvPipe = new MessagePipe(redisConn, Constants.ALARM_RAW_QUEU
DateTime lastExecAlarms = DateTime.Now.AddHours(-1);
// registro gestione eventi
alarmsRecvPipe.EA_NewMessage += AlarmsValPipe_EA_NewMessage;
setupAlarmState();
/* --------------------------------
* Funzioni / metodi accessori
* --------------------------------*/
/// <summary>
/// Setup iniziale allarmi
/// </summary>
void setupAlarmState()
{
// setup preliminare allarmi da DB
var actAlarmsList = dbController.AlarmRecGetActive().Select(x => x.AlarmListNav.FullValue).Distinct().ToList();
setAlarms("Current", actAlarmsList);
setAlarms("LastReceived", new List<string>());
Log.Debug($"Setup Stato allarmi | act: {actAlarmsList.Count}");
}
/// <summary>
/// Recupero da redis gli allarmi secondo tipo LastReceived / Sent
/// </summary>
List<string> getAlarms(string tipo)
{
// rileggo da REDIS la conf attuale allarmi già attivi da area ALARM_CURR_KEY
List<string> lastAlarms = new List<string>();
// in base al tipo leggo una chiave redis o l'altra...
string rawData = "";
if (redisDb != null)
{
if (tipo == "LastReceived")
{
rawData = redisDb.StringGet(Constants.ALARM_RECEIV_KEY);
}
else
{
rawData = redisDb.StringGet(Constants.ALARM_CURR_KEY);
}
}
// se trovati uso questi...
if (!string.IsNullOrEmpty(rawData))
{
var rawLastAlarms = JsonConvert.DeserializeObject<List<string>>(rawData);
lastAlarms = rawLastAlarms != null ? rawLastAlarms : new List<string>();
Log.Debug($"Lettura allarmi | tipo: {tipo} | num: {lastAlarms.Count}");
}
return lastAlarms;
}
/// <summary>
/// Salvo in redis gli allarmi secondo tipo LastReceived / Sent
/// </summary>
bool setAlarms(string tipo, List<string> listAlarm)
{
bool fatto = false;
string rawData = JsonConvert.SerializeObject(listAlarm);
if (redisDb != null)
{
if (tipo == "LastReceived")
{
fatto = redisDb.StringSet(Constants.ALARM_RECEIV_KEY, rawData);
}
else
{
fatto = redisDb.StringSet(Constants.ALARM_CURR_KEY, rawData);
}
}
Log.Debug($"Scrittura allarmi | tipo: {tipo} | num: {listAlarm.Count}");
return fatto;
}
AlarmListModel? getAlarmModel(string alarmFullCode)
{
// cerco l'allarme nell'elenco degli allarmi dal DB
@@ -266,44 +199,55 @@ AlarmListModel? getAlarmModel(string alarmFullCode)
async Task<bool> checkCeasedAlarm(string alarmFullCode)
{
bool answ = false;
Log.Debug($"checkCeasedAlarm 01 | Verifica scadenza allarmi | cod: {alarmFullCode}");
// attendo periodo pausa...
await Task.Delay(BlinkPeriodMSec);
// cerco allarme da valore REDIS ultimi ricevuti
var alarmListRecev = getAlarms("LastReceived");
if (alarmListRecev != null)
// verifico NON SIA già in elenco check...
List<string> listClose = AlarmsBlinkManager.alarmsPendingClose;
if (!listClose.Contains(alarmFullCode))
{
// ...SE mancasse
if (!alarmListRecev.Contains(alarmFullCode))
Log.Debug($"checkCeasedAlarm 01 | Verifica scadenza allarmi | cod: {alarmFullCode}");
listClose.Add(alarmFullCode);
AlarmsBlinkManager.alarmsPendingClose = listClose;
// attendo periodo pausa...
await Task.Delay(BlinkPeriodMSec);
// cerco allarme copiando il set degli ultimi ricevuti
List<string> alarmListRecev = AlarmsBlinkManager.alarmsLastRec;
if (alarmListRecev != null)
{
Log.Debug($"checkCeasedAlarm 02 | Allarme ancora mancante | cod: {alarmFullCode}");
// recupero allarme...
// se non lo trovo
var foundAlarm = alarmsRecorded
.Where(x => x.FullValue == alarmFullCode)
.FirstOrDefault();
// --> chiudo
if (foundAlarm != null)
// ...SE mancasse
if (!alarmListRecev.Contains(alarmFullCode))
{
// salvo sul DB
_ = dbController.AlarmRecCloseActive(foundAlarm.AlarmId);
Log.Info($"Chiusura allarme | Id: {foundAlarm.AlarmId}");
Log.Debug($"checkCeasedAlarm 03 | Chiusura allarme | cod: {alarmFullCode}");
Log.Debug($"checkCeasedAlarm 02 | Allarme ancora mancante | cod: {alarmFullCode}");
// recupero allarme...
// se non lo trovo
var foundAlarm = alarmsRecorded
.Where(x => x.FullValue == alarmFullCode)
.FirstOrDefault();
// --> chiudo
if (foundAlarm != null)
{
// salvo sul DB
_ = dbController.AlarmRecCloseActive(foundAlarm.AlarmId);
Log.Info($"Chiusura allarme | Id: {foundAlarm.AlarmId}");
Log.Debug($"checkCeasedAlarm 03 | Chiusura allarme | cod: {alarmFullCode}");
}
// --> rimuovo da elenco attivi!
var alarmListSent = new List<string>(AlarmsBlinkManager.alarmsActAck);
int numPre = alarmListSent.Count();
alarmListSent.Remove(alarmFullCode);
int numPost = alarmListSent.Count();
Log.Debug($"checkCeasedAlarm 04 | Salvataggio Sent alarms | num: {numPre} --> {numPost}");
// invio attivi...
string serAlarms = JsonConvert.SerializeObject(alarmListSent);
// invio sulla message pipeline corretta TUTTI gli allarmi serializzati
alarmsSendPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
}
// --> rimuovo da elenco attivi!
var alarmListSent = getAlarms("Current");
int numPre = alarmListSent.Count();
alarmListSent.Remove(alarmFullCode);
int numPost = alarmListSent.Count();
Log.Debug($"checkCeasedAlarm 04 | Salvataggio Sent alarms | num: {numPre} --> {numPost}");
// invio attivi...
string serAlarms = JsonConvert.SerializeObject(alarmListSent);
// invio sulla message pipeline corretta TUTTI gli allarmi serializzati
alarmsSendPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
answ = true;
}
answ = true;
// rimuovo da pending close
listClose = new List<string>(AlarmsBlinkManager.alarmsPendingClose);
listClose.Remove(alarmFullCode);
AlarmsBlinkManager.alarmsPendingClose = listClose;
}
return answ;
}
@@ -316,7 +260,7 @@ async Task<bool> checkCloseAllAlarm()
bool answ = false;
Log.Debug($"Verifica checkCloseAllAlarm");
// cerco allarme da valore REDIS ultimi ricevuti
var alarmSent = getAlarms("Current");
List<string> alarmSent = new List<string>(AlarmsBlinkManager.alarmsActAck);
if (alarmSent != null)
{
bool isZero = alarmSent.Count() == 0;
@@ -326,7 +270,7 @@ async Task<bool> checkCloseAllAlarm()
// attendo periodo pausa...
await Task.Delay(BlinkPeriodMSec * 2);
// rileggo stato
alarmSent = getAlarms("Current");
alarmSent = new List<string>(AlarmsBlinkManager.alarmsActAck);
isZero = alarmSent.Count() == 0;
// ...SE fossero sempre zero
if (isZero)
@@ -671,10 +615,8 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
// decodifico allarmi ricevuti
var alarmListRaw = JsonConvert.DeserializeObject<List<string>>(currArgs.newMessage);
// allarmi correnti
List<string> alarmListCurrent = getAlarms("Current");
List<string> alarmListCurrent = AlarmsBlinkManager.alarmsActAck;
// controllo se ora allarmi zero...
bool emptyAlarm = (alarmListCurrent.Count > 0 && alarmListRaw.Count == 0);
// init classi helper
List<string> addedAlarms = new List<string>();
@@ -686,8 +628,14 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
string serAlarms = JsonConvert.SerializeObject(alarmListCurrent);
alarmsSendPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
// se cambiato --> preparo record LOG e salvo
if (fatto || emptyAlarm)
// se cambiato --> ultimo ricevuto != current...
string lastLogList = AlarmsBlinkManager.alarmsLogSaved;
// calcolo nuova stringa...
string newLogString = string.Join(", ", alarmListRaw);
bool logChanged = !lastLogList.Equals(newLogString);
AlarmsBlinkManager.alarmsLogSaved = newLogString;
if (logChanged)
{
// preparo dati x alarmLog
AlarmLogModel newAlarmLog = new AlarmLogModel()
@@ -701,7 +649,7 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
};
alarmLogList.Add(newAlarmLog);
_ = dbController.AlarmLogInsertMany(alarmLogList).Result;
Log.Info("Inserito Record AlarmLogModel");
Log.Debug("Inserito Record AlarmLogModel");
}
if (addedAlarms.Count > 0)
@@ -726,7 +674,7 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
}
// salvo sul DB
_ = dbController.AlarmRecInsertMany(alarmRecList).Result;
Log.Info($"Inseriti {alarmRecList.Count} Records AlarmRecModel");
Log.Debug($"Inseriti {alarmRecList.Count} Records AlarmRecModel");
}
if (ceasedAlarms.Count > 0)
{
@@ -742,7 +690,6 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
// Loggo quanto fatto
Log.Debug($"Chiamato controllo differito per {ceasedAlarms.Count} allarmi cessati");
}
#if false
// effettuo selezione dei SOLI allarmi distinct (in caso di cambio posizione...)
@@ -776,7 +723,7 @@ async void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
// rileggo da REDIS la conf attuale allarmi già attivi da area ALARM_CURR_KEY
// FIXME TODO !!! usare una lista thread safe?!?!?
List<string> lastAlarms = getAlarms("Current");
List<string> lastAlarms = alarmsActAck;
List<string> startedAlarms = new List<string>();
List<string> ceasedAlarms = new List<string>();
string serAlarms = "";
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>MAPO-MONO</i>
<h4>Version: 1.2.2210.2318</h4>
<h4>Version: 1.2.2210.2411</h4>
<br /> Release Note:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
1.2.2210.2318
1.2.2210.2411
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>1.2.2210.2318</version>
<version>1.2.2210.2411</version>
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.DECODER/stable/LAST/MP.Mon.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.DECODER/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+1 -1
View File
@@ -6,7 +6,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Platforms>AnyCPU;x86;x64</Platforms>
<Version>1.2.2210.2318</Version>
<Version>1.2.2210.2411</Version>
</PropertyGroup>
<ItemGroup>
+11 -11
View File
@@ -365,40 +365,40 @@ void simAlarms()
// aggiungo 1:1 ed invio
foreach (var item in NewActiveAlarm)
{
Thread.Sleep(rand.Next(400, 700));
Thread.Sleep(rand.Next(0, 10));
currAlarm.Add(item.Key, item.Value);
sendActiveAlarm(currAlarm);
}
// CICLO 01: aspetto periodo blink... tra 80 e 110% periodo
Thread.Sleep(rand.Next(800 * perRefresh, 1100 * perRefresh));
// CICLO 01: aspetto periodo blink... tra 80 e 100% periodo
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
// tolgo tutti ed invio
currAlarm = new Dictionary<string, DateTime>();
sendActiveAlarm(currAlarm);
// riaggiungo 1:1 ed invio
foreach (var item in NewActiveAlarm)
{
Thread.Sleep(rand.Next(400, 700));
Thread.Sleep(rand.Next(200, 600));
currAlarm.Add(item.Key, item.Value);
sendActiveAlarm(currAlarm);
}
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
// CICLO 02: aspetto periodo blink... tra 80 e 110% periodo
// CICLO 02: aspetto periodo blink...
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
// tolgo tutti ed invio
currAlarm = new Dictionary<string, DateTime>();
sendActiveAlarm(currAlarm);
// riaggiungo 1:1 ed invio
foreach (var item in NewActiveAlarm)
{
Thread.Sleep(rand.Next(400, 700));
Thread.Sleep(rand.Next(200, 600));
currAlarm.Add(item.Key, item.Value);
sendActiveAlarm(currAlarm);
}
// CICLO 03: aspetto periodo blink...
Thread.Sleep(rand.Next(800 * perRefresh, 1000 * perRefresh));
// CICLO 03: aspetto periodo blink... tra 80 e 110% periodo
// tolgo tutti ed invio
currAlarm = new Dictionary<string, DateTime>();
sendActiveAlarm(currAlarm);
@@ -421,7 +421,7 @@ void simAlarms()
// invio allarmi
sendActiveAlarm(NewActiveAlarm);
// aspetto poco
Thread.Sleep(rand.Next(100, 1000 * sogliaSecAllarmi));
Thread.Sleep(rand.Next(1000, 1000 * sogliaSecAllarmi));
// svuoto
NewActiveAlarm = new Dictionary<string, DateTime>();
// invio update
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>MAPO-MONO</i>
<h4>Version: 1.2.2210.2318</h4>
<h4>Version: 1.2.2210.2411</h4>
<br /> Release Note:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
1.2.2210.2318
1.2.2210.2411
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>1.2.2210.2318</version>
<version>1.2.2210.2411</version>
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.SIM/stable/LAST/MP.Mon.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.SIM/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>