chiark / gitweb /
event stream generator
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 May 2020 12:12:11 +0000 (13:12 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 May 2020 12:12:11 +0000 (13:12 +0100)
src/imports.rs
src/main.rs

index 2f8945de79a3818b6af816b2328facca9d986e48..7582a078d9edc1571827c076eb35c02bf8bbcbb7 100644 (file)
@@ -1,5 +1,8 @@
 
 pub use std::io;
+pub use std::io::{BufReader,Read};
+pub use std::thread;
+pub use std::time::Duration;
 
 pub use thiserror::Error;
 pub use anyhow::{Context,anyhow};
index e2685b0dd49e91bd39619caa44d2540470934cf7..d3d3a7dc54334490c81553b7388bc113a673683d 100644 (file)
@@ -40,11 +40,24 @@ impl<'r> FromParam<'r> for CheckedResourceLeaf {
   }
 }
 
+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);
+    self.next += 1;
+    buf[0..data.len()].copy_from_slice(data.as_bytes());
+    Ok(buf.len())
+  }
+}
+
 #[get("/updates")]
 fn updates() -> impl response::Responder<'static> {
-  let ch = response::Stream::chunked(
-    b"data: an update"
-      .as_ref(), 1);
+  let tc = TestCounterInner { next : 0 };
+  let tc = BufReader::new(tc);
+  let ch = response::Stream::chunked(tc, 1);
   let ct = ContentType::parse_flexible("text/event-stream; charset=utf-8").
     unwrap();
   response::content::Content(ct,ch)