use crate::{
error::NaiaClientSocketError, packet_receiver::PacketReceiver, server_addr::ServerAddr,
};
use super::shared::{ERROR_QUEUE, MESSAGE_QUEUE, SERVER_ADDR};
#[derive(Clone)]
pub struct PacketReceiverImpl {
last_payload: Option<Box<[u8]>>,
}
impl PacketReceiverImpl {
pub fn new() -> Self {
PacketReceiverImpl { last_payload: None }
}
}
impl PacketReceiver for PacketReceiverImpl {
fn receive(&mut self) -> Result<Option<&[u8]>, NaiaClientSocketError> {
unsafe {
if let Some(msg_queue) = &mut MESSAGE_QUEUE {
if let Some(message) = msg_queue.pop_front() {
self.last_payload = Some(message);
return Ok(Some(self.last_payload.as_ref().unwrap()));
}
}
if let Some(error_queue) = &mut ERROR_QUEUE {
if let Some(error) = error_queue.pop_front() {
return Err(NaiaClientSocketError::Message(error));
}
}
};
Ok(None)
}
fn server_addr(&self) -> ServerAddr {
unsafe { SERVER_ADDR }
}
}