mod message; mod monitor; mod output; mod plugins; use std::thread; use std::sync::mpsc; use crate::monitor::Monitor; use crate::output::Output; use crate::message::Message; fn main() { // let lib = Library::new("/home/crom/.gitprojects/rnetmon/plugins/output/stdout/target/debug/deps/libstdout.so").unwrap(); // unsafe { // let handle_message: Symbol = lib.get(b"handle_message").unwrap(); // handle_message(); // } // let msg = Message{ // emitter: "me".to_string(), // level: 10, // msg_type: "string".to_string(), // text: "Consectetur duis do dolor deserunt est minim dolore tempor et non duis.".to_string(), // }; let (mon_sender, mon_receiver) = mpsc::channel(); // let mut monitors: Vec<(Box, thread::JoinHandle<_>)> = vec![]; let mut monitor_threads: Vec> = vec![]; { let snd = mon_sender.clone(); let mon = plugins::monitor::tester::Tester::new(); let thread = thread::spawn(move|| { loop { mon.run(&snd); } }); monitor_threads.push(thread) // monitor_threads.push((mon, thread)); } let monitor_threads = monitor_threads; let mut output_senders: Vec> = vec![]; let mut output_threads: Vec> = vec![]; { let (out_sender, out_receiver) = mpsc::channel(); output_senders.push(out_sender); let thread = thread::spawn(move|| { loop { let message = out_receiver.recv().unwrap(); println!("{:?}", message); } }); output_threads.push(thread); } let output_senders = output_senders; let output_threads = output_threads; // Dispatch messages loop { let message = mon_receiver.recv().unwrap(); for out in &output_senders { out.send(message.clone()).unwrap(); } } }