aboutsummaryrefslogtreecommitdiff
path: root/src/spectate/server.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-04 16:48:07 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-04 16:48:07 +0200
commit34967cd3b6530656ef0bf31810f9fd6dfb853765 (patch)
tree912bb0995db6997b601f246cfb0420b6b3ab2101 /src/spectate/server.rs
parentce0b808a01081322abc7ed51e09d0f452b606ad7 (diff)
downloadgpn-tron-rust-34967cd3b6530656ef0bf31810f9fd6dfb853765.tar
gpn-tron-rust-34967cd3b6530656ef0bf31810f9fd6dfb853765.tar.bz2
gpn-tron-rust-34967cd3b6530656ef0bf31810f9fd6dfb853765.tar.zst
can vie games
Diffstat (limited to 'src/spectate/server.rs')
-rw-r--r--src/spectate/server.rs28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/spectate/server.rs b/src/spectate/server.rs
index 9dbfebe..e3e9f80 100644
--- a/src/spectate/server.rs
+++ b/src/spectate/server.rs
@@ -6,6 +6,7 @@ use anyhow::Result;
use axum::extract;
use axum::extract::connect_info::ConnectInfo;
use axum::extract::ws::Message;
+use axum::http::HeaderMap;
use axum::response::Html;
use axum::{
extract::ws::{WebSocket, WebSocketUpgrade},
@@ -13,8 +14,10 @@ use axum::{
routing::get,
Router,
};
+use headers::ContentType;
use log::{info, warn};
use std::net::SocketAddr;
+use std::str::FromStr;
use std::sync::Arc;
use tokio::spawn;
use tokio::sync::{broadcast, RwLock};
@@ -32,6 +35,7 @@ pub async fn spectate_server(config: Config, state: Arc<State>) -> Result<()> {
spawn(broadcaster(sstate.clone(), state));
let app = Router::new()
.route("/", get(index))
+ .route("/main.js", get(javascript))
.route("/events", get(ws_handler))
.with_state(sstate);
let listener = tokio::net::TcpListener::bind(config.bind).await.unwrap();
@@ -47,6 +51,26 @@ pub async fn spectate_server(config: Config, state: Arc<State>) -> Result<()> {
async fn index() -> Html<&'static str> {
Html(include_str!("index.html"))
}
+#[cfg(debug_assertions)]
+async fn javascript() -> (HeaderMap, String) {
+ use headers::HeaderMapExt;
+ use tokio::fs::read_to_string;
+ let mut hm = HeaderMap::new();
+ hm.typed_insert(ContentType::from_str("application/javascript").unwrap());
+ (
+ hm,
+ read_to_string(concat!(env!("OUT_DIR"), "/main.js"))
+ .await
+ .unwrap(),
+ )
+}
+#[cfg(not(debug_assertions))]
+async fn javascript() -> (HeaderMap, &'static str) {
+ use headers::HeaderMapExt;
+ let mut hm = HeaderMap::new();
+ hm.typed_insert(ContentType::from_str("application/javascript").unwrap());
+ (hm, include_str!(concat!(env!("OUT_DIR"), "/main.js")))
+}
async fn broadcaster(sstate: Arc<SpectateState>, state: Arc<State>) {
let mut ticks = state.tick.subscribe();
@@ -59,8 +83,8 @@ async fn broadcaster(sstate: Arc<SpectateState>, state: Arc<State>) {
sstate.past_events.write().await.clear();
events.push(Packet::Game {
my_id: 0,
- width: g.size.x as usize,
- height: g.size.y as usize,
+ width: g.map.size.x as usize,
+ height: g.map.size.y as usize,
});
for (player, (_, _, name)) in &g.heads {
events.push(Packet::Player {