use std::net::TcpListener; use std::{thread, sync::{Arc, Mutex}}; use tungstenite::accept; use crate::util::pattern::*; pub fn websocket(pattern: &Arc>>>) { 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); } } }); } }