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)
|
public virtual Task SendMessageToServerAsync(int messageTag)
|
||||||
=> SendMessageToServerAsync(messageTag, null, AcDomain.NextUniqueInt32);
|
=> 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};");
|
Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
|
||||||
|
|
||||||
await StartConnection();
|
return StartConnection().ContinueWith(x =>
|
||||||
|
{
|
||||||
var msgp = message?.ToMessagePack(ContractlessStandardResolver.Options);
|
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
|
#region CRUD
|
||||||
public virtual Task<TResponseData?> GetByIdAsync<TResponseData>(int messageTag, params Guid[] ids) where TResponseData : class
|
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);
|
=> 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);
|
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage<IdMessage>(new IdMessage(ids)), responseCallback);
|
||||||
|
|
||||||
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag) where TResponseData : class
|
public virtual Task<TResponseData?> GetAllAsync<TResponseData>(int messageTag) where TResponseData : class
|
||||||
=> SendMessageToServerAsync<TResponseData>(messageTag);
|
=> 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);
|
=> 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);
|
=> 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
|
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
|
public virtual Task<TPostData?> PostDataAsync<TPostData>(int messageTag, TPostData postData) where TPostData : class
|
||||||
=> SendMessageToServerAsync<TPostData>(messageTag, new SignalPostJsonDataMessage<TPostData>(postData), AcDomain.NextUniqueInt32);
|
=> 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);
|
=> SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage<TPostData>(postData), responseCallback);
|
||||||
|
|
||||||
#endregion CRUD
|
#endregion CRUD
|
||||||
|
|
@ -146,10 +147,10 @@ namespace AyCode.Blazor.Components.Services
|
||||||
return default;
|
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);
|
=> 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)
|
if (messageTag == 0)
|
||||||
Logger.Error($"SendMessageToServerAsync; messageTag == 0");
|
Logger.Error($"SendMessageToServerAsync; messageTag == 0");
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ namespace AyCode.Blazor.Components.Services
|
||||||
if (result.Status != SignalResponseStatus.Success || result.ResponseData == null)
|
if (result.Status != SignalResponseStatus.Success || result.ResponseData == null)
|
||||||
throw new NullReferenceException($"LoadDataSourceAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
|
throw new NullReferenceException($"LoadDataSourceAsync; result.Status != SignalResponseStatus.Success || result.ResponseData == null; Status: {SignalResponseStatus.Success}");
|
||||||
|
|
||||||
LoadDataSource(result.ResponseData).Forget();
|
return LoadDataSource(result.ResponseData);
|
||||||
}, ContextIds);
|
}, ContextIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -687,17 +687,23 @@ namespace AyCode.Blazor.Components.Services
|
||||||
protected Task SaveTrackingItemUnsafeAsync(TrackingItem<T> trackingItem)
|
protected Task SaveTrackingItemUnsafeAsync(TrackingItem<T> trackingItem)
|
||||||
=> SaveItemUnsafeAsync(trackingItem.CurrentValue, trackingItem.TrackingState);
|
=> 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);
|
var messageTag = SignalRCrudTags.GetMessageTagByTrackingState(trackingState);
|
||||||
if (messageTag == AcSignalRTags.None) throw new ArgumentException($"SaveItemUnsafe; messageTag == SignalRTags.None");
|
if (messageTag == AcSignalRTags.None) throw new ArgumentException($"SaveItemUnsafe; messageTag == SignalRTags.None");
|
||||||
|
|
||||||
var result = await SignalRClient.PostDataAsync(messageTag, item);
|
return SignalRClient.PostDataAsync(messageTag, item).ContinueWith(x =>
|
||||||
if (result == null) throw new NullReferenceException($"SaveItemUnsafe; result == null");
|
{
|
||||||
|
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)
|
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 (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}");
|
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
|
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))
|
if (TryGetTrackingItem(resultItem.Id, out var trackingItem))
|
||||||
TrackingItems.Remove(trackingItem);
|
TrackingItems.Remove(trackingItem);
|
||||||
|
|
@ -738,7 +744,9 @@ namespace AyCode.Blazor.Components.Services
|
||||||
InnerList[index] = resultItem;
|
InnerList[index] = resultItem;
|
||||||
|
|
||||||
var eventArgs = new ItemChangedEventArgs<T>(resultItem, trackingState);
|
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)
|
protected void RollbackItemUnsafe(TrackingItem<T> trackingItem)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue