naia-server 0.24.0

A server that uses either UDP or WebRTC communication to send/receive messages to/from connected clients, and syncs registered Entities/Components to clients to whom they are in-scope.
Documentation
use std::{collections::HashMap, net::SocketAddr};

use naia_shared::{MutChannelType, MutReceiver};

pub struct MutChannelData {
    receiver_map: HashMap<SocketAddr, MutReceiver>,
    diff_mask_length: u8,
}

impl MutChannelData {
    pub fn new(diff_mask_length: u8) -> Self {
        Self {
            receiver_map: HashMap::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(receiver) = self.receiver_map.get(&address) {
            Some(receiver.clone())
        } else {
            let receiver = MutReceiver::new(self.diff_mask_length);
            self.receiver_map.insert(address, receiver.clone());

            Some(receiver)
        }
    }

    fn send(&self, diff: u8) {
        for (_, receiver) in self.receiver_map.iter() {
            receiver.mutate(diff);
        }
    }
}