using Microsoft.AspNetCore.Components; using MP.Data.DatabaseModels; using MP.Data.DTO; using MP.Data.Services; using MP_TAB3.Pages; using Newtonsoft.Json; using NLog; using System.Diagnostics; namespace MP_TAB3.Components { public partial class CmpTop { #region Public Properties [Parameter] public List CurrMenuItems { get; set; } = new List(); [Parameter] public EventCallback EA_ReloadMStor { get; set; } [Parameter] public EventCallback EA_UserIsOk { get; set; } [Parameter] public int TypeScadLogin { get; set; } = -1; #endregion Public Properties #region Protected Fields protected string ResetClass = "btn-primary"; #endregion Protected Fields #region Protected Properties protected string CurrMacc { get; set; } = null!; protected string CurrOprTknLS { get; set; } = null!; protected string CurrOprTknRedis { get; set; } = null!; protected bool HideMenu { get => NavMan.Uri.Contains("reg-new-device"); } protected string LastOpenedPage { get; set; } = null!; [Inject] protected ListSelectDataSrv MDataService { get; set; } = null!; [Inject] protected MessageService MsgServ { get; set; } = null!; [Inject] protected SharedMemService MStor { get; set; } = null!; [Inject] protected NavigationManager NavMan { get; set; } = null!; [Inject] protected SharedMemService SMServ { get; set; } = null!; [Inject] protected TabDataService TDService { get; set; } = null!; #endregion Protected Properties #region Protected Methods protected async Task backToSM() { await Task.Delay(1); if (!NavMan.Uri.Contains("reg-new-device")) { await MsgServ.IdxMaccSet(""); NavMan.NavigateTo("status-map", true); } } protected async Task ForceReload() { Stopwatch sw = new Stopwatch(); sw.Start(); Log.Info("Start ForceReload"); ResetClass = "btn-warning"; await InvokeAsync(StateHasChanged); var currToken = await MsgServ.GetCurrOperDtoLSAsync(); var lastOpr = await MsgServ.GetLastMatrOprAsync(); var devGuid = await MsgServ.GetCurrDevGuidLSAsync(); // reset cache varie await MsgServ.ClearLocalStor(); await MsgServ.ClearSessionStor(); await MDataService.FlushCache(); await TDService.FlushCache(); // salvo di nuovo opr + GUID await MsgServ.SetCurrDevGuidLSAsync(devGuid); await MsgServ.SetLastMatrOprAsync(lastOpr); await MsgServ.SetCurrOperDtoLSAsync(currToken); // richiesta reload MStor await EA_ReloadMStor.InvokeAsync(true); // calcolo tempo esecuzione sw.Stop(); int delta = 500 - (int)sw.ElapsedMilliseconds; delta = delta > 0 ? delta : 50; await Task.Delay(delta); ResetClass = "btn-primary"; // await InvokeAsync(StateHasChanged); Log.Info($"ForceReload completed in {sw.Elapsed.TotalMilliseconds}ms"); // ricarica pagina! NavMan.NavigateTo("status-map"); } protected override async Task OnInitializedAsync() { await Task.Delay(1); var CurrDevGuid = await MsgServ.GetCurrDevGuidLSAsync(); if (CurrDevGuid == Guid.Empty) { CurrDevGuid = Guid.NewGuid(); await MsgServ.SetCurrDevGuidLSAsync(CurrDevGuid); } LastOpenedPage = await MsgServ.LastOpenedPageGet(); CurrMacc = await MsgServ.IdxMaccGet(); CurrOprTknLS = await MsgServ.GetCurrOperDtoLSAsync(); var currOprTokLsDeco = Uri.UnescapeDataString(CurrOprTknLS); if (!string.IsNullOrEmpty(CurrOprTknLS)) { var decryptedData = MsgServ.DecryptData(CurrOprTknLS); if (!string.IsNullOrEmpty(decryptedData)) { var oprObj = JsonConvert.DeserializeObject(decryptedData); if (oprObj != null) { MsgServ.RigaOper = oprObj.currOpr; } } } CurrOprTknRedis = await TDService.OperatoreGetRedis(MatrOpr, CurrDevGuid); if (string.IsNullOrEmpty(CurrOprTknRedis)) { if (!NavMan.Uri.Contains("reg-new-device")) { NavMan.NavigateTo("reg-new-device", true); } } else if (!string.IsNullOrEmpty(CurrOprTknRedis) && CurrOprTknRedis == CurrOprTknLS) { await RefreshScadLogIn(currOprTokLsDeco); await EA_UserIsOk.InvokeAsync(true); } } protected async Task RefreshScadLogIn(string decodValue) { bool done = false; // solo se non è logout!!! if (!NavMan.Uri.Contains("logout")) { if (listT2H == null || listT2H.Count == 0) { listT2H = CurrMenuItems.Where(x => x.TipoLink == "T2H").ToList(); } if (TypeScadLogin <= 0 || TypeScadLogin == 2) { done = await MsgServ.DoLogIn(decodValue, false); } else { done = await MsgServ.DoLogIn(decodValue, true); } if (done && !string.IsNullOrEmpty(LastOpenedPage)) { // se è nelle pagine "T2H" lascio proseguire... if (listT2H != null && listT2H.Find(x => x.NavigateUrl == LastOpenedPage) != null) { NavMan.NavigateTo(LastOpenedPage); } else if (!string.IsNullOrEmpty(CurrMacc)) { NavMan.NavigateTo(LastOpenedPage); } else { NavMan.NavigateTo("status-map"); } } } } #endregion Protected Methods #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); private List listT2H = new List(); #endregion Private Fields #region Private Properties private int MatrOpr { get => MsgServ.MatrOpr; } private string UserName { get => MsgServ.CognomeNome; } #endregion Private Properties } }