Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/hive-c0re/src/broker.rs

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())
}
}