naia-server 0.25.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.
use std::sync::Arc;
use parking_lot::Mutex;

use naia_shared::transport::local::LocalTransportHub;

use super::auth::{LocalServerAuthReceiver, LocalServerAuthSender, ServerAuthIo};
use super::data::{LocalServerReceiver, LocalServerSender};

#[doc(hidden)]
pub struct LocalServerSocket {
    hub: LocalTransportHub,
}

impl LocalServerSocket {
    #[doc(hidden)]
    pub fn new(hub: LocalTransportHub) -> Self {
        Self { hub }
    }

    #[doc(hidden)]
    pub fn listen_with_auth(
        self,
    ) -> (
        LocalServerAuthSender,
        LocalServerAuthReceiver,
        LocalServerSender,
        LocalServerReceiver,
    ) {
        let hub = self.hub;

        let auth_io = Arc::new(Mutex::new(ServerAuthIo::new(hub.clone())));
        let auth_sender = LocalServerAuthSender::new(auth_io.clone());
        let auth_receiver = LocalServerAuthReceiver::new(auth_io);

        let sender = LocalServerSender::new(hub.clone());
        let receiver = LocalServerReceiver::new(hub);

        (auth_sender, auth_receiver, sender, receiver)
    }
}