mc_headless_auth 0.1.0

Headless Minecraft Server Authentication
Documentation
use std::sync::{Arc, Mutex};

use crossbeam::channel::{Receiver, Sender, bounded};

use crate::channel_message::ChannelMessage;

#[derive(Debug, Clone)]
pub(crate) struct Broadcast {
    subs: Arc<Mutex<Vec<Sender<Arc<ChannelMessage>>>>>,
}

impl Broadcast {
    pub fn new() -> Self {
        Self {
            subs: Arc::new(Mutex::new(Vec::new())),
        }
    }

    pub fn sub(&self, cap: usize) -> Receiver<Arc<ChannelMessage>> {
        let (s, r) = bounded(cap);
        self.subs.lock().unwrap().push(s);
        r
    }

    pub fn send(&self, msg: ChannelMessage) {
        let msg = Arc::new(msg);

        let mut subs = self.subs.lock().unwrap();
        subs.retain(|s| s.send(msg.clone()).is_ok());
    }
}