40 lines
1.6 KiB
Rust
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);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|