improvements, fixes, etc...

This commit is contained in:
Loretta 2024-06-24 07:07:57 +02:00
parent 50869e4754
commit 2f3abd800b
2 changed files with 31 additions and 22 deletions

View File

@ -72,27 +72,28 @@ namespace AyCode.Blazor.Components.Services
public virtual Task SendMessageToServerAsync(int messageTag)
=> SendMessageToServerAsync(messageTag, null, AcDomain.NextUniqueInt32);
public virtual async Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int? requestId)
public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int? requestId)
{
Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
await StartConnection();
return StartConnection().ContinueWith(x =>
{
var msgp = message?.ToMessagePack(ContractlessStandardResolver.Options);
HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, msgp, requestId).Forget();
return HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, msgp, requestId);
});
}
#region CRUD
public virtual Task<TResponseData?> GetByIdAsync<TResponseData>(int messageTag, params Guid[] ids) where TResponseData : class
=> SendMessageToServerAsync<TResponseData>(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), AcDomain.NextUniqueInt32);
public virtual Task GetByIdAsync<TResponseData>(int messageTag, Action<ISignalResponseMessage<TResponseData?>> responseCallback, params Guid[] ids)
public virtual Task GetByIdAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback, params Guid[] ids)
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), responseCallback);
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag) where TResponseData : class
=> SendMessageToServerAsync<TResponseData>(messageTag);
public virtual Task GetAllAsync<TResponseData>(int messageTag, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback)
=> SendMessageToServerAsync(messageTag, null, responseCallback);
public virtual Task GetAllAsync<TResponseData>(int messageTag, Action<ISignalResponseMessage<TResponseData?>> responseCallback, params Guid[]? contextIds)
public virtual Task GetAllAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback, params Guid[]? contextIds)
=> SendMessageToServerAsync(messageTag, (contextIds == null || contextIds.Length == 0 ? null : new SignalPostJsonDataMessage<IdMessage>(new IdMessage(contextIds))), responseCallback);
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag, params Guid[]? contextIds) where TResponseData : class
@ -100,7 +101,7 @@ namespace AyCode.Blazor.Components.Services
public virtual Task<TPostData?> PostDataAsync<TPostData>(int messageTag, TPostData postData) where TPostData : class
=> SendMessageToServerAsync<TPostData>(messageTag, new SignalPostJsonDataMessage<TPostData>(postData), AcDomain.NextUniqueInt32);
public virtual Task PostDataAsync<TPostData>(int messageTag, TPostData postData, Action<ISignalResponseMessage<TPostData?>> responseCallback) where TPostData : class
public virtual Task PostDataAsync<TPostData>(int messageTag, TPostData postData, Func<ISignalResponseMessage<TPostData?>, Task> responseCallback) where TPostData : class
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage<TPostData>(postData), responseCallback);
#endregion CRUD
@ -146,10 +147,10 @@ namespace AyCode.Blazor.Components.Services
return default;
}
public virtual Task SendMessageToServerAsync<TResponseData>(int messageTag, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
public virtual Task SendMessageToServerAsync<TResponseData>(int messageTag, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback)
=> SendMessageToServerAsync(messageTag, null, responseCallback);
public virtual Task SendMessageToServerAsync<TResponseData>(int messageTag, ISignalRMessage? message, Action<ISignalResponseMessage<TResponseData?>> responseCallback)
public virtual Task SendMessageToServerAsync<TResponseData>(int messageTag, ISignalRMessage? message, Func<ISignalResponseMessage<TResponseData?>, Task> responseCallback)
{
if (messageTag == 0)
Logger.Error($"SendMessageToServerAsync; messageTag == 0");

View File

@ -138,7 +138,7 @@ namespace AyCode.Blazor.Components.Services
if (result.Status != SignalResponseStatus.Success || result.ResponseData == null)
throw new NullReferenceException($"LoadDataSourceAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
LoadDataSource(result.ResponseData).Forget();
return LoadDataSource(result.ResponseData);
}, ContextIds);
}
@ -687,17 +687,23 @@ namespace AyCode.Blazor.Components.Services
protected Task SaveTrackingItemUnsafeAsync(TrackingItem<T> trackingItem)
=> SaveItemUnsafeAsync(trackingItem.CurrentValue, trackingItem.TrackingState);
protected async Task<T> SaveItemUnsafe(T item, TrackingState trackingState)
protected Task<T> SaveItemUnsafe(T item, TrackingState trackingState)
{
var messageTag = SignalRCrudTags.GetMessageTagByTrackingState(trackingState);
if (messageTag == AcSignalRTags.None) throw new ArgumentException($"SaveItemUnsafe; messageTag == SignalRTags.None");
var result = await SignalRClient.PostDataAsync(messageTag, item);
if (result == null) throw new NullReferenceException($"SaveItemUnsafe; result == null");
return SignalRClient.PostDataAsync(messageTag, item).ContinueWith(x =>
{
if (x.Result == null)
{
if (TryRollbackItem(item.Id, out _)) return item;
await ProcessSavedResponseItem(result, trackingState);
throw new NullReferenceException($"SaveItemUnsafe; result == null");
}
return result;
ProcessSavedResponseItem(x.Result, trackingState);
return x.Result;
});
}
protected Task SaveItemUnsafeAsync(T item, TrackingState trackingState)
@ -713,12 +719,12 @@ namespace AyCode.Blazor.Components.Services
{
if (response.Status != SignalResponseStatus.Success || response.ResponseData == null)
{
if (TryRollbackItem(item.Id, out _)) return;
if (TryRollbackItem(item.Id, out _)) return Task.CompletedTask;
throw new NullReferenceException($"SaveItemUnsafeAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
}
ProcessSavedResponseItem(response.ResponseData, trackingState).Forget();
return ProcessSavedResponseItem(response.ResponseData, trackingState);
}
finally
{
@ -727,9 +733,9 @@ namespace AyCode.Blazor.Components.Services
});
}
private async Task ProcessSavedResponseItem(T? resultItem, TrackingState trackingState)
private Task ProcessSavedResponseItem(T? resultItem, TrackingState trackingState)
{
if (resultItem == null) return;
if (resultItem == null) return Task.CompletedTask;
if (TryGetTrackingItem(resultItem.Id, out var trackingItem))
TrackingItems.Remove(trackingItem);
@ -738,7 +744,9 @@ namespace AyCode.Blazor.Components.Services
InnerList[index] = resultItem;
var eventArgs = new ItemChangedEventArgs<T>(resultItem, trackingState);
if (OnDataSourceItemChanged != null) await OnDataSourceItemChanged.Invoke(eventArgs);
if (OnDataSourceItemChanged != null) return OnDataSourceItemChanged.Invoke(eventArgs);
return Task.CompletedTask;
}
protected void RollbackItemUnsafe(TrackingItem<T> trackingItem)