@@ -1934,7 +1934,8 @@ async fn handle_control_socket(state: AppState, udid: String, socket: WebSocket)
19341934 ) )
19351935 . await ;
19361936 let ( control_tx, control_rx) = mpsc:: unbounded_channel :: < ControlMessage > ( ) ;
1937- let control_task = task:: spawn ( run_control_queue ( session, udid. clone ( ) , control_rx) ) ;
1937+ let bridge = state. registry . bridge ( ) . clone ( ) ;
1938+ let control_task = task:: spawn ( run_control_queue ( session, bridge, udid. clone ( ) , control_rx) ) ;
19381939
19391940 while let Some ( message) = receiver. next ( ) . await {
19401941 let text = match message {
@@ -1968,6 +1969,7 @@ async fn handle_control_socket(state: AppState, udid: String, socket: WebSocket)
19681969
19691970async fn run_control_queue (
19701971 session : SimulatorSession ,
1972+ bridge : NativeBridge ,
19711973 udid : String ,
19721974 mut receiver : mpsc:: UnboundedReceiver < ControlMessage > ,
19731975) {
@@ -1990,7 +1992,13 @@ async fn run_control_queue(
19901992 }
19911993 }
19921994 }
1993- if let Err ( error) = run_control_message ( session. clone ( ) , message) . await {
1995+ let result = match message {
1996+ ControlMessage :: ToggleAppearance => {
1997+ run_toggle_appearance_control ( bridge. clone ( ) , udid. clone ( ) ) . await
1998+ }
1999+ message => run_control_message ( session. clone ( ) , message) . await ,
2000+ } ;
2001+ if let Err ( error) = result {
19942002 tracing:: debug!( "Control message failed for {udid}: {error}" ) ;
19952003 }
19962004 }
@@ -2094,13 +2102,22 @@ pub(crate) async fn run_control_message(
20942102 ControlMessage :: RotateLeft => session. rotate_left ( ) ,
20952103 ControlMessage :: RotateRight => session. rotate_right ( ) ,
20962104 ControlMessage :: ToggleAppearance => Err ( AppError :: bad_request (
2097- "`toggleAppearance` requires the WebRTC control channel ." ,
2105+ "`toggleAppearance` requires a native bridge control handler ." ,
20982106 ) ) ,
20992107 } )
21002108 . await
21012109 . map_err ( |error| AppError :: internal ( format ! ( "Failed to join control task: {error}" ) ) ) ?
21022110}
21032111
2112+ pub ( crate ) async fn run_toggle_appearance_control (
2113+ bridge : NativeBridge ,
2114+ udid : String ,
2115+ ) -> Result < ( ) , AppError > {
2116+ task:: spawn_blocking ( move || bridge. toggle_appearance ( & udid) )
2117+ . await
2118+ . map_err ( |error| AppError :: internal ( format ! ( "Failed to join control task: {error}" ) ) ) ?
2119+ }
2120+
21042121async fn send_key (
21052122 State ( state) : State < AppState > ,
21062123 Path ( udid) : Path < String > ,
0 commit comments