diff --git a/protossbot/src/main.rs b/protossbot/src/main.rs
index 3499397..9ac31e0 100644
--- a/protossbot/src/main.rs
+++ b/protossbot/src/main.rs
@@ -11,11 +11,15 @@ fn main() {
let game_state = Arc::new(Mutex::new(GameState::default()));
- // // Start the webserver in a separate thread
- // std::thread::spawn(|| {
- // let rt = tokio::runtime::Runtime::new().unwrap();
- // rt.block_on(start_webserver());
- // });
+ // Start the webserver in a separate thread
+ std::thread::spawn(|| {
+ let rt = tokio::runtime::Runtime::new().unwrap();
+ rt.block_on(async {
+ start_webserver().await;
+ // Keep the runtime alive indefinitely to prevent TLS cleanup issues
+ std::future::pending::<()>().await;
+ });
+ });
rsbwapi::start(move |_game| ProtosBot::new(game_state.clone()));
}
@@ -25,19 +29,40 @@ async fn start_webserver() {
use leptos::*;
use leptos_axum::{generate_route_list, LeptosRoutes};
use protoss_bot_web::App;
+ use tower_http::services::ServeDir;
- let conf = get_configuration(None).await.unwrap();
- let leptos_options = conf.leptos_options;
+ let leptos_options = LeptosOptions {
+ output_name: "protoss-bot-web".to_string(),
+ site_root: "target/site".to_string(),
+ site_pkg_dir: "pkg".to_string(),
+ env: leptos_config::Env::DEV,
+ site_addr: "127.0.0.1:3333".parse().unwrap(),
+ reload_port: 3001,
+ hash_file: "".to_string(),
+ hash_files: false,
+ ..Default::default()
+ };
let addr = leptos_options.site_addr;
let routes = generate_route_list(App);
let app = Router::new()
.leptos_routes(&leptos_options, routes, App)
+ .nest_service("/pkg", ServeDir::new("web/style"))
.with_state(leptos_options);
- println!("Web server listening on http://{}", &addr);
- let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
- axum::serve(listener, app.into_make_service())
- .await
- .unwrap();
+ match tokio::net::TcpListener::bind(&addr).await {
+ Ok(listener) => {
+ println!("Web server listening on http://{}", &addr);
+ if let Err(e) = axum::serve(listener, app.into_make_service()).await {
+ eprintln!("Web server error: {}", e);
+ }
+ }
+ Err(e) => {
+ eprintln!(
+ "Failed to bind to {}: {}. Is the port already in use?",
+ &addr, e
+ );
+ eprintln!("Skipping web server startup.");
+ }
+ }
}
diff --git a/protossbot/web/Cargo.toml b/protossbot/web/Cargo.toml
index 3564c2e..89174e3 100644
--- a/protossbot/web/Cargo.toml
+++ b/protossbot/web/Cargo.toml
@@ -4,10 +4,10 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-leptos = { version = "0.6", features = ["csr"] }
-leptos_axum = { version = "0.6" }
-leptos_meta = { version = "0.6" }
-leptos_router = { version = "0.6" }
+leptos = { version = "0.6", default-features = false, features = ["ssr"] }
+leptos_axum = { version = "0.6", default-features = false }
+leptos_meta = { version = "0.6", default-features = false, features = ["ssr"] }
+leptos_router = { version = "0.6", default-features = false, features = ["ssr"] }
axum = "0.7"
tokio = { version = "1", features = ["full"] }
tower = "0.4"
@@ -16,5 +16,9 @@ serde = { version = "1", features = ["derive"] }
serde_json = "1"
lazy_static = "1.4"
+[features]
+default = ["ssr"]
+ssr = ["leptos/ssr", "leptos_meta/ssr", "leptos_router/ssr"]
+
[lib]
crate-type = ["cdylib", "rlib"]
diff --git a/protossbot/web/Cargo.toml.leptos b/protossbot/web/Cargo.toml.leptos
index 0edfae0..b011625 100644
--- a/protossbot/web/Cargo.toml.leptos
+++ b/protossbot/web/Cargo.toml.leptos
@@ -9,7 +9,7 @@ site-root = "target/site"
site-pkg-dir = "pkg"
style-file = "style/main.css"
assets-dir = "public"
-site-addr = "127.0.0.1:3000"
+site-addr = "127.0.0.1:3001"
reload-port = 3001
browserquery = "defaults"
watch = false
diff --git a/protossbot/web/src/lib.rs b/protossbot/web/src/lib.rs
index 599789a..c589eb2 100644
--- a/protossbot/web/src/lib.rs
+++ b/protossbot/web/src/lib.rs
@@ -10,57 +10,73 @@ lazy_static::lazy_static! {
#[component]
pub fn App() -> impl IntoView {
- provide_meta_context();
+ provide_meta_context();
- view! {
-
"Current Speed: " {game_speed}
- - -"Current Speed: " {game_speed}
+ + +