diff --git a/src/main.rs b/src/main.rs index 026d512..194b8d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -43,6 +43,7 @@ impl Server { let rx = self.adaptor.run(); let tx = self.driver.run(); let webaddr = ([127, 0, 0, 1], 3000).into(); + //let (websocket_tx, websocket_rx) = log::info!("Webserver starting on: {}", webaddr); let web = WebServer::run(webaddr); loop { diff --git a/src/web.rs b/src/web.rs index 433a6d7..61b04d6 100644 --- a/src/web.rs +++ b/src/web.rs @@ -1,5 +1,7 @@ +use crate::TallyState; use futures::stream; -use futures::sync::oneshot::{channel, Sender}; +use futures::sync::mpsc::Receiver; +use futures::sync::oneshot; use std::sync::{Arc, Mutex}; use std::thread; use typed_html::dom::DOMTree; @@ -22,12 +24,12 @@ fn build_template() -> DOMTree { } pub struct WebServer { - shutdown_chan: Sender<()>, + shutdown_chan: oneshot::Sender<()>, shutdown_mutex: Arc>, } impl WebServer { - pub fn run(addr: std::net::SocketAddr) -> WebServer { + pub fn run(addr: std::net::SocketAddr, tally_rx: Receiver) -> WebServer { // todo: not have the damn js inline in the func const JS: &'static str = r#" var sock = new WebSocket("ws://" + window.location.host + "/ws"); @@ -37,7 +39,7 @@ sock.onmessage = function (e) { sock.onopen = function (e) { sock.send("Hello!"); }"#; - let (shutdown_tx, shutdown_rx) = channel::<()>(); + let (shutdown_tx, shutdown_rx) = oneshot::channel::<()>(); let shutdown_mutex = Arc::new(Mutex::new(())); let thread_shutdown_mutex = Arc::clone(&shutdown_mutex); @@ -48,11 +50,15 @@ sock.onopen = function (e) { let websocket = warp::path("ws").and(warp::ws2()).map(|ws: warp::ws::Ws2| { ws.on_upgrade(|websocket| { - let (tx, rx) = websocket.split(); + let (tx, _) = websocket.split(); //stream::once::(Ok(Message::text("Hello"))) - rx.forward(tx).map(|_| ()).map_err(|e| { - log::error!("Websocket error: {}", e); - }) + tally_rx + .map(|state| Message::text(format!("{}", state))) + .forward(tx) + .map(|_| ()) + .map_err(|e| { + log::error!("Websocket error: {}", e); + }) }) }); let script = warp::path("script.js").map(|| JS);