improvements, fixes, etc...
This commit is contained in:
parent
50869e4754
commit
2f3abd800b
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue