leds/src/util/webserver.rs

40 lines
1.6 KiB
Rust

use std::net::TcpListener;
use std::{thread, sync::{Arc, Mutex}};
use tungstenite::accept;
use crate::util::pattern::*;
pub fn websocket(pattern: &Arc<Mutex<Vec<Box<dyn Pattern>>>>) {
let server = TcpListener::bind("0.0.0.0:29999").unwrap();
for stream in server.incoming() {
let clone = Arc::clone(pattern);
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 = format_multiline(string);
match mul_string.iter().cloned().map(parse_line).collect() {
Ok(patterns) => {
let mut data = clone.lock().unwrap();
*data = 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);
}
}
});
}
}