using System;
using System.Collections.Generic;
namespace IOB_UT_NEXT
{
///
/// Rappresentazione dello stato corrente dell'IOB
///
public class IobWinStatus
{
#region Public Properties
///
/// ID univoco
///
public string CodIob { get; set; } = "0";
///
/// Contatore IOB
///
public float counterIOB { get; set; } = 0;
///
/// Contatore Macchina
///
public float counterMAC { get; set; } = 0;
///
/// Ultimo stato noto dei parametri in memoria letti dalla macchina
///
public Dictionary currParams { get; set; } = new Dictionary();
///
/// Note (libere) da child a controller
///
public string freeNotes { get; set; } = "";
///
/// Tipo IOB
///
public string IobType { get; set; } = "";
///
/// DataOra ultima comunicazione IN (con PLC)
///
public DateTime lastDataIn { get; set; } = DateTime.Now.AddMinutes(-1);
///
/// DataOra ultima comunicazione OUT (con MP Server)
///
public DateTime lastDataOut { get; set; } = DateTime.Now.AddDays(-1);
///
/// DataOra ultima comunicazione OUT (con MP Server)
///
public DateTime lastUpdate { get; set; } = DateTime.Now.AddDays(-1);
///
/// Status del SINGOLO IOB
///
public bool online { get; set; } = false;
///
/// Lungh coda ALLARMI in uscita
///
public int queueAlLen { get; set; } = 0;
///
/// Lunghezza coda EVENTI in uscita
///
public int queueEvLen { get; set; } = 0;
///
/// Lunghezza coda FluxLog in uscita
///
public int queueFlLen { get; set; } = 0;
///
/// Lungh coda MESSAGGI in uscita
///
public int queueMsLen { get; set; } = 0;
///
/// Lungh coda UserLog in uscita
///
public int queueRawTransfLen { get; set; } = 0;
///
/// Lungh coda UserLog in uscita
///
public int queueUlLen { get; set; } = 0;
///
/// Semaforo IN (IOB-Macchina)
///
public string semIn { get; set; } = "ND";
///
/// Semaforo OUT (IOB-MPServer)
///
public string semOut { get; set; } = "ND";
///
/// Parametri configurazione (es IP target, porta, ...)
///
public Dictionary setupParams { get; set; } = new Dictionary();
///
/// Valore minimo da considerare come delta secondi x indicare variazione sui dati temporali
///
public int minDeltaSec { get; set; } = 5;
#endregion Public Properties
#region Public Methods
///
/// Override metodo di equality
///
///
///
public override bool Equals(object obj)
{
if (!(obj is IobWinStatus item))
return false;
if (online != item.online)
return false;
// controllo se sia ALMENO 10 sec...
if (lastUpdate != item.lastUpdate)
{
if (lastUpdate.Subtract(item.lastUpdate).TotalSeconds > minDeltaSec)
return false;
}
// controllo se sia ALMENO 3 sec...
if (lastDataIn != item.lastDataIn)
{
if (lastDataIn.Subtract(item.lastDataIn).TotalSeconds > minDeltaSec)
return false;
}
// controllo se sia ALMENO 5 sec...
if (lastDataOut != item.lastDataOut)
{
if (lastDataOut.Subtract(item.lastDataOut).TotalSeconds > minDeltaSec)
return false;
}
if (semIn != item.semIn)
return false;
if (semOut != item.semOut)
return false;
//if (!currParams.Equals(item.currParams))
// return false;
if (counterIOB != item.counterIOB)
return false;
if (counterMAC != item.counterMAC)
return false;
if (queueAlLen != item.queueAlLen)
return false;
if (queueEvLen != item.queueEvLen)
return false;
if (queueFlLen != item.queueFlLen)
return false;
if (queueMsLen != item.queueMsLen)
return false;
if (queueRawTransfLen != item.queueRawTransfLen)
return false;
if (queueUlLen != item.queueUlLen)
return false;
if (freeNotes != item.freeNotes)
return false;
//if (setupParams != item.setupParams)
// return false;
if (IobType != item.IobType)
return false;
if (CodIob != item.CodIob)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
#endregion Public Methods
}
}