Merge branch 'Release/UpdateBlinkTab1'

This commit is contained in:
Samuele Locatelli
2024-02-27 08:37:08 +01:00
20 changed files with 226 additions and 65 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ else
{
if (Width > 640)
{
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
<img src="@ImgUrlMacc(RecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@RecMSE.CodMacchina">
<div class="bg-black">
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
+7 -2
View File
@@ -36,6 +36,9 @@ namespace MP_TAB3.Components
[Parameter]
public int Width { get; set; } = 0;
[Parameter]
public bool doBlink { get; set; } = false;
#endregion Public Properties
#region Public Methods
@@ -110,16 +113,18 @@ namespace MP_TAB3.Components
get
{
string answ = "border-3";
// se blink --> bianco!
if (RecMSE != null)
{
switch (RecMSE.Semaforo)
{
case "sGi":
answ += " border-warning";
answ += doBlink ? " border-secondary shadow shadow-primary" : " border-warning shadow shadow-warning";
break;
case "sRo":
answ += " border-danger";
answ += doBlink ? " border-secondary shadow shadow-primary" : " border-danger shadow shadow-danger";
break;
case "sGr":
+46 -4
View File
@@ -83,26 +83,68 @@
color: #fff;
}
/*end semafori */
/* shadow customizzate */
/* Custom shadow class definitions */
.shadow {
--bs-shadow-rgb: 0, 0, 0;
box-shadow: 0 0.5rem 1rem rgba(var(--bs-shadow-rgb), 0.15) !important;
}
.shadow-sm {
--bs-shadow-rgb: 0, 0, 0;
box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-shadow-rgb), 0.075) !important;
}
.shadow-lg {
--bs-shadow-rgb: 0, 0, 0;
box-shadow: 0 1rem 3rem rgba(var(--bs-shadow-rgb), 0.175) !important;
}
.shadow-none {
box-shadow: none !important;
}
/* Custom shadow classes with specific colors */
.shadow-primary {
--bs-shadow-rgb: var(--bs-primary-rgb);
}
.shadow-secondary {
--bs-shadow-rgb: var(--bs-secondary-rgb);
}
.shadow-success {
--bs-shadow-rgb: var(--bs-success-rgb);
}
.shadow-info {
--bs-shadow-rgb: var(--bs-info-rgb);
}
.shadow-warning {
--bs-shadow-rgb: var(--bs-warning-rgb);
}
.shadow-danger {
--bs-shadow-rgb: var(--bs-danger-rgb);
}
.shadow-light {
--bs-shadow-rgb: var(--bs-light-rgb);
}
.shadow-dark {
--bs-shadow-rgb: var(--bs-dark-rgb);
}
.card-body {
background-color: currentColor;
background-image: linear-gradient(121deg, rgba(255, 255, 255, 0.2) -0.71%, rgba(255, 255, 255, 0.05) 97.66%);
}
.imgFitToSize {
height: 11rem;
height: 10rem;
object-fit: cover;
}
.pholderHeight {
height: 6rem;
height: 7rem;
object-fit: cover;
}
@media (max-width: 640.98px) {
.imgFitToSize {
height: 8rem;
height: 7.5rem;
}
.card-body {
background-color: transparent;
}
.pholderHeight {
height: 4rem;
height: 5rem;
}
}
+63 -4
View File
@@ -90,30 +90,89 @@
color: #fff;
}
/*end semafori */
/* shadow customizzate */
/* Custom shadow class definitions */
.shadow {
--bs-shadow-rgb: 0, 0, 0;
box-shadow: 0 0.5rem 1rem rgba(var(--bs-shadow-rgb), 0.15) !important;
}
.shadow-sm {
--bs-shadow-rgb: 0, 0, 0;
box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-shadow-rgb), 0.075) !important;
}
.shadow-lg {
--bs-shadow-rgb: 0, 0, 0;
box-shadow: 0 1rem 3rem rgba(var(--bs-shadow-rgb), 0.175) !important;
}
.shadow-none {
box-shadow: none !important;
}
/* Custom shadow classes with specific colors */
.shadow-primary {
--bs-shadow-rgb: var(--bs-primary-rgb);
}
.shadow-secondary {
--bs-shadow-rgb: var(--bs-secondary-rgb);
}
.shadow-success {
--bs-shadow-rgb: var(--bs-success-rgb);
}
.shadow-info {
--bs-shadow-rgb: var(--bs-info-rgb);
}
.shadow-warning {
--bs-shadow-rgb: var(--bs-warning-rgb);
}
.shadow-danger {
--bs-shadow-rgb: var(--bs-danger-rgb);
}
.shadow-light {
--bs-shadow-rgb: var(--bs-light-rgb);
}
.shadow-dark {
--bs-shadow-rgb: var(--bs-dark-rgb);
}
.card-body {
background-color: currentColor;
background-image: linear-gradient(121deg, rgba(255, 255, 255, 0.20) -0.71%, rgba(255, 255, 255, 0.05) 97.66%);
}
.imgFitToSize {
height: 11rem;
height: 10rem;
object-fit: cover;
}
.pholderHeight {
height: 6rem;
height: 7rem;
object-fit: cover;
}
@media (max-width: 640.98px){
.imgFitToSize{
height: 8rem;
height: 7.5rem;
}
.card-body{
background-color: transparent;
}
.pholderHeight {
height: 4rem;
height: 5rem;
}
}
+1 -1
View File
@@ -1 +1 @@
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:11rem;object-fit:cover;}.pholderHeight{height:6rem;object-fit:cover;}@media(max-width:640.98px){.imgFitToSize{height:8rem;}.card-body{background-color:transparent;}.pholderHeight{height:4rem;}}
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}.pholderHeight{height:7rem;object-fit:cover;}@media(max-width:640.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}.pholderHeight{height:5rem;}}
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>6.16.2402.2620</Version>
<Version>6.16.2402.2708</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB3</RootNamespace>
</PropertyGroup>
+45 -13
View File
@@ -42,6 +42,7 @@ namespace MP_TAB3.Pages
IdxMacc = "";
CurrMSE = null;
TDFeeder.dataPipe.EA_NewMessage -= DataPipe_EA_NewMessage;
TDFeeder.blinkPipe.EA_NewMessage -= BlinkPipe_EA_NewMessage;
}
#endregion Public Methods
@@ -57,6 +58,7 @@ namespace MP_TAB3.Pages
await base.OnInitializedAsync();
await ReloadData();
TDFeeder.dataPipe.EA_NewMessage += DataPipe_EA_NewMessage;
TDFeeder.blinkPipe.EA_NewMessage += BlinkPipe_EA_NewMessage;
}
/// <summary>
@@ -100,10 +102,25 @@ namespace MP_TAB3.Pages
}
}
protected virtual async Task ReloadData()
{
if (string.IsNullOrEmpty(IdxMacc))
{
IdxMacc = await MsgServ.IdxMaccGet();
}
// recupero MSE macchina....
if (!string.IsNullOrEmpty(IdxMacc))
{
CurrMSE = await MsgServ.GetMachineMse(IdxMacc);
}
}
#endregion Protected Methods
#region Private Fields
private bool doBlink = false;
/// <summary>
/// DateTime ultimo salvataggio in LocalStorage
/// </summary>
@@ -113,6 +130,34 @@ namespace MP_TAB3.Pages
#region Private Methods
/// <summary>
/// Ricezione evento blink
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BlinkPipe_EA_NewMessage(object? sender, EventArgs e)
{
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly List<string> --> allarmi
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
try
{
var dataRaw = JsonConvert.DeserializeObject<string>(currArgs.newMessage);
if (dataRaw != null)
{
bool.TryParse($"{dataRaw}", out doBlink);
}
}
catch
{ }
InvokeAsync(() =>
{
StateHasChanged();
});
}
}
/// <summary>
/// Ricevuto nuovi dati da mostrare!
/// </summary>
@@ -142,19 +187,6 @@ namespace MP_TAB3.Pages
});
}
protected virtual async Task ReloadData()
{
if (string.IsNullOrEmpty(IdxMacc))
{
IdxMacc = await MsgServ.IdxMaccGet();
}
// recupero MSE macchina....
if (!string.IsNullOrEmpty(IdxMacc))
{
CurrMSE = await MsgServ.GetMachineMse(IdxMacc);
}
}
#endregion Private Methods
}
}
+1 -1
View File
@@ -14,7 +14,7 @@
{
currIdx++;
<div class="col px-1">
<MachineBlock RecMSE="@item" FullMode="true" Width="@Width" Height="@Height" showCard="@ShowCard"></MachineBlock>
<MachineBlock RecMSE="@item" FullMode="true" Width="@Width" Height="@Height" showCard="@ShowCard" doBlink="@doBlink"></MachineBlock>
</div>
@if (currIdx >= maxBlocks)
{
+31 -2
View File
@@ -19,6 +19,7 @@ namespace MP_TAB3.Pages
{
ListMSE = null;
TDFeeder.dataPipe.EA_NewMessage -= DataPipe_EA_NewMessage;
TDFeeder.blinkPipe.EA_NewMessage -= BlinkPipe_EA_NewMessage;
GC.Collect();
}
@@ -138,6 +139,7 @@ namespace MP_TAB3.Pages
ListMSE = null;
setDefaults();
TDFeeder.dataPipe.EA_NewMessage += DataPipe_EA_NewMessage;
TDFeeder.blinkPipe.EA_NewMessage += BlinkPipe_EA_NewMessage;
Random rnd = new Random();
await Task.Delay(rnd.Next(1, 50));
SetupConf();
@@ -162,8 +164,7 @@ namespace MP_TAB3.Pages
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private static Logger Log = LogManager.GetCurrentClassLogger();
private bool doBlink = false;
#endregion Private Fields
@@ -180,6 +181,34 @@ namespace MP_TAB3.Pages
#region Private Methods
/// <summary>
/// Ricezione evento blink
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BlinkPipe_EA_NewMessage(object? sender, EventArgs e)
{
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly List<string> --> allarmi
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
try
{
var dataRaw = JsonConvert.DeserializeObject<string>(currArgs.newMessage);
if (dataRaw != null)
{
bool.TryParse($"{dataRaw}", out doBlink);
}
}
catch
{ }
InvokeAsync(() =>
{
StateHasChanged();
});
}
}
/// <summary>
/// Ricevuto nuovi dati da mostrare!
/// </summary>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 6.16.2402.2620</h4>
<h4>Versione: 6.16.2402.2708</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2402.2620
6.16.2402.2708
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2402.2620</version>
<version>6.16.2402.2708</version>
<url>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+1 -1
View File
@@ -17,7 +17,7 @@
"MP.Mag": "Server=SQL2016DEV;Database=MoonPro_MAG; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;"
},
"OptConf": {
"msRefresh": "1100",
"msRefresh": "1500",
"BaseAddr": "https://localhost:7295/MP/TAB3/",
"BaseUrl": "/MP/TAB3",
"ImgBasePath": "https://iis01.egalware.com/MP/images/macchine/small/",
+1 -19
View File
@@ -40,16 +40,6 @@ namespace MP.Data.Services
stopTimers();
}
#if false
/// <summary>
/// Richiesta attivazione --&gt; sposto avanti 1 minuto il periodo limite x fast running
/// </summary>
public void doActivate()
{
fastLimit = DateTime.Now.AddMinutes(1);
}
#endif
/// <summary>
/// Impostazione forzata timer refresh
/// </summary>
@@ -85,15 +75,7 @@ namespace MP.Data.Services
private static System.Timers.Timer fastTimer = new System.Timers.Timer(4000);
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#if false
/// <summary>
/// Limite in formato data-ora per inviare dati rapidamente (incrementato come now + 1 min
/// ad ogni chiamata client)
/// </summary>
private DateTime fastLimit = DateTime.Now;
#endif
private static Logger Log = LogManager.GetCurrentClassLogger();
private int fastRefreshMs = 1000;
+1 -1
View File
@@ -307,7 +307,7 @@ namespace MP.Data.Services
/// <summary>
/// Cache brevissima durata
/// </summary>
private TimeSpan UltraFastCache = TimeSpan.FromMilliseconds(1100);
private TimeSpan UltraFastCache = TimeSpan.FromMilliseconds(1500);
/// <summary>
/// Cache lunga durata
+20 -8
View File
@@ -16,9 +16,7 @@ namespace MP.Data.Services
// setup canali pub/sub
dataPipe = new MessagePipe(redisConn, Constants.TAB_ACT_MSE_DATA_KEY, false);
#if false
blinkPipe = new MessagePipe(redisConn, Constants.TAB_ACT_BLINK_KEY, false);
#endif
// avvio timers...
startTimers();
@@ -28,9 +26,7 @@ namespace MP.Data.Services
#region Public Properties
#if false
public MessagePipe blinkPipe { get; set; } = null!;
#endif
public MessagePipe dataPipe { get; set; } = null!;
@@ -93,10 +89,26 @@ namespace MP.Data.Services
{
var pUpd = Task.Run(async () =>
{
var newData = await MseGetAll();
// invio tramite la pipe...
dataPipe.sendMessage(JsonConvert.SerializeObject(newData));
Log.Debug("Elapsed Fast Timer reload");
// secondi pari --> blink, secondi dispari --> ricarica
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
{
// invio in channel blink il segnale
blinkPipe.sendMessage("true");
Log.Debug("Elapsed Fast Timer Blink");
}
else
{
// invio in channel blink segnale false
blinkPipe.sendMessage("false");
// rileggo dati...
var newData = await MseGetAll();
// invio tramite la pipe...
dataPipe.sendMessage(JsonConvert.SerializeObject(newData));
Log.Debug("Elapsed Fast Timer reload");
}
});
pUpd.Wait();
}
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>6.16.2402.2615</Version>
<Version>6.16.2402.2708</Version>
</PropertyGroup>
<ItemGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MON MAPO</i>
<h4>Versione: 6.16.2402.2615</h4>
<h4>Versione: 6.16.2402.2708</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.16.2402.2615
6.16.2402.2708
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.16.2402.2615</version>
<version>6.16.2402.2708</version>
<url>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.Mon.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>