TourIAm/TIAMWebApp/Shared/Utility/SignalRDataSourceAsync.cs

104 lines
4.1 KiB
C#

using System.Diagnostics;
using AyCode.Core.Enums;
using AyCode.Core.Helpers;
using AyCode.Core.Interfaces;
using AyCode.Services.SignalRs;
using TIAM.Services;
using TIAMWebApp.Shared.Application.Services;
namespace TIAMWebApp.Shared.Application.Utility;
[Serializable]
[DebuggerDisplay("Count = {Count}")]
public class SignalRDataSourceAsync<T> : SignalRDataSource<T> where T : class, IId<Guid>
{
public Action<ItemChangedEventArgs<T>>? OnItemChanged;
public Action<SignalRDataSourceAsync<T>>? OnDataSourceLoaded;
public SignalRDataSourceAsync(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, Guid? contextId = null, Action<SignalRDataSourceAsync<T>>? onDataSourceLoaded = null, bool autoLoadDataSource = false)
: base(signalRClient, signalRCrudTags, contextId)
{
OnDataSourceLoaded = onDataSourceLoaded;
if (autoLoadDataSource) LoadDataSourceAsync();
}
public void LoadDataSourceAsync(bool clearChangeTracking = true)
{
if (SignalRCrudTags.GetAllMessageTag == SignalRTags.None) throw new ArgumentException($"_signalRCrudTags.GetAllMessageTag == SignalRTags.None;");
//Monitor.Exit(SyncRoot); //Exception test - J.
//Monitor.Enter(SyncRoot);
//try
//{
// SignalRClient.GetAllAsync<List<T>>(SignalRCrudTags.GetAllMessageTag, ContextId, response =>
// {
// try
// {
// if (response.Status == SignalResponseStatus.Error) throw new Exception($"LoadDataSourceAsync; response.Status == SignalResponseStatus.Error");
// if (response.ResponseData == null) throw new NullReferenceException($"response.ResponseData == null");
// Clear(clearChangeTracking);
// InnerList.AddRange(response.ResponseData);
// }
// finally
// {
// Monitor.Exit(SyncRoot);
// }
// OnDataSourceLoaded?.Invoke(this);
// }).Forget();
//}
//catch (Exception)
//{
// Monitor.Exit(SyncRoot);
// throw;
//}
}
//public T Add(T item, int messageTag) => PostDataToServerAsync(item, messageTag, TrackingState.Add).GetAwaiter().GetResult();
//public Task AddAsync(T item, int messageTag) => PostDataToServerAsync(item, messageTag, TrackingState.Add);
//public Task UpdateAsync(T item, int messageTag) => PostDataToServerAsync(item, messageTag, TrackingState.Update);
//public Task RemoveAsync(T item, int messageTag) => PostDataToServerAsync(item, messageTag, TrackingState.Remove);
//public Task RemoveAsync(Guid id, int messageTag)
//{
// var item = _list.FirstOrDefault(x => x.Id == id);
// return item == null ? Task.CompletedTask : RemoveAsync(item, messageTag);
//}
//protected virtual Task PostDataToServerAsync(T item, int messageTag, TrackingState trackingState)
//{
// if (messageTag == 0) return Task.CompletedTask;
// logger.Info($"{_listLogName} PostDataToServerAsync called; transferId " + item.Id);
// if (item.Id.IsNullOrEmpty()) item.Id = Guid.NewGuid();
// _list.UpdateCollection(item, trackingState == TrackingState.Remove); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J.
// await _signalRClient.PostDataAsync(messageTag, item, async repsonse =>
// {
// if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null)
// {
// RefreshDataSourceAsync().Forget();
// return;
// }
// _list.UpdateCollection(repsonse.ResponseData, trackingState == TrackingState.Remove);
// var eventArgs = new ItemChangedEventArgs<T>(repsonse.ResponseData, trackingState);
// OnItemChanged.Invoke(eventArgs);
// });
// //transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer);
// return Task.CompletedTask;
//}
}