@@ -17,7 +17,7 @@ use time::OffsetDateTime;
17
17
use tokio:: sync:: mpsc;
18
18
use tonic:: transport:: Endpoint as TonicEndpoint ;
19
19
use tonic:: { transport:: Channel , Request } ;
20
- use tracing:: { debug, error, info, instrument, warn} ;
20
+ use tracing:: { debug, error, info, instrument, trace , warn} ;
21
21
use ts_rs:: TS ;
22
22
23
23
use crate :: cli:: Cli ;
@@ -175,9 +175,9 @@ impl GrpcClient {
175
175
Ok ( ( ) )
176
176
}
177
177
178
- /// Watch VPN status updates
178
+ /// Watch VPN state updates
179
179
#[ instrument( skip_all) ]
180
- pub async fn watch_vpn_status ( & self , app : & AppHandle ) -> Result < ( ) > {
180
+ pub async fn watch_vpn_state ( & self , app : & AppHandle ) -> Result < ( ) > {
181
181
let mut vpnd = self . vpnd ( ) . await ?;
182
182
183
183
let request = Request :: new ( Empty { } ) ;
@@ -197,25 +197,25 @@ impl GrpcClient {
197
197
tx. send ( update) . await . unwrap ( ) ;
198
198
}
199
199
Ok ( None ) => {
200
- warn ! ( "watch vpn status stream closed by the server" ) ;
200
+ warn ! ( "watch vpn state stream closed by the server" ) ;
201
201
return ;
202
202
}
203
203
Err ( e) => {
204
- warn ! ( "watch vpn status stream get a grpc error: {}" , e) ;
204
+ warn ! ( "watch vpn state stream get a grpc error: {}" , e) ;
205
205
}
206
206
}
207
207
}
208
208
} ) ;
209
209
210
- while let Some ( status ) = rx. recv ( ) . await {
211
- debug ! ( "vpn status update {:?}" , status . status( ) ) ;
212
- if let Some ( e) = status . error . as_ref ( ) {
210
+ while let Some ( state ) = rx. recv ( ) . await {
211
+ debug ! ( "vpn state update {:?}" , state . status( ) ) ;
212
+ if let Some ( e) = state . error . as_ref ( ) {
213
213
warn ! ( "vpn status error: {}" , e. message) ;
214
214
}
215
215
vpn_status:: update (
216
216
app,
217
- ConnectionState :: from ( status . status ( ) ) ,
218
- status . error . map ( BackendError :: from) ,
217
+ ConnectionState :: from ( state . status ( ) ) ,
218
+ state . error . map ( BackendError :: from) ,
219
219
None ,
220
220
)
221
221
. await ?;
@@ -224,6 +224,53 @@ impl GrpcClient {
224
224
Ok ( ( ) )
225
225
}
226
226
227
+ /// Watch VPN status updates
228
+ #[ instrument( skip_all) ]
229
+ pub async fn watch_vpn_status ( & self ) -> Result < ( ) > {
230
+ let mut vpnd = self . vpnd ( ) . await ?;
231
+
232
+ let request = Request :: new ( Empty { } ) ;
233
+ let mut stream = vpnd
234
+ . listen_to_connection_status ( request)
235
+ . await
236
+ . inspect_err ( |e| {
237
+ error ! ( "listen_to_connection_status failed: {}" , e) ;
238
+ } ) ?
239
+ . into_inner ( ) ;
240
+
241
+ let ( tx, mut rx) = mpsc:: channel ( 32 ) ;
242
+ tokio:: spawn ( async move {
243
+ loop {
244
+ match stream. message ( ) . await {
245
+ Ok ( Some ( update) ) => {
246
+ tx. send ( update) . await . unwrap ( ) ;
247
+ }
248
+ Ok ( None ) => {
249
+ warn ! ( "watch vpn status stream closed by the server" ) ;
250
+ return ;
251
+ }
252
+ Err ( e) => {
253
+ warn ! ( "watch vpn status stream get a grpc error: {}" , e) ;
254
+ }
255
+ }
256
+ }
257
+ } ) ;
258
+
259
+ while let Some ( status) = rx. recv ( ) . await {
260
+ // TODO handle status updates
261
+ debug ! (
262
+ "vpn status update {:?}, {:?}" ,
263
+ status. kind( ) ,
264
+ status. message
265
+ ) ;
266
+ if !status. details . is_empty ( ) {
267
+ trace ! ( "vpn status details: {:?}" , status. details) ;
268
+ }
269
+ }
270
+
271
+ Ok ( ( ) )
272
+ }
273
+
227
274
/// Connect to the VPN
228
275
#[ instrument( skip_all) ]
229
276
pub async fn vpn_connect (
0 commit comments