Skip to content

Commit b37dae2

Browse files
authored
feat(HikVision): add OnGetChannelsAsync parameter (#789)
* feat: 增加获得设备通道逻辑 * feat: 完善通道信息 * chore: bump version 10.0.0-beta03
1 parent deaf194 commit b37dae2

11 files changed

Lines changed: 212 additions & 48 deletions

src/components/BootstrapBlazor.HikVision/BootstrapBlazor.HikVision.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>10.0.0-beta02</Version>
4+
<Version>10.0.0-beta03</Version>
55
</PropertyGroup>
66

77
<PropertyGroup>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
// Website: https://www.blazor.zone or https://argozhang.github.io/
4+
5+
namespace BootstrapBlazor.Components;
6+
7+
/// <summary>
8+
/// 模拟通道信息
9+
/// </summary>
10+
public class HikVisionAnalogChannelInfo()
11+
{
12+
/// <summary>
13+
/// 获得 通道 Id
14+
/// </summary>
15+
public int Id { get; set; }
16+
17+
/// <summary>
18+
/// 获得 通道号
19+
/// </summary>
20+
public int InputPort { get; set; }
21+
22+
/// <summary>
23+
/// 获得 通道名称
24+
/// </summary>
25+
public string? Name { get; set; }
26+
27+
/// <summary>
28+
/// 获得 通道制式
29+
/// </summary>
30+
public string? VideoFormat { get; set; }
31+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
// Website: https://www.blazor.zone or https://argozhang.github.io/
4+
5+
namespace BootstrapBlazor.Components;
6+
7+
/// <summary>
8+
/// 海康威视网络摄像机通道信息
9+
/// </summary>
10+
public class HikVisionChannel
11+
{
12+
/// <summary>
13+
/// 获得/设置 模拟通道信息集合
14+
/// </summary>
15+
public List<HikVisionAnalogChannelInfo> AnalogChannels { get; set; } = [];
16+
17+
/// <summary>
18+
/// 获得/设置 数字通道信息集合
19+
/// </summary>
20+
public List<HikVisionDigitalChannelInfo> DigitalChannels { get; set; } = [];
21+
22+
/// <summary>
23+
/// 获得/设置 数字通道信息集合
24+
/// </summary>
25+
public List<HikVisionZeroChannelInfo> ZeroChannels { get; set; } = [];
26+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
// Website: https://www.blazor.zone or https://argozhang.github.io/
4+
5+
namespace BootstrapBlazor.Components;
6+
7+
/// <summary>
8+
/// 模拟通道信息
9+
/// </summary>
10+
public class HikVisionDigitalChannelInfo()
11+
{
12+
/// <summary>
13+
/// 获得 通道 Id
14+
/// </summary>
15+
public int Id { get; set; }
16+
17+
/// <summary>
18+
/// 获得 通道号
19+
/// </summary>
20+
public int InputPort { get; set; }
21+
22+
/// <summary>
23+
/// 获得 通道名称
24+
/// </summary>
25+
public string? Name { get; set; }
26+
27+
/// <summary>
28+
/// 获得 通道制式
29+
/// </summary>
30+
public string? VideoFormat { get; set; }
31+
}

src/components/BootstrapBlazor.HikVision/LoginType.cs renamed to src/components/BootstrapBlazor.HikVision/Components/HikVisionLoginType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace BootstrapBlazor.Components;
77
/// <summary>
88
/// 登录方式
99
/// </summary>
10-
public enum LoginType
10+
public enum HikVisionLoginType
1111
{
1212
/// <summary>
1313
/// http 方式

src/components/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.cs

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace BootstrapBlazor.Components;
88

99
/// <summary>
10-
/// 海康威视网络摄像机组件 (Websdk Plugin 插件版本)
10+
/// 海康威视网络摄像机组件 (WebSdk Plugin 插件版本)
1111
/// </summary>
1212
[JSModuleAutoLoader("./_content/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.js", JSObjectReference = true)]
1313
public partial class HikVisionWebPlugin
@@ -37,10 +37,10 @@ public partial class HikVisionWebPlugin
3737
public string? Password { get; set; }
3838

3939
/// <summary>
40-
/// 获得/设置 网络摄像机 登录类型 默认值 <see cref="LoginType.Http"/>
40+
/// 获得/设置 网络摄像机 登录类型 默认值 <see cref="HikVisionLoginType.Http"/>
4141
/// </summary>
4242
[Parameter]
43-
public LoginType LoginType { get; set; }
43+
public HikVisionLoginType LoginType { get; set; }
4444

4545
/// <summary>
4646
/// 获得/设置 视频图像窗口宽度 默认值 500px
@@ -64,13 +64,19 @@ public partial class HikVisionWebPlugin
6464
/// 获得/设置 登录成功后回调方法
6565
/// </summary>
6666
[Parameter]
67-
public Func<Task>? OnLoginedAsync { get; set; }
67+
public Func<Task>? OnLoginAsync { get; set; }
68+
69+
/// <summary>
70+
/// 获得/设置 停止预览后回调方法
71+
/// </summary>
72+
[Parameter]
73+
public Func<HikVisionChannel, Task>? OnGetChannelsAsync { get; set; }
6874

6975
/// <summary>
7076
/// 获得/设置 注销成功后回调方法
7177
/// </summary>
7278
[Parameter]
73-
public Func<Task>? OnLogoutedAsync { get; set; }
79+
public Func<Task>? OnLogoutAsync { get; set; }
7480

7581
/// <summary>
7682
/// 获得/设置 开始预览后回调方法
@@ -95,14 +101,14 @@ public partial class HikVisionWebPlugin
95101
.Build();
96102

97103
/// <summary>
98-
/// 获得 Websdk 插件是否初始化成功
104+
/// 获得 Web sdk 插件是否初始化成功
99105
/// </summary>
100106
public bool Inited { get; private set; }
101107

102108
/// <summary>
103109
/// 获得 是否已登录
104110
/// </summary>
105-
public bool IsLogined { get; private set; }
111+
public bool IsLogin { get; private set; }
106112

107113
/// <summary>
108114
/// 获得 是否正在实时预览
@@ -129,22 +135,22 @@ protected override void OnParametersSet()
129135
/// <param name="password"></param>
130136
/// <param name="loginType"></param>
131137
/// <returns></returns>
132-
public async Task<bool> Login(string ip, int port, string userName, string password, LoginType loginType = LoginType.Http)
138+
public async Task<bool> Login(string ip, int port, string userName, string password, HikVisionLoginType loginType = HikVisionLoginType.Http)
133139
{
134140
ThrowIfNotInited();
135-
IsLogined = await InvokeAsync<bool?>("login", Id, ip, port, userName, password, (int)loginType) ?? false;
136-
if (IsLogined)
141+
IsLogin = await InvokeAsync<bool?>("login", Id, ip, port, userName, password, (int)loginType) ?? false;
142+
if (IsLogin)
137143
{
138-
await TriggerLogined();
144+
await TriggerLogin();
139145
}
140-
return IsLogined;
146+
return IsLogin;
141147
}
142148

143-
private async Task TriggerLogined()
149+
private async Task TriggerLogin()
144150
{
145-
if (OnLoginedAsync != null)
151+
if (OnLoginAsync != null)
146152
{
147-
await OnLoginedAsync();
153+
await OnLoginAsync();
148154
}
149155
}
150156

@@ -154,30 +160,40 @@ private async Task TriggerLogined()
154160
/// <returns></returns>
155161
public async Task Logout()
156162
{
157-
if (IsLogined)
163+
if (IsLogin)
158164
{
159165
await InvokeVoidAsync("logout", Id);
160166
}
161167
IsRealPlaying = false;
162-
IsLogined = false;
163-
await TriggerLogouted();
168+
IsLogin = false;
169+
await TriggerLogout();
164170
}
165171

166-
private async Task TriggerLogouted()
172+
private async Task TriggerLogout()
167173
{
168-
if (OnLogoutedAsync != null)
174+
if (OnLogoutAsync != null)
169175
{
170-
await OnLogoutedAsync();
176+
await OnLogoutAsync();
171177
}
172178
}
173179

180+
/// <summary>
181+
/// 获得通道列表方法
182+
/// </summary>
183+
/// <returns></returns>
184+
public async Task GetChannelList()
185+
{
186+
ThrowIfNotInited();
187+
await InvokeVoidAsync("getChannelList", Id);
188+
}
189+
174190
/// <summary>
175191
/// 开始实时预览方法
176192
/// </summary>
177193
/// <returns></returns>
178194
public async Task StartRealPlay(int streamType, int channelId)
179195
{
180-
if (IsLogined && !IsRealPlaying)
196+
if (IsLogin && !IsRealPlaying)
181197
{
182198
IsRealPlaying = await InvokeAsync<bool?>("startRealPlay", Id, streamType, channelId) ?? false;
183199
if (IsRealPlaying)
@@ -239,4 +255,18 @@ public async Task TriggerInited(bool inited)
239255
await OnInitedAsync(inited);
240256
}
241257
}
258+
259+
/// <summary>
260+
/// 触发 <see cref="OnGetChannelsAsync"/> 回调方法由 JavaScript 调用
261+
/// </summary>
262+
/// <param name="channel"></param>
263+
/// <returns></returns>
264+
[JSInvokable]
265+
public async Task TriggerGetChannelList(HikVisionChannel channel)
266+
{
267+
if (OnGetChannelsAsync != null)
268+
{
269+
await OnGetChannelsAsync(channel);
270+
}
271+
}
242272
}

src/components/BootstrapBlazor.HikVision/Components/HikVisionWebPlugin.razor.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { init as initVision, login, logout, startRealPlay, stopRealPlay, dispose as disposeVision } from '../hikvision.js';
1+
import { init as initVision, login as loginVision, logout, startRealPlay, stopRealPlay, dispose as disposeVision } from '../hikvision.js';
2+
import Data from '../../BootstrapBlazor/modules/data.js';
23
import EventHandler from '../../BootstrapBlazor/modules/event-handler.js';
34

45
export async function init(id, invoke) {
@@ -7,11 +8,29 @@ export async function init(id, invoke) {
78
return;
89
}
910

11+
Data.set(id, {
12+
invoke
13+
});
14+
1015
const inited = await initVision(id);
1116
await invoke.invokeMethodAsync('TriggerInited', inited);
1217
}
1318

14-
export { login, logout, startRealPlay, stopRealPlay }
19+
export async function login(id, ip, port, userName, password, loginType) {
20+
const vision = Data.get(id);
21+
await loginVision(id, ip, port, userName, password, loginType);
22+
const { logined, invoke } = vision;
23+
if (logined) {
24+
await invoke.invokeMethodAsync('TriggerGetChannelList', {
25+
analogChannels: vision.analogChannels,
26+
digitalChannels: vision.digitalChannels,
27+
zeroChannels: vision.zeroChannels
28+
});
29+
}
30+
return logined;
31+
}
32+
33+
export { logout, startRealPlay, stopRealPlay }
1534

1635
export function dispose(id) {
1736
disposeVision(id);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
// Website: https://www.blazor.zone or https://argozhang.github.io/
4+
5+
namespace BootstrapBlazor.Components;
6+
7+
/// <summary>
8+
/// 模拟通道信息
9+
/// </summary>
10+
public class HikVisionZeroChannelInfo()
11+
{
12+
/// <summary>
13+
/// 获得 通道 Id
14+
/// </summary>
15+
public int Id { get; set; }
16+
17+
/// <summary>
18+
/// 获得 通道号
19+
/// </summary>
20+
public int InputPort { get; set; }
21+
22+
/// <summary>
23+
/// 获得 是否使能
24+
/// </summary>
25+
public bool Enabled { get; set; }
26+
}

src/components/BootstrapBlazor.HikVision/Services/DefaultHicVision.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ sealed class DefaultHicVision(IJSRuntime jsRuntime) : IHikVision
1010
private bool _initialized;
1111
private bool _logined;
1212

13-
public async Task<bool> Login(string ip, int port, string userName, string password, LoginType loginType = LoginType.Http)
13+
public async Task<bool> Login(string ip, int port, string userName, string password, HikVisionLoginType loginType = HikVisionLoginType.Http)
1414
{
1515
await LoadAsync();
1616

src/components/BootstrapBlazor.HikVision/Services/IHikVision.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ public interface IHikVision : IAsyncDisposable
1212
/// <summary>
1313
/// 登录方法
1414
/// </summary>
15-
/// <param name="loginType">登录方式 <see cref="LoginType"/> 实例</param>
15+
/// <param name="loginType">登录方式 <see cref="HikVisionLoginType"/> 实例</param>
1616
/// <param name="ip">设备 Ip 地址</param>
1717
/// <param name="port">设备端口</param>
1818
/// <param name="userName">用户名</param>
1919
/// <param name="password">密码</param>
2020
/// <returns></returns>
21-
Task<bool> Login(string ip, int port, string userName, string password, LoginType loginType = LoginType.Http);
21+
Task<bool> Login(string ip, int port, string userName, string password, HikVisionLoginType loginType = HikVisionLoginType.Http);
2222

2323
/// <summary>
2424
/// 登出方法

0 commit comments

Comments
 (0)