Skip to content

Commit cd6c8fd

Browse files
authored
refactor(INetworkMonitorService): add reuse state function (#6409)
* doc: 移除 SDK 文本 * doc: 增加网络状态菜单 * doc: 增加网络状态源码映射 * doc: 增加网络状态示例 * doc: 增加指示器示例文档 * feat: 增加 INetworkMonitorService 服务 * refactor: 实现 INetworkMonitorService 逻辑 * doc: 更新示例 * refactor: 支持离线状态 * doc: 更新文档 * refactor: 更新细节 * test: 更新单元测试 * doc: 更新文档 * feat: 增加状态复用逻辑 * refactor: 增加超时设置
1 parent 8daec76 commit cd6c8fd

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

src/BootstrapBlazor.Server/Components/Samples/NetworkMonitors.razor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public partial class NetworkMonitors : IDisposable
1313
[Inject, NotNull]
1414
private INetworkMonitorService? NetworkMonitorService { get; set; }
1515

16-
private ConsoleLogger _logger = null!;
16+
private ConsoleLogger? _logger;
1717

1818
/// <summary>
1919
/// <inheritdoc/>
@@ -27,7 +27,7 @@ protected override async Task OnInitializedAsync()
2727

2828
private Task OnNetworkStateChanged(NetworkMonitorState state)
2929
{
30-
_logger.Log($"Online: NetworkType: {state.NetworkType} Downlink: {state.Downlink} RTT: {state.RTT}");
30+
_logger?.Log($"Online: NetworkType: {state.NetworkType} Downlink: {state.Downlink} RTT: {state.RTT}");
3131
return Task.CompletedTask;
3232
}
3333

src/BootstrapBlazor/Services/DefaultNetworkMonitorService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class DefaultNetowrkMonitorService : INetworkMonitorService, IAsyncDisposable
2121
private readonly ConcurrentDictionary<IComponent, Func<NetworkMonitorState, Task>> _callbacks = new();
2222
private bool _init = false;
2323
private readonly SemaphoreSlim _semaphoreSlim = new(1, 1);
24+
private NetworkMonitorState? _state;
2425

2526
public DefaultNetowrkMonitorService(IJSRuntime jsRuntime)
2627
{
@@ -47,10 +48,14 @@ public async Task<NetworkMonitorState> GetNetworkMonitorState(CancellationToken
4748
public async Task RegisterStateChangedCallback(IComponent component, Func<NetworkMonitorState, Task> callback)
4849
{
4950
_callbacks.AddOrUpdate(component, key => callback, (k, v) => callback);
51+
if (_state != null)
52+
{
53+
await callback(_state);
54+
}
5055

5156
if (!_init)
5257
{
53-
await _semaphoreSlim.WaitAsync();
58+
await _semaphoreSlim.WaitAsync(3000);
5459
if (!_init)
5560
{
5661
_init = true;
@@ -82,6 +87,7 @@ public void UnregisterStateChangedCallback(IComponent component)
8287
[JSInvokable]
8388
public async Task TriggerNetworkStateChanged(NetworkMonitorState state)
8489
{
90+
_state = state;
8591
foreach (var callback in _callbacks.Values)
8692
{
8793
if (callback != null)

0 commit comments

Comments
 (0)