syncaud/src/main.rs
2025-01-27 12:35:41 +01:00

56 lines
1.8 KiB
Rust

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // Hide console window on Windows in release mode
// Import necessary modules and crates
use client_handler::{Listener, NetworkListener};
use std::thread;
use ui_app::UIApp;
use eframe::egui;
// Declare the modules used in this project
mod client_handler;
mod dispatcher;
mod protocol;
mod sound_player;
mod sound_scheduler;
mod ui_app;
fn main() -> eframe::Result {
// Define options for the eframe application
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default().with_inner_size([700.0, 400.0]), // Set initial window size
..Default::default()
};
// Spawn a new thread to handle network listening
thread::spawn(move || {
// Attempt to listen on port 3000
let result = NetworkListener::listen(3000);
match result {
Ok(_) => {}
Err(e) => {
eprintln!("Failed to bind: {}", e.message); // Print error message if binding fails
// Try with port 3001 if port 3000 fails
let result = NetworkListener::listen(3001);
match result {
Ok(_) => {}
Err(e) => {
eprintln!("Failed to bind again: {}", e.message); // Print error message if binding fails again
}
}
}
}
});
// Run the eframe application
eframe::run_native(
"My egui App", // Application title
options, // Application options
Box::new(|cc| {
// This gives us image support:
egui_extras::install_image_loaders(&cc.egui_ctx); // Install image loaders for egui context
Ok(Box::<UIApp>::default()) // Initialize the UI application
}),
)
}