From c5aa1b6cd798db56db4e2eadd1552a027e5f12e5 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 22 Nov 2020 10:42:22 +0000 Subject: [PATCH] wip sse url prefix Signed-off-by: Ian Jackson --- src/config.rs | 18 ++++++++++++++++-- src/session.rs | 7 +++++++ templates/session.tera | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/config.rs b/src/config.rs index 861fbd00..628898cc 100644 --- a/src/config.rs +++ b/src/config.rs @@ -25,6 +25,7 @@ pub struct ServerConfigSpec { pub debug: Option, pub http_port: Option, pub public_url: String, + pub sse_wildcard_url: Option, pub rocket_workers: Option, pub template_dir: Option, pub wasm_dir: Option, @@ -40,6 +41,7 @@ pub struct ServerConfig { pub debug: bool, pub http_port: Option, pub public_url: String, + pub sse_wildcard_url: Option<(String, String)>, pub rocket_workers: u16, pub template_dir: String, pub wasm_dir: String, @@ -54,7 +56,8 @@ impl TryFrom for ServerConfig { fn try_from(spec: ServerConfigSpec) -> ServerConfig { let ServerConfigSpec { save_directory, command_socket, debug, - http_port, public_url, rocket_workers, template_dir, wasm_dir, + http_port, public_url, sse_wildcard_url, rocket_workers, + template_dir, wasm_dir, log, bundled_sources, shapelibs, } = spec; @@ -71,6 +74,16 @@ impl TryFrom for ServerConfig { .trim_end_matches('/') .into(); + let sse_wildcard_url = sse_wildcard_url.map(|pat| { + let mut it = pat.splitn(2, '*'); + let lhs = it.next().unwrap(); + let rhs = it.next().ok_or_else(||anyhow!( + "sse_wildcard_url must containa '*'" + ))?; + let rhs = rhs.trim_end_matches('/'); + Ok::<_,AE>((lhs.into(), rhs.into())) + }).transpose()?; + let debug = debug.unwrap_or(cfg!(debug_assertions)); let rocket_workers = rocket_workers.unwrap_or( if debug { 20 } else { 1000 }); @@ -105,7 +118,8 @@ impl TryFrom for ServerConfig { ServerConfig { save_directory, command_socket, debug, - http_port, public_url, rocket_workers, template_dir, wasm_dir, + http_port, public_url, sse_wildcard_url, rocket_workers, + template_dir, wasm_dir, log, bundled_sources, shapelibs, } } diff --git a/src/session.rs b/src/session.rs index a8eda951..224a2fd7 100644 --- a/src/session.rs +++ b/src/session.rs @@ -15,6 +15,7 @@ struct SessionRenderContext { nick : String, load : String, log : Vec, + sse_url_prefix : String, } #[derive(Debug,Serialize)] @@ -156,6 +157,11 @@ fn session(form : Json) -> Result { SessionFormattedLogEntry { when, logent } }).collect(); + let sse_url_prefix = match &config().sse_wildcard_url { + Some((lhs, rhs)) => format!("{}{}{}", lhs, client, rhs), + None => "".into(), + }; + let src = SessionRenderContext { ctoken, gen : ig.gs.gen, @@ -165,6 +171,7 @@ fn session(form : Json) -> Result { defs : alldefs, uses, nick : gpl.nick.clone(), + sse_url_prefix, load : serde_json::to_string(&DataLoad { players : load_players, }).map_err(|e| InternalError::JSONEncode(e))?, diff --git a/templates/session.tera b/templates/session.tera index 8373e397..974eac91 100644 --- a/templates/session.tera +++ b/templates/session.tera @@ -2,6 +2,7 @@ data-ctoken="{{ctoken}}" data-us="{{player}}" data-gen="{{gen}}" + data-sse-url-prefix="{{sse_url_prefix}}" data-load="{{ load | escape }}">