From 192adccb10f33bb35132fc2f66c0b775dbb88c4c Mon Sep 17 00:00:00 2001 From: Jade Rowland Date: Sat, 2 Sep 2023 20:59:00 -0400 Subject: [PATCH] add sleep timer + improve message iterating --- src-tauri/src/midibridge.rs | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src-tauri/src/midibridge.rs b/src-tauri/src/midibridge.rs index 5dc7d0c6..c049e406 100644 --- a/src-tauri/src/midibridge.rs +++ b/src-tauri/src/midibridge.rs @@ -1,11 +1,11 @@ use std::collections::HashMap; use std::sync::Arc; +use std::time::Duration; use midir::MidiOutput; -use tokio::sync::mpsc; -use tokio::sync::Mutex; +use tokio::sync::{ mpsc, Mutex }; use tokio::time::Instant; use serde::Deserialize; - +use std::thread::sleep; pub struct MidiMessage { pub message: Vec, pub instant: Instant, @@ -24,7 +24,6 @@ pub fn init( ) { tauri::async_runtime::spawn(async move { async_process_model(async_input_receiver, async_output_transmitter).await }); let message_queue: Arc>> = Arc::new(Mutex::new(Vec::new())); - /* ........................................................... Listen For incoming messages and add to queue ............................................................*/ @@ -72,19 +71,14 @@ pub fn init( /* ........................................................... Process queued messages ............................................................*/ + loop { let mut message_queue = message_queue_clone.lock().await; - for i in 0..=message_queue.len().saturating_sub(1) { - let m = message_queue.get(i); - if m.is_none() { - continue; - } - let message = m.unwrap(); - - // dont play the message if its offset time has not elapsed + //iterate over each message, play and remove messages when they are ready + message_queue.retain(|message| { if message.instant.elapsed().as_millis() < message.offset.into() { - continue; + return true; } let mut out_con = output_connections.get_mut(&message.requestedport); @@ -107,10 +101,10 @@ pub fn init( } else { println!("failed to find midi device: {}", message.requestedport); } + return false; + }); - // the message has been processed, so remove it from the queue - message_queue.remove(i); - } + sleep(Duration::from_millis(1)); } }); }