Skip to content

Commit 8daec76

Browse files
authored
feat(INetworkMonitorService): add INetworkMonitorService service (#6407)
* doc: 移除 SDK 文本 * doc: 增加网络状态菜单 * doc: 增加网络状态源码映射 * doc: 增加网络状态示例 * doc: 增加指示器示例文档 * feat: 增加 INetworkMonitorService 服务 * refactor: 实现 INetworkMonitorService 逻辑 * doc: 更新示例 * refactor: 支持离线状态 * doc: 更新文档 * refactor: 更新细节 * test: 更新单元测试
1 parent 61ef8f7 commit 8daec76

File tree

19 files changed

+393
-149
lines changed

19 files changed

+393
-149
lines changed

src/BootstrapBlazor.Server/Components/Layout/HomeLayout.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
</div>
6161
<div class="footer-info">
6262
<div class="d-flex">
63-
<div>SDK .NET @Version on @OS</div>
63+
<div>.NET @Version on @OS</div>
6464
<div class="ms-1">BB @VersionService.Version</div>
6565
<FooterCounter></FooterCounter>
6666
<CacheCounter></CacheCounter>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
@page "/network-monitor"
2+
@inject IStringLocalizer<NetworkMonitors> Localizer
3+
4+
<h3>@Localizer["NetworkMonitorTitle"]</h3>
5+
6+
<h4>@((MarkupString)Localizer["NetworkMonitorDescription"].Value)</h4>
7+
8+
<DemoBlock Title="@Localizer["NormalTitle"]"
9+
Introduction="@Localizer["NormalIntro"]"
10+
Name="Normal">
11+
<section ignore>
12+
<ul class="ul-demo">
13+
<li><div class="demo-indicator demo-indicator-4g"></div> @Localizer["IndicatorLi1"]</li>
14+
<li><div class="demo-indicator demo-indicator-3g"></div> @Localizer["IndicatorLi2"]</li>
15+
<li><div class="demo-indicator demo-indicator-2g"></div> @Localizer["IndicatorLi3"]</li>
16+
<li><div class="demo-indicator demo-indicator-offline"></div> @Localizer["IndicatorLi4"]</li>
17+
</ul>
18+
</section>
19+
<NetworkMonitorIndicator></NetworkMonitorIndicator>
20+
<section ignore>
21+
<ConsoleLogger @ref="_logger"></ConsoleLogger>
22+
</section>
23+
</DemoBlock>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
namespace BootstrapBlazor.Server.Components.Samples;
7+
8+
/// <summary>
9+
/// NetworkMonitor Sample code
10+
/// </summary>
11+
public partial class NetworkMonitors : IDisposable
12+
{
13+
[Inject, NotNull]
14+
private INetworkMonitorService? NetworkMonitorService { get; set; }
15+
16+
private ConsoleLogger _logger = null!;
17+
18+
/// <summary>
19+
/// <inheritdoc/>
20+
/// </summary>
21+
protected override async Task OnInitializedAsync()
22+
{
23+
await base.OnInitializedAsync();
24+
25+
await NetworkMonitorService.RegisterStateChangedCallback(this, OnNetworkStateChanged);
26+
}
27+
28+
private Task OnNetworkStateChanged(NetworkMonitorState state)
29+
{
30+
_logger.Log($"Online: NetworkType: {state.NetworkType} Downlink: {state.Downlink} RTT: {state.RTT}");
31+
return Task.CompletedTask;
32+
}
33+
34+
private void Dispose(bool disposing)
35+
{
36+
if (disposing)
37+
{
38+
NetworkMonitorService.UnregisterStateChangedCallback(this);
39+
}
40+
}
41+
42+
/// <summary>
43+
/// <inheritdoc/>
44+
/// </summary>
45+
public void Dispose()
46+
{
47+
Dispose(true);
48+
GC.SuppressFinalize(this);
49+
}
50+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
.ul-demo {
2+
list-style: none;
3+
padding-left: 0;
4+
}
5+
6+
.demo-indicator {
7+
cursor: pointer;
8+
width: 0.5rem;
9+
height: 0.5rem;
10+
border-radius: 50%;
11+
display: inline-block;
12+
margin-inline-end: .5rem;
13+
}
14+
15+
.demo-indicator-4g {
16+
background-color: var(--bs-primary);
17+
}
18+
19+
.demo-indicator-3g {
20+
background-color: var(--bs-warning);
21+
}
22+
23+
.demo-indicator-2g {
24+
background-color: var(--bs-danger);
25+
}
26+
27+
.demo-indicator-offline {
28+
background-color: var(--bs-secondary);
29+
}

src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,12 @@ void AddNotice(DemoMenuItem item)
12481248
Url = "fullscreen-button"
12491249
},
12501250
new()
1251+
{
1252+
IsNew = true,
1253+
Text = Localizer["NetworkMonitor"],
1254+
Url = "network-monitor"
1255+
},
1256+
new()
12511257
{
12521258
Text = Localizer["Light"],
12531259
Url = "light"

src/BootstrapBlazor.Server/Locales/en-US.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4840,7 +4840,8 @@
48404840
"SocketAutoReceive": "Auto Receive",
48414841
"SocketManualReceive": "Manual Receive",
48424842
"DataPackageAdapter": "DataPackageAdapter",
4843-
"SocketAutoConnect": "Reconnect"
4843+
"SocketAutoConnect": "Reconnect",
4844+
"NetworkMonitor": "Network Monitor"
48444845
},
48454846
"BootstrapBlazor.Server.Components.Samples.Table.TablesHeader": {
48464847
"TablesHeaderTitle": "Header grouping function",
@@ -7119,5 +7120,15 @@
71197120
"AutoReconnectsDescription": "Receive data through the data adapter and display",
71207121
"NormalTitle": "Basic usage",
71217122
"NormalIntro": "Enable automatic reconnection by setting <code>IsAutoReconnect</code>"
7123+
},
7124+
"BootstrapBlazor.Server.Components.Samples.NetworkMonitors": {
7125+
"NetworkMonitorTitle": "NetworkMonitor",
7126+
"NetworkMonitorDescription": "Use the browser native API <code>navigator.connection</code> to display the current network status in real time",
7127+
"NormalTitle": "Basic usage",
7128+
"NormalIntro": "Use the component <code>NetworkMonitorIndicator</code> to display indicator lights of different colors when the network status changes, and display the network status details when the mouse moves over it",
7129+
"IndicatorLi1": "Green: Very good network (4G)",
7130+
"IndicatorLi2": "Yellow: Average network (3G)",
7131+
"IndicatorLi3": "Red: Poor network (2G)",
7132+
"IndicatorLi4": "Gray: Offline"
71227133
}
71237134
}

src/BootstrapBlazor.Server/Locales/zh-CN.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4840,7 +4840,8 @@
48404840
"SocketAutoReceive": "自动接收数据",
48414841
"SocketManualReceive": "手动接收数据",
48424842
"DataPackageAdapter": "数据处理器",
4843-
"SocketAutoConnect": "自动重连"
4843+
"SocketAutoConnect": "自动重连",
4844+
"NetworkMonitor": "网络状态 NetworkMonitor"
48444845
},
48454846
"BootstrapBlazor.Server.Components.Samples.Table.TablesHeader": {
48464847
"TablesHeaderTitle": "表头分组功能",
@@ -7119,5 +7120,15 @@
71197120
"AutoReconnectsDescription": "链路断开后自动重连示例",
71207121
"NormalTitle": "基本用法",
71217122
"NormalIntro": "通过设置 <code>IsAutoReconnect</code> 开启自动重连机制"
7123+
},
7124+
"BootstrapBlazor.Server.Components.Samples.NetworkMonitors": {
7125+
"NetworkMonitorTitle": "NetworkMonitor 网络状态",
7126+
"NetworkMonitorDescription": "使用浏览器原生 api <code>navigator.connection</code> 实时显示当前网络状态",
7127+
"NormalTitle": "基本用法",
7128+
"NormalIntro": "使用组件 <code>NetworkMonitorIndicator</code> 当网络状态变化时,显示不同颜色的指示灯,鼠标移动到上面时显示网络状态明细",
7129+
"IndicatorLi1": "绿色:网络非常好 (4G)",
7130+
"IndicatorLi2": "黄色:网络一般 (3G)",
7131+
"IndicatorLi3": "红色:网络差 (2G)",
7132+
"IndicatorLi4": "灰色:离线状态"
71227133
}
71237134
}

src/BootstrapBlazor.Server/docs.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@
246246
"socket/manual-receive": "Sockets\\ManualReceives",
247247
"socket/auto-receive": "Sockets\\AutoReceives",
248248
"socket/adapter": "Sockets\\Adapters",
249-
"socket/auto-connect": "Sockets\\AutoReconnects"
249+
"socket/auto-connect": "Sockets\\AutoReconnects",
250+
"network-monitor": "NetworkMonitors"
250251
},
251252
"video": {
252253
"table": "BV1ap4y1x7Qn?p=1",

src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs

Lines changed: 0 additions & 69 deletions
This file was deleted.

src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,3 @@
2222
</div>
2323
</Template>
2424
</Popover>
25-
26-
<NetworkMonitor OnNetworkStateChanged="OnNetworkStateChanged" Indicators="@_indicators"></NetworkMonitor>

0 commit comments

Comments
 (0)