lasprs/src/bin/lasp_inputdefault.rs

57 lines
1.6 KiB
Rust

use anyhow::Result;
use crossbeam::channel::{unbounded, Receiver, TryRecvError};
use lasprs::daq::{StreamHandler, StreamMgr, InStreamMsg};
use std::io;
use std::{thread, time};
// use
fn spawn_stdin_channel() -> Receiver<String> {
let (tx, rx) = unbounded();
thread::spawn(move || loop {
let mut buffer = String::new();
io::stdin().read_line(&mut buffer).unwrap();
tx.send(buffer).unwrap();
});
rx
}
fn sleep(millis: u64) {
let duration = time::Duration::from_millis(millis);
thread::sleep(duration);
}
fn main() -> Result<()> {
let mut smgr = StreamMgr::new();
smgr.startDefaultInputStream()?;
let stdin_channel = spawn_stdin_channel();
let sh = StreamHandler::new(&mut smgr);
'infy: loop {
match stdin_channel.try_recv() {
Ok(_key) => break 'infy,
Err(TryRecvError::Empty) => {}
Err(TryRecvError::Disconnected) => panic!("Channel disconnected"),
}
sleep(100);
match sh.rx.try_recv() {
Ok(msg) => {
// eprint!("Obtained message: {:?}", msg);
match msg {
InStreamMsg::StreamStarted(meta) => {
println!("Stream started: {:?}", meta);
},
_ => { println!("Other msg...");}
}
}
Err(e) => match e {
TryRecvError::Disconnected => {
break 'infy;
}
TryRecvError::Empty => {}
},
}
}
Ok(())
}