From: Ian Jackson Date: Sun, 17 May 2020 12:12:11 +0000 (+0100) Subject: event stream generator X-Git-Tag: otter-0.2.0~1613 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=be8ddbf7f31a65b1c54c8fd5bdd736c1386370aa;p=otter.git event stream generator --- diff --git a/src/imports.rs b/src/imports.rs index 2f8945de..7582a078 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -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}; diff --git a/src/main.rs b/src/main.rs index e2685b0d..d3d3a7dc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,11 +40,24 @@ impl<'r> FromParam<'r> for CheckedResourceLeaf { } } +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); + 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)