leds/src/util/webserver.rs

43 lines
1.7 KiB
Rust
Raw Normal View History

2021-12-29 01:10:29 +00:00
use std::net::TcpListener;
2021-12-29 01:53:30 +00:00
use std::{thread, sync::{Arc, Mutex}};
2021-12-29 01:10:29 +00:00
use tungstenite::accept;
2021-12-29 01:53:30 +00:00
use crate::util::pattern::*;
2021-12-29 01:10:29 +00:00
2021-12-29 01:53:30 +00:00
pub fn websocket(pattern: &Arc<Mutex<Vec<Box<dyn Pattern>>>>) {
2021-12-29 01:10:29 +00:00
let server = TcpListener::bind("0.0.0.0:29999").unwrap();
for stream in server.incoming() {
2021-12-29 01:53:30 +00:00
let clone = Arc::clone(pattern);
2021-12-29 02:10:00 +00:00
thread::spawn (move || {
2021-12-29 01:10:29 +00:00
let mut websocket = accept(stream.unwrap()).unwrap();
loop {
let input = websocket.read_message().unwrap();
if input.is_text() {
2021-12-29 01:20:48 +00:00
let string = input.to_text().unwrap_or("unit");
2021-12-29 01:53:30 +00:00
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;
2021-12-29 01:20:48 +00:00
let text = format!("Ok!\n\n{}", string);
2021-12-29 01:10:29 +00:00
let msg = tungstenite::Message::from(text);
websocket.write_message(msg).unwrap();
}
Err(err) => {
println!("ret err {:?}", err);
2021-12-29 01:20:48 +00:00
let msg = tungstenite::Message::from(err.to_string());
2021-12-29 01:10:29 +00:00
websocket.write_message(msg).unwrap();
}
}
}
else {
let msg = tungstenite::Message::from("Not text");
2021-12-30 04:02:14 +00:00
match websocket.write_message(msg) {
// fuck this result in particular
_ => {}
};
2021-12-29 01:10:29 +00:00
}
}
});
}
2021-12-29 01:20:48 +00:00
}