From: Ian Jackson Date: Sun, 14 Jun 2020 17:54:14 +0000 (+0100) Subject: updates in json X-Git-Tag: otter-0.2.0~1584 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=fff334f18d94cc738cb3b637bff4c2a8faede7ec;p=otter.git updates in json --- diff --git a/TODO b/TODO index 8bc80239..0ce6a99b 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,3 @@ -updates in json client ? struct ? instance struct token in main url diff --git a/src/bin/server.rs b/src/bin/server.rs index c592d5c2..f72aed00 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -35,13 +35,21 @@ impl<'r> FromParam<'r> for CheckedResourceLeaf { } } +#[derive(Serialize)] +enum Update { + TestCounter { value: usize }, +} + type TestCounter = BufReader; #[derive(Debug)] struct TestCounterInner { next : usize, } impl Read for TestCounterInner { fn read(&mut self, buf: &mut [u8]) -> io::Result { thread::sleep(Duration::from_millis(500)); - let data = format!("data: {}\n\n", self.next); + let message = Update::TestCounter { value : self.next }; + let data = serde_json::to_string(&message)?; + let data = format!("data: {}\n\n", &data); + // eprintln!("want to return into &[;{}] {:?}", buf.len(), &data); self.next += 1; buf[0..data.len()].copy_from_slice(data.as_bytes()); Ok(buf.len()) diff --git a/templates/script.js b/templates/script.js index 9efe273d..50ce4be2 100644 --- a/templates/script.js +++ b/templates/script.js @@ -2,6 +2,8 @@ // xxx deployment note: need a whole bunch of domains for SSE conn limit +messages = Object(); + status_node = document.getElementById('status'); status_node.innerHTML = 'js-done' @@ -64,7 +66,13 @@ function drag_cancel() { window.removeEventListener('mouseup', drag_mouseup, true); } +messages.TestCounter = function(data) { + status_node.innerHTML = data.value; +} + es = new EventSource("updates"); es.onmessage = function(event) { - status_node.innerHTML = event.data; + var j = JSON.parse(event.data); + var k = Object.keys(j)[0]; + messages[k](j[k]); }