1// Prevents additional console window on Windows in release, DO NOT REMOVE!! 2#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 3 4mod midibridge; 5mod oscbridge; 6mod loggerbridge; 7use std::sync::Arc; 8 9use loggerbridge::Logger; 10use tauri::Manager; 11use tokio::sync::mpsc; 12use tokio::sync::Mutex; 13// the payload type must implement `Serialize` and `Clone`. 14#[derive(Clone, serde::Serialize)] 15struct Payload { 16 message: String, 17 message_type: String, 18} 19fn main() { 20 let (async_input_transmitter_midi, async_input_receiver_midi) = mpsc::channel(1); 21 let (async_output_transmitter_midi, async_output_receiver_midi) = mpsc::channel(1); 22 let (async_input_transmitter_osc, async_input_receiver_osc) = mpsc::channel(1); 23 let (async_output_transmitter_osc, async_output_receiver_osc) = mpsc::channel(1); 24 tauri::Builder 25 ::default() 26 .manage(midibridge::AsyncInputTransmit { 27 inner: Mutex::new(async_input_transmitter_midi), 28 }) 29 .manage(oscbridge::AsyncInputTransmit { 30 inner: Mutex::new(async_input_transmitter_osc), 31 }) 32 .invoke_handler(tauri::generate_handler![midibridge::sendmidi, oscbridge::sendosc]) 33 .setup(|app| { 34 let window = Arc::new(app.get_window("main").unwrap()); 35 let logger = Logger { window }; 36 midibridge::init( 37 logger.clone(), 38 async_input_receiver_midi, 39 async_output_receiver_midi, 40 async_output_transmitter_midi 41 ); 42 oscbridge::init(logger, async_input_receiver_osc, async_output_receiver_osc, async_output_transmitter_osc); 43 Ok(()) 44 }) 45 .run(tauri::generate_context!()) 46 .expect("error while running tauri application"); 47}