diff --git a/FruitBank.Common/FastObservableCollection.cs b/FruitBank.Common/MgObservableCollection.cs similarity index 50% rename from FruitBank.Common/FastObservableCollection.cs rename to FruitBank.Common/MgObservableCollection.cs index c2944a0..fbb27ba 100644 --- a/FruitBank.Common/FastObservableCollection.cs +++ b/FruitBank.Common/MgObservableCollection.cs @@ -1,12 +1,11 @@ using System.Collections; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; namespace FruitBank.Common { - public interface IFastObservableCollection + public interface IMgFastObservableCollection { public void AddRange(IEnumerable other); public void Replace(IEnumerable other); @@ -14,20 +13,20 @@ namespace FruitBank.Common public void Synchronize(NotifyCollectionChangedEventArgs args); } - public interface IFastObservableCollection: IFastObservableCollection + public interface IMgFastObservableCollection : IMgFastObservableCollection { public void Replace(IEnumerable other); public void Sort(IComparer comparer); public void SortAndReplace(IEnumerable other, IComparer comparer); } - - public class FastObservableCollection : ObservableCollection, IFastObservableCollection + + public class MgObservableCollection : ObservableCollection, IMgFastObservableCollection { - private bool suppressChangedEvent = false; + private bool _suppressChangedEvent; public void Replace(IEnumerable other) { - suppressChangedEvent = true; + _suppressChangedEvent = true; Clear(); AddRange(other); @@ -35,45 +34,45 @@ namespace FruitBank.Common public void Replace(IEnumerable other) { - suppressChangedEvent = true; + _suppressChangedEvent = true; Clear(); foreach (T item in other) Add(item); - suppressChangedEvent = false; + _suppressChangedEvent = false; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - OnPropertyChanged(new(nameof(Count))); + OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count))); } public void AddRange(IEnumerable other) { - suppressChangedEvent = true; + _suppressChangedEvent = true; - foreach (object item in other) + foreach (var item in other) { if (item is T tItem) Add(tItem); } - suppressChangedEvent = false; + _suppressChangedEvent = false; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - OnPropertyChanged(new(nameof(Count))); + OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count))); } public void RemoveRange(IEnumerable other) { - suppressChangedEvent = true; + _suppressChangedEvent = true; - foreach (object item in other) + foreach (var item in other) { if (item is T tItem) Remove(tItem); } - suppressChangedEvent = false; + _suppressChangedEvent = false; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - OnPropertyChanged(new(nameof(Count))); + OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count))); } public void SortAndReplace(IEnumerable other, IComparer comparer) @@ -94,23 +93,28 @@ namespace FruitBank.Common public void Synchronize(NotifyCollectionChangedEventArgs args) { - if (args.Action == NotifyCollectionChangedAction.Add && args.NewItems != null) + switch (args.Action) { - AddRange(args.NewItems); - } - else if (args.Action == NotifyCollectionChangedAction.Remove && args.OldItems != null) - { - RemoveRange(args.OldItems); - } - else if (args.Action == NotifyCollectionChangedAction.Reset) - { - Clear(); + case NotifyCollectionChangedAction.Add when args.NewItems != null: + AddRange(args.NewItems); + break; + case NotifyCollectionChangedAction.Remove when args.OldItems != null: + RemoveRange(args.OldItems); + break; + case NotifyCollectionChangedAction.Reset: + Clear(); + break; + case NotifyCollectionChangedAction.Replace: + case NotifyCollectionChangedAction.Move: + break; + default: + throw new ArgumentOutOfRangeException(); } } protected override void OnPropertyChanged(PropertyChangedEventArgs e) { - if (suppressChangedEvent) + if (_suppressChangedEvent) return; base.OnPropertyChanged(e); @@ -118,10 +122,31 @@ namespace FruitBank.Common protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { - if (suppressChangedEvent) + if (_suppressChangedEvent) return; base.OnCollectionChanged(e); } - } + + //protected override void ClearItems() + //{ + // base.ClearItems(); + //} + + //protected override void InsertItem(int index, T item) + //{ + // base.InsertItem(index, item); + //} + + //protected override void MoveItem(int oldIndex, int newIndex) + //{ + // base.MoveItem(oldIndex, newIndex); + //} + + //public override event NotifyCollectionChangedEventHandler? CollectionChanged + //{ + // add => base.CollectionChanged += value; + // remove => base.CollectionChanged -= value; + //} + } } \ No newline at end of file diff --git a/FruitBank.Common/Models/LoggedInModel.cs b/FruitBank.Common/Models/LoggedInModel.cs index 00602e5..3ed0f8b 100644 --- a/FruitBank.Common/Models/LoggedInModel.cs +++ b/FruitBank.Common/Models/LoggedInModel.cs @@ -48,5 +48,6 @@ public class LoggedInModel { CustomerDto = null; CustomerRoles.Clear(); + //MeasuringUsers.Clear(); } } \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor index bd29465..c6d35e3 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor @@ -87,6 +87,7 @@ public GridProductDto Grid { get; set; } [Parameter] public bool IsMasterGrid { get; set; } = false; + [Parameter] public IEnumerable? ProductDtos { get; set; } //[Parameter] public List? OrderDtos { get; set; } //[Parameter] public List? OrderItemDtos { get; set; } @@ -129,7 +130,7 @@ private async Task> GetOrderDtosFromDbAsync(int productId) { - using(await _lockOrderDtosByProductId.UseWaitAsync()) + using (await _lockOrderDtosByProductId.UseWaitAsync()) { if (_orderDtosByProductId.TryGetValue(productId, out var orderDtos)) return orderDtos; diff --git a/FruitBankHybrid.Shared/Databases/DatabaseClient.cs b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs index 39adbb8..01ce922 100644 --- a/FruitBankHybrid.Shared/Databases/DatabaseClient.cs +++ b/FruitBankHybrid.Shared/Databases/DatabaseClient.cs @@ -55,7 +55,7 @@ public class ShippingItemTable : SignalRDataSourceList } } -public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : FastObservableCollection +public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : MgObservableCollection { private readonly SemaphoreSlim _semaphoreSlim = new(1); public async Task LoadDataAsync(bool onlyIfEmpty = true) @@ -80,7 +80,7 @@ public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : Fa return this; } } -public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : FastObservableCollection +public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : MgObservableCollection { private readonly SemaphoreSlim _semaphoreSlim = new(1); diff --git a/FruitBankHybrid.Shared/Pages/Login.razor b/FruitBankHybrid.Shared/Pages/Login.razor index fe8c60c..01d9cb1 100644 --- a/FruitBankHybrid.Shared/Pages/Login.razor +++ b/FruitBankHybrid.Shared/Pages/Login.razor @@ -1,4 +1,5 @@ @page "/Login" +@using FruitBank.Common.Models @using Mango.Nop.Core.Dtos

Bejelentkezés

diff --git a/FruitBankHybrid.Shared/Pages/Login.razor.cs b/FruitBankHybrid.Shared/Pages/Login.razor.cs index 87bbeac..d225de6 100644 --- a/FruitBankHybrid.Shared/Pages/Login.razor.cs +++ b/FruitBankHybrid.Shared/Pages/Login.razor.cs @@ -1,6 +1,7 @@ using AyCode.Core.Loggers; using AyCode.Utils.Extensions; using FruitBank.Common.Models; +using FruitBankHybrid.Shared.Databases; using FruitBankHybrid.Shared.Services.Loggers; using FruitBankHybrid.Shared.Services.SignalRs; using Mango.Nop.Core.Dtos; @@ -35,8 +36,14 @@ public partial class Login : ComponentBase if (!LoggedInModel.IsLoggedIn) { - LoggedInModel.MeasuringUsers = await FruitBankSignalRClient.GetMeasuringUsers() ?? []; - SelectedUser = LoggedInModel.MeasuringUsers.FirstOrDefault(); + using (await ObjectLock.GetSemaphore().UseWaitAsync()) + { + if (LoggedInModel.MeasuringUsers.Count == 0) + { + LoggedInModel.MeasuringUsers = await FruitBankSignalRClient.GetMeasuringUsers() ?? []; + SelectedUser = LoggedInModel.MeasuringUsers.FirstOrDefault(); + } + } } else _rolesText = string.Join("; ", LoggedInModel.CustomerRoles.Select(x => x.Name)); diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs index e672593..08e5adb 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs @@ -15,6 +15,7 @@ using FruitBankHybrid.Shared.Services.Loggers; using Mango.Nop.Core.Dtos; using Mango.Nop.Core.Models; using MessagePack.Resolvers; +using Microsoft.AspNetCore.SignalR.Client; using Nop.Core.Domain.Customers; using System.Collections.ObjectModel; using System.ServiceModel.Channels; @@ -25,6 +26,13 @@ namespace FruitBankHybrid.Shared.Services.SignalRs { public FruitBankSignalRClient( /*IServiceProvider serviceProvider, */ IEnumerable logWriters) : base($"{FruitBankConstClient.BaseUrl}/{FruitBankConstClient.DefaultHubName}", new LoggerClient(nameof(FruitBankSignalRClient), logWriters.ToArray())) { + //var hubConnection = new HubConnectionBuilder() + // .WithUrl("fullHubName") + // .WithAutomaticReconnect() + // .WithStatefulReconnect() + // .WithKeepAliveInterval(TimeSpan.FromSeconds(60)) + // .WithServerTimeout(TimeSpan.FromSeconds(120)) + ConstHelper.NameByValue(0); }