hive-c0re: in-memory broker + per-agent sockets + coordinator state
This commit is contained in:
parent
4545c08908
commit
d79b5a39a1
6 changed files with 220 additions and 9 deletions
30
hive-c0re/src/broker.rs
Normal file
30
hive-c0re/src/broker.rs
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
//! 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())
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue