diff --git a/src/run-web.html b/src/run-web.html
index 1d91e90..ad2e9c9 100644
--- a/src/run-web.html
+++ b/src/run-web.html
@@ -1 +1 @@
-
uw8-run
\ No newline at end of file
+uw8-run
\ No newline at end of file
diff --git a/src/run_web.rs b/src/run_web.rs
index 4eede6b..3b2398c 100644
--- a/src/run_web.rs
+++ b/src/run_web.rs
@@ -11,6 +11,7 @@ use warp::{http::Response, Filter};
pub struct RunWebServer {
cart: Arc>>,
tx: broadcast::Sender<()>,
+ socket_addr: SocketAddr,
}
impl RunWebServer {
@@ -18,8 +19,13 @@ impl RunWebServer {
let cart = Arc::new(Mutex::new(Vec::new()));
let (tx, _) = broadcast::channel(1);
+ let socket_addr = "127.0.0.1:3030"
+ .parse::()
+ .expect("Failed to parse socket address");
+
let server_cart = cart.clone();
let server_tx = tx.clone();
+ let server_addr = socket_addr.clone();
thread::spawn(move || {
let rt = tokio::runtime::Builder::new_current_thread()
.enable_io()
@@ -47,24 +53,26 @@ impl RunWebServer {
warp::sse::reply(warp::sse::keep_alive().stream(event_stream(&server_tx)))
});
- let socket_addr = "127.0.0.1:3030"
- .parse::()
- .expect("Failed to parse socket address");
-
- let server_future = warp::serve(html.or(cart).or(events)).bind(socket_addr);
- println!("Point browser at http://{}", socket_addr);
- let _ignore_result = webbrowser::open(&format!("http://{}", socket_addr));
+ let server_future = warp::serve(html.or(cart).or(events)).bind(server_addr);
server_future.await
});
});
- RunWebServer { cart, tx }
+ RunWebServer {
+ cart,
+ tx,
+ socket_addr,
+ }
}
}
impl super::Runtime for RunWebServer {
fn load(&mut self, module_data: &[u8]) -> Result<()> {
if let Ok(mut lock) = self.cart.lock() {
+ if lock.is_empty() && !module_data.is_empty() {
+ println!("Point browser at http://{}", self.socket_addr);
+ let _ignore_result = webbrowser::open(&format!("http://{}", self.socket_addr));
+ }
lock.clear();
lock.extend_from_slice(module_data);
}
@@ -86,4 +94,4 @@ impl Default for RunWebServer {
fn default() -> RunWebServer {
RunWebServer::new()
}
-}
\ No newline at end of file
+}