A simple event bus that can be cloned and shared across threads.
on
blocksTo re-emit events inside on
closures do not clone the original bus, use the bus
reference provided to the closure instead.
```rust use tram::{prelude::*, unsync::EventBus}; use std::{rc::Rc, cell::RefCell};
enum EventType { Start, Stop, }
enum Status { Stopped, Started, }
let bus: EventBus let status = Rc::new(RefCell::new(Status::Stopped));
let statusclosure = Rc::clone(&status);
let statusclosure_2 = Rc::clone(&status); bus.on(EventType::Start, move |bus, _| {
*statusclosure.borrow_mut() = Status::Started;
})
.unwrap(); bus.on(EventType::Stop, move |bus, _| {
*statusclosure2.borrowmut() = Status::Stopped;
})
.unwrap(); bus.emit(EventType::Start).expect("Failed to emit"); asserteq!(*status.borrow(), Status::Started);
asserteq!(bus.event_count(), 1); bus.emit(EventType::Stop).expect("Failed to emit"); asserteq!(*status.borrow(), Status::Stopped);
asserteq!(bus.event_count(), 2);
``` ```rust
use tram::{prelude::*, sync::EventBus};
use std::sync::{Arc, Mutex}; enum EventType {
Start,
Stop,
} enum Status {
Stopped,
Started,
} let bus: EventBus let status = Arc::new(Mutex::new(Status::Stopped));
let final_status = Arc::clone(&status); let t1 = std::thread::spawn(move || {
bus.on(EventType::Start, move |bus, _| {
let mut statuslock = status.lock().unwrap();
*status_lock = Status::Started;
}).unwrap();
}); let t2 = std::thread::spawn(move || {
bus_clone.emit(EventType::Start).unwrap();
}); t1.join().unwrap();
t2.join().unwrap(); let finalstatuslock = finalstatus.lock().unwrap();
asserteq!(*finalstatuslock, Status::Started)
``` ```rust
use tram::{prelude::*, unsync::EventBus};
use std::{rc::Rc, cell::RefCell}; enum EventType {
Start,
Stop,
} enum Status {
Stopped,
Started,
} let bus: EventBus bus.on(EventType::Start, move |bus, startupdata| {
status_closure.borrow_mut() = Some(startup_data.unwrap());
})
.unwrap(); bus.emitwithvalue(EventType::Start, Some(&123)).expect("Failed to emit"); asserteq!(*status.borrow(), Some(123));
asserteq!(bus.event_count(), 1);
```Using it in threads
[derive(PartialEq, Eq, Hash)]
[derive(Debug, PartialEq)]
Passing data to events
[derive(PartialEq, Eq, Hash)]
[derive(Debug, PartialEq)]