1use std::{env, sync::Arc, thread::sleep, time::Duration};
2
3extern crate event_stream;
4
5use event_stream::{EventDispatcherBuilder, EventListener};
6
7#[derive(Debug, Clone)]
8enum Event {
9 Ping,
10 Hello(String),
11}
12
13#[derive(Clone)]
14struct MyListener;
15
16impl MyListener {
17 pub fn new() -> Arc<Self> {
18 Arc::new(Self {})
19 }
20}
21
22impl EventListener<Event> for MyListener {
23 fn dispatch(&self, event: &Event) {
24 println!("{:?} got event: {:?}", self, event);
25 }
26}
27
28impl std::fmt::Debug for MyListener {
29 fn fmt(&self, out: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
30 write!(out, "<MyListener>")
31 }
32}
33
34fn main() {
35 env::set_var("RUST_LOG", "simple=debug");
36 env::set_var("RUST_BACKTRACE", "1");
37
38 let event_dispatcher = EventDispatcherBuilder::new()
39 .add_listener(MyListener::new())
40 .build();
41
42 event_dispatcher.start();
43
44 sleep(Duration::from_secs(1));
45
46 event_dispatcher.emit(Event::Ping);
47
48 sleep(Duration::from_secs(1));
49
50 event_dispatcher.emit(Event::Hello("world".to_string()));
51
52 sleep(Duration::from_secs(1));
53
54 println!("done.");
55}