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>,
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,
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;
.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 });
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,
}
}
nick : String,
load : String,
log : Vec<SessionFormattedLogEntry>,
+ sse_url_prefix : String,
}
#[derive(Debug,Serialize)]
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,
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))?,