30 lines
744 B
Rust
30 lines
744 B
Rust
//! In-memory message broker. Phase 3 replaces this with a sqlite-backed store.
|
|
|
|
use std::collections::{HashMap, VecDeque};
|
|
use std::sync::Mutex;
|
|
|
|
use hive_sh4re::Message;
|
|
|
|
#[derive(Default)]
|
|
pub struct Broker {
|
|
queues: Mutex<HashMap<String, VecDeque<Message>>>,
|
|
}
|
|
|
|
impl Broker {
|
|
pub fn new() -> Self {
|
|
Self::default()
|
|
}
|
|
|
|
pub fn send(&self, message: Message) {
|
|
let mut queues = self.queues.lock().unwrap();
|
|
queues
|
|
.entry(message.to.clone())
|
|
.or_default()
|
|
.push_back(message);
|
|
}
|
|
|
|
pub fn recv(&self, recipient: &str) -> Option<Message> {
|
|
let mut queues = self.queues.lock().unwrap();
|
|
queues.get_mut(recipient).and_then(|q| q.pop_front())
|
|
}
|
|
}
|