chiark / gitweb /
updates in json
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Jun 2020 17:54:14 +0000 (18:54 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Jun 2020 17:54:25 +0000 (18:54 +0100)
TODO
src/bin/server.rs
templates/script.js

diff --git a/TODO b/TODO
index 8bc80239a27b09a1def7c91867b121706b8d40d4..0ce6a99b86b467ede747fbe8647d81829aefdb6d 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,3 @@
-updates in json
 client ? struct ?
 instance struct
 token in main url
index c592d5c2c43bb6f64789319060f51d9ba47448c5..f72aed00e6d782a55bc58b8a61001fd0cbe1c23e 100644 (file)
@@ -35,13 +35,21 @@ impl<'r> FromParam<'r> for CheckedResourceLeaf {
   }
 }
 
+#[derive(Serialize)]
+enum Update {
+  TestCounter { value: usize },
+}
+
 type TestCounter = BufReader<TestCounterInner>;
 #[derive(Debug)]
 struct TestCounterInner { next : usize, }
 impl Read for TestCounterInner {
   fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
     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())
index 9efe273da75b8aec9f4c3b0f86407038563545a8..50ce4be290e9a5bef6f5ae1317a0a71b89bc4729 100644 (file)
@@ -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]);
 }