@@ -11,12 +11,11 @@ use credentialsd_common::model::{
1111} ;
1212use credentialsd_common:: server:: { BackgroundEvent , WindowHandle } ;
1313use futures_lite:: { Stream , StreamExt } ;
14+ use tokio:: sync:: mpsc:: Receiver ;
1415use tokio:: sync:: oneshot;
15- use tokio:: sync:: {
16- mpsc:: { self , Sender } ,
17- Mutex as AsyncMutex ,
18- } ;
19- use zbus:: connection:: { Builder , Connection } ;
16+ use tokio:: sync:: { mpsc:: Sender , Mutex as AsyncMutex } ;
17+ use tokio:: task:: AbortHandle ;
18+ use zbus:: connection:: Connection ;
2019
2120use crate :: credential_service:: ManageDevice ;
2221use crate :: dbus:: ui_control:: Ceremony ;
@@ -27,33 +26,23 @@ use crate::{
2726 model:: { CredentialRequest , CredentialResponse } ,
2827} ;
2928
30- pub const SERVICE_NAME : & str = "xyz.iinuwa.credentialsd.FlowControl" ;
31-
3229pub async fn start_flow_control_service < M : ManageDevice + Debug + Send + Sync + ' static > (
33- device_manager : M ,
34- ) -> zbus:: Result < (
35- Connection ,
36- Sender < (
30+ conn : Connection ,
31+ mut listener : Receiver < (
3732 CredentialRequest ,
3833 RequestingApplication ,
3934 Option < WindowHandle > , // Client window handle
4035 oneshot:: Sender < Result < CredentialResponse , CredentialServiceError > > ,
4136 ) > ,
42- ) > {
37+ device_manager : M ,
38+ ) -> zbus:: Result < AbortHandle > {
4339 let svc = Arc :: new ( AsyncMutex :: new ( device_manager) ) ;
4440 let svc2 = svc. clone ( ) ;
45- let conn = Builder :: session ( ) ?. name ( SERVICE_NAME ) ?. build ( ) . await ?;
46- let ( initiator_tx, mut initiator_rx) = mpsc:: channel :: < (
47- CredentialRequest ,
48- RequestingApplication ,
49- Option < WindowHandle > ,
50- oneshot:: Sender < Result < CredentialResponse , CredentialServiceError > > ,
51- ) > ( 2 ) ;
52- let conn2 = conn. clone ( ) ;
53- tokio:: spawn ( async move {
54- while let Some ( ( msg, requesting_app, window_handle, tx) ) = initiator_rx. recv ( ) . await {
41+
42+ let task = tokio:: spawn ( async move {
43+ while let Some ( ( msg, requesting_app, window_handle, tx) ) = listener. recv ( ) . await {
5544 let svc = svc2. clone ( ) ;
56- let ui_control_client = UiControlServiceClient :: new ( conn2 . clone ( ) ) ;
45+ let ui_control_client = UiControlServiceClient :: new ( conn . clone ( ) ) ;
5746 if let Err ( _) =
5847 tx. send ( handle ( svc, ui_control_client, msg, requesting_app, window_handle) . await )
5948 {
@@ -63,7 +52,7 @@ pub async fn start_flow_control_service<M: ManageDevice + Debug + Send + Sync +
6352 }
6453 }
6554 } ) ;
66- Ok ( ( conn , initiator_tx ) )
55+ Ok ( task . abort_handle ( ) )
6756}
6857
6958async fn handle < M : ManageDevice + Debug + Send + Sync + ' static , UC : UiController + Debug > (
0 commit comments