@@ -58,7 +58,31 @@ public partial class HikVisionWebPlugin
5858 /// 获得/设置 插件初始化完成后回调方法
5959 /// </summary>
6060 [ Parameter ]
61- public Func < bool , Task > OnInitedAsync { get ; set ; }
61+ public Func < bool , Task > ? OnInitedAsync { get ; set ; }
62+
63+ /// <summary>
64+ /// 获得/设置 登录成功后回调方法
65+ /// </summary>
66+ [ Parameter ]
67+ public Func < Task > ? OnLoginedAsync { get ; set ; }
68+
69+ /// <summary>
70+ /// 获得/设置 注销成功后回调方法
71+ /// </summary>
72+ [ Parameter ]
73+ public Func < Task > ? OnLogoutedAsync { get ; set ; }
74+
75+ /// <summary>
76+ /// 获得/设置 开始预览后回调方法
77+ /// </summary>
78+ [ Parameter ]
79+ public Func < Task > ? OnStartRealPlayedAsync { get ; set ; }
80+
81+ /// <summary>
82+ /// 获得/设置 停止预览后回调方法
83+ /// </summary>
84+ [ Parameter ]
85+ public Func < Task > ? OnStopRealPlayedAsync { get ; set ; }
6286
6387 private string ? ClassString => CssBuilder . Default ( "bb-hik" )
6488 . AddClassFromAttributes ( AdditionalAttributes )
@@ -109,9 +133,21 @@ public async Task<bool> Login(string ip, int port, string userName, string passw
109133 {
110134 ThrowIfNotInited ( ) ;
111135 IsLogined = await InvokeAsync < bool ? > ( "login" , Id , ip , port , userName , password , ( int ) loginType ) ?? false ;
136+ if ( IsLogined )
137+ {
138+ await TriggerLogined ( ) ;
139+ }
112140 return IsLogined ;
113141 }
114142
143+ private async Task TriggerLogined ( )
144+ {
145+ if ( OnLoginedAsync != null )
146+ {
147+ await OnLoginedAsync ( ) ;
148+ }
149+ }
150+
115151 /// <summary>
116152 /// 登出方法
117153 /// </summary>
@@ -122,7 +158,17 @@ public async Task Logout()
122158 {
123159 await InvokeVoidAsync ( "logout" , Id ) ;
124160 }
161+ IsRealPlaying = false ;
125162 IsLogined = false ;
163+ await TriggerLogouted ( ) ;
164+ }
165+
166+ private async Task TriggerLogouted ( )
167+ {
168+ if ( OnLogoutedAsync != null )
169+ {
170+ await OnLogoutedAsync ( ) ;
171+ }
126172 }
127173
128174 /// <summary>
@@ -134,6 +180,18 @@ public async Task StartRealPlay(int streamType, int channelId)
134180 if ( IsLogined && ! IsRealPlaying )
135181 {
136182 IsRealPlaying = await InvokeAsync < bool ? > ( "startRealPlay" , Id , streamType , channelId ) ?? false ;
183+ if ( IsRealPlaying )
184+ {
185+ await TriggerStartRealPlay ( ) ;
186+ }
187+ }
188+ }
189+
190+ private async Task TriggerStartRealPlay ( )
191+ {
192+ if ( OnStartRealPlayedAsync != null )
193+ {
194+ await OnStartRealPlayedAsync ( ) ;
137195 }
138196 }
139197
@@ -143,13 +201,19 @@ public async Task StartRealPlay(int streamType, int channelId)
143201 /// <returns></returns>
144202 public async Task StopRealPlay ( )
145203 {
146- if ( IsLogined && IsRealPlaying )
204+ if ( IsRealPlaying )
147205 {
148- var result = await InvokeAsync < bool ? > ( "stopRealPlay" , Id ) ?? false ;
149- if ( result )
150- {
151- IsRealPlaying = false ;
152- }
206+ await InvokeVoidAsync ( "stopRealPlay" , Id ) ;
207+ IsRealPlaying = false ;
208+ await TriggerStopRealPlay ( ) ;
209+ }
210+ }
211+
212+ private async Task TriggerStopRealPlay ( )
213+ {
214+ if ( OnStopRealPlayedAsync != null )
215+ {
216+ await OnStopRealPlayedAsync ( ) ;
153217 }
154218 }
155219
0 commit comments