leds/src/util/webserver.rs

38 lines
1.5 KiB
Rust

use std::net::TcpListener;
use std::thread;
use tungstenite::accept;
use crate::util::pattern;
pub fn websocket(pattern: &mut Vec<Box<dyn pattern::Pattern>>) {
let server = TcpListener::bind("0.0.0.0:29999").unwrap();
for stream in server.incoming() {
thread::spawn (move || {
let mut websocket = accept(stream.unwrap()).unwrap();
loop {
let input = websocket.read_message().unwrap();
if input.is_text() {
let string = input.to_text().unwrap_or("unit");
let mul_string = pattern::format_multiline(string);
match mul_string.iter().cloned().map(pattern::parse_line).collect() {
Ok(patterns) => {
*pattern = patterns;
let text = format!("Ok!\n\n{}", string);
let msg = tungstenite::Message::from(text);
websocket.write_message(msg).unwrap();
}
Err(err) => {
println!("ret err {:?}", err);
let msg = tungstenite::Message::from(err.to_string());
websocket.write_message(msg).unwrap();
}
}
}
else {
let msg = tungstenite::Message::from("Not text");
websocket.write_message(msg).unwrap();
}
}
});
}
}