@@ -111,33 +111,35 @@ async fn do_capture(
111111 capture. create ( handle, to_capture_pos ( pos) ) . await ?;
112112 }
113113
114- let mut state = State :: Idle ;
114+ let mut state = State :: Receiving ;
115115
116116 loop {
117117 tokio:: select! {
118118 event = capture. next( ) => match event {
119119 Some ( event) => handle_capture_event( server, & mut capture, conn, event?, & mut state) . await ?,
120120 None => return Ok ( ( ) ) ,
121121 } ,
122- ( handle, event) = conn. recv( ) => if let Some ( active) = server. get_active( ) {
123- if handle != active {
124- // we only care about events coming from the client we are currently connected to
125- // only `Ack` and `Leave` are relevant
126- continue
122+ ( handle, event) = conn. recv( ) => {
123+ if let Some ( active) = server. get_active( ) {
124+ if handle != active {
125+ // we only care about events coming from the client we are currently connected to
126+ // only `Ack` and `Leave` are relevant
127+ continue
128+ }
127129 }
128130
129131 match event {
130132 // connection acknowlegded => set state to Sending
131133 ProtoEvent :: Ack ( _) => state = State :: Sending ,
132134 // client disconnected
133- ProtoEvent :: Leave ( _) => release_capture( & mut capture, server, & mut state ) . await ?,
135+ ProtoEvent :: Leave ( _) => release_capture( & mut capture, server) . await ?,
134136 _ => { }
135137 }
136138 } ,
137139 e = rx. recv( ) => {
138140 match e {
139141 Some ( e) => match e {
140- CaptureRequest :: Release => release_capture( & mut capture, server, & mut state ) . await ?,
142+ CaptureRequest :: Release => release_capture( & mut capture, server) . await ?,
141143 CaptureRequest :: Create ( h, p) => capture. create( h, p) . await ?,
142144 CaptureRequest :: Destroy ( h) => capture. destroy( h) . await ?,
143145 } ,
@@ -173,8 +175,9 @@ macro_rules! debounce {
173175 } ;
174176}
175177
178+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
176179enum State {
177- Idle ,
180+ Receiving ,
178181 WaitingForAck ,
179182 Sending ,
180183}
@@ -189,41 +192,45 @@ async fn handle_capture_event(
189192 let ( handle, event) = event;
190193 log:: trace!( "({handle}): {event:?}" ) ;
191194
192- if server. should_release . borrow_mut ( ) . take ( ) . is_some ( )
193- || capture. keys_pressed ( & server. release_bind )
194- {
195- return release_capture ( capture, server, state) . await ;
195+ if server. should_release . borrow_mut ( ) . take ( ) . is_some ( ) && * state != State :: Receiving {
196+ log:: info!( "releasing capture: a client entered the device" ) ;
197+ * state = State :: Receiving ;
198+ return release_capture ( capture, server) . await ;
199+ }
200+
201+ if capture. keys_pressed ( & server. release_bind ) {
202+ log:: info!( "releasing capture: release-bind pressed" ) ;
203+ return release_capture ( capture, server) . await ;
196204 }
197205
198206 if event == CaptureEvent :: Begin {
199- * state = State :: WaitingForAck ;
207+ if * state != State :: Sending {
208+ * state = State :: WaitingForAck ;
209+ }
200210 server. set_active ( Some ( handle) ) ;
201211 spawn_hook_command ( server, handle) ;
202212 }
203213
204214 let event = match event {
205215 CaptureEvent :: Begin => ProtoEvent :: Enter ( lan_mouse_proto:: Position :: Left ) ,
206216 CaptureEvent :: Input ( e) => match state {
207- State :: Sending => ProtoEvent :: Input ( e) ,
208217 // connection not acknowledged, repeat `Enter` event
209- _ => ProtoEvent :: Enter ( lan_mouse_proto:: Position :: Left ) ,
218+ State :: WaitingForAck => ProtoEvent :: Enter ( lan_mouse_proto:: Position :: Left ) ,
219+ _ => ProtoEvent :: Input ( e) ,
210220 } ,
211221 } ;
212222
223+ log:: info!( "CAPTURE {event} >=>=>=>=>=> {handle}" ) ;
213224 if let Err ( e) = conn. send ( event, handle) . await {
214- const DUR : Duration = Duration :: from_millis ( 500 ) ;
215- debounce ! ( PREV_LOG , DUR , log:: warn!( "releasing capture: {e}" ) ) ;
225+ // const DUR: Duration = Duration::from_millis(500);
226+ log:: warn!( "releasing capture: {e}" ) ;
227+ // debounce!(PREV_LOG, DUR, log::warn!("releasing capture: {e}"));
216228 capture. release ( ) . await ?;
217229 }
218230 Ok ( ( ) )
219231}
220232
221- async fn release_capture (
222- capture : & mut InputCapture ,
223- server : & Server ,
224- state : & mut State ,
225- ) -> Result < ( ) , CaptureError > {
226- * state = State :: Idle ;
233+ async fn release_capture ( capture : & mut InputCapture , server : & Server ) -> Result < ( ) , CaptureError > {
227234 server. set_active ( None ) ;
228235 capture. release ( ) . await
229236}
0 commit comments