media_driver/
media_driver.rs

1use log::info;
2use rusteron_media_driver::*;
3use std::sync::atomic::{AtomicBool, Ordering};
4use std::sync::Arc;
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7    // Flag to indicate when the application should stop (set on Ctrl+C)
8    let running = Arc::new(AtomicBool::new(true));
9    let running_clone = Arc::clone(&running);
10
11    // Register signal handler for SIGINT (Ctrl+C)
12    ctrlc::set_handler(move || {
13        running_clone.store(false, Ordering::SeqCst);
14    })?;
15
16    // Create Aeron context
17    let aeron_context = AeronDriverContext::new()?;
18    info!("aeron dir: {:?}", aeron_context.get_dir());
19    aeron_context.print_configuration();
20
21    // Create Aeron driver
22    let aeron_driver = AeronDriver::new(&aeron_context)?;
23    aeron_driver.start(true)?;
24    // Start the Aeron driver
25    info!("Aeron media driver started successfully. Press Ctrl+C to stop.");
26
27    // Poll for work until Ctrl+C is pressed
28    while running.load(Ordering::Acquire) {
29        aeron_driver.main_idle_strategy(aeron_driver.main_do_work()?);
30    }
31    info!("Received signal to stop the media driver.");
32    info!("Aeron media driver stopped successfully.");
33    Ok(())
34}