104 lines
4.1 KiB
C#
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;
|
|
//}
|
|
} |