MCPcopy Create free account
hub / github.com/NativeScript/SimDeck / run_control_queue

Function run_control_queue

packages/server/src/api/routes.rs:2890–2967  ·  view source on GitHub ↗
(
    session: SimulatorSession,
    bridge: NativeBridge,
    udid: String,
    mut receiver: mpsc::UnboundedReceiver<ControlMessage>,
)

Source from the content-addressed store, hash-verified

2888}
2889
2890async fn run_control_queue(
2891 session: SimulatorSession,
2892 bridge: NativeBridge,
2893 udid: String,
2894 mut receiver: mpsc::UnboundedReceiver<ControlMessage>,
2895) {
2896 let mut pending = VecDeque::new();
2897 let mut tvos_touch = TvosControlTouchGesture::default();
2898 let mut multitouch_input_session: Option<Arc<NativeInputSession>> = None;
2899 loop {
2900 let mut message = match pending.pop_front() {
2901 Some(message) => message,
2902 None => {
2903 if multitouch_input_session.is_some() {
2904 tokio::select! {
2905 message = receiver.recv() => match message {
2906 Some(message) => message,
2907 None => break,
2908 },
2909 _ = tokio::time::sleep(MULTITOUCH_INPUT_IDLE_TIMEOUT) => {
2910 multitouch_input_session = None;
2911 continue;
2912 }
2913 }
2914 } else {
2915 match receiver.recv().await {
2916 Some(message) => message,
2917 None => break,
2918 }
2919 }
2920 }
2921 };
2922 if control_message_is_move(&message) {
2923 while let Ok(next_message) = receiver.try_recv() {
2924 if control_message_is_move(&next_message) {
2925 message = next_message;
2926 } else {
2927 pending.push_back(next_message);
2928 break;
2929 }
2930 }
2931 }
2932 if multitouch_input_session.is_some()
2933 && !matches!(message, ControlMessage::MultiTouch { .. })
2934 {
2935 multitouch_input_session = None;
2936 }
2937 let result = match message {
2938 ControlMessage::ToggleAppearance => {
2939 run_toggle_appearance_control(bridge.clone(), udid.clone()).await
2940 }
2941 message if session.is_tvos() => {
2942 run_tvos_control_message(session.clone(), message, &mut tvos_touch).await
2943 }
2944 message @ ControlMessage::MultiTouch { .. } => {
2945 let should_clear_input = control_message_ends_touch(&message);
2946 let result = match bridge_input_session_for_control(
2947 &mut multitouch_input_session,

Callers 1

handle_control_socketFunction · 0.85

Calls 10

control_message_is_moveFunction · 0.85
run_tvos_control_messageFunction · 0.85
run_control_messageFunction · 0.85
is_tvosMethod · 0.80
cloneMethod · 0.65
recvMethod · 0.45

Tested by

no test coverage detected