use std::{collections::HashMap, net::SocketAddr};
use naia_shared::{MutChannelType, MutReceiver};
pub struct MutChannelData {
receiver_index: HashMap<SocketAddr, usize>,
receivers: Vec<MutReceiver>,
diff_mask_length: u8,
}
impl MutChannelData {
pub fn new(diff_mask_length: u8) -> Self {
Self {
receiver_index: HashMap::new(),
receivers: Vec::new(),
diff_mask_length,
}
}
}
impl MutChannelType for MutChannelData {
fn new_receiver(&mut self, address_opt: &Option<SocketAddr>) -> Option<MutReceiver> {
let address = address_opt.expect("cannot initialize receiver without address");
if let Some(&idx) = self.receiver_index.get(&address) {
return Some(self.receivers[idx].clone());
}
let receiver = MutReceiver::new(self.diff_mask_length);
let idx = self.receivers.len();
self.receivers.push(receiver.clone());
self.receiver_index.insert(address, idx);
Some(receiver)
}
fn send(&self, property_index: u8) {
for receiver in &self.receivers {
receiver.mutate(property_index);
}
}
}