chiark / gitweb /
wip sse url prefix
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Nov 2020 10:42:22 +0000 (10:42 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Nov 2020 10:42:22 +0000 (10:42 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/config.rs
src/session.rs
templates/session.tera

index 861fbd007f04322918c054da4cafc78a75898c88..628898ccc7b21c728e4b431df7cde1640060dc06 100644 (file)
@@ -25,6 +25,7 @@ pub struct ServerConfigSpec {
   pub debug: Option<bool>,
   pub http_port: Option<u16>,
   pub public_url: String,
+  pub sse_wildcard_url: Option<String>,
   pub rocket_workers: Option<u16>,
   pub template_dir: Option<String>,
   pub wasm_dir: Option<String>,
@@ -40,6 +41,7 @@ pub struct ServerConfig {
   pub debug: bool,
   pub http_port: Option<u16>,
   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<ServerConfigSpec> 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<ServerConfigSpec> 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<ServerConfigSpec> 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,
     }
   }
index a8eda951481536e856a0a0e0ae5e06daa37a34d4..224a2fd7ea7499bca653503e2601fe0951687010 100644 (file)
@@ -15,6 +15,7 @@ struct SessionRenderContext {
   nick : String,
   load : String,
   log : Vec<SessionFormattedLogEntry>,
+  sse_url_prefix : String,
 }
 
 #[derive(Debug,Serialize)]
@@ -156,6 +157,11 @@ fn session(form : Json<SessionForm>) -> Result<Template,OE> {
       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<SessionForm>) -> Result<Template,OE> {
       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))?,
index 8373e397ede976ace1d4915e86d4b9f98d12d1bb..974eac91e29ccaa27a7d20824b3e46f78d8fbbaf 100644 (file)
@@ -2,6 +2,7 @@
       data-ctoken="{{ctoken}}"
       data-us="{{player}}"
       data-gen="{{gen}}"
+      data-sse-url-prefix="{{sse_url_prefix}}"
       data-load="{{ load | escape }}">
 <style>
   div[class=uos] { display: flex; flex-wrap: wrap; }