use naia_serde::{BitReader, SerdeErr};
use naia_socket_shared::Instant;
use crate::world::local::local_world_manager::LocalWorldManager;
use crate::{
messages::{
channels::senders::request_sender::LocalRequestId, message_container::MessageContainer,
message_kinds::MessageKinds,
},
world::remote::remote_entity_waitlist::RemoteEntityWaitlist,
LocalEntityAndGlobalEntityConverter, LocalResponseId,
};
pub type RequestsAndResponses = (
Vec<(LocalResponseId, MessageContainer)>,
Vec<(LocalRequestId, MessageContainer)>,
);
pub trait ChannelReceiver<P>: Send + Sync {
fn receive_messages(
&mut self,
message_kinds: &MessageKinds,
now: &Instant,
entity_waitlist: &mut RemoteEntityWaitlist,
converter: &dyn LocalEntityAndGlobalEntityConverter,
) -> Vec<P>;
}
pub trait MessageChannelReceiver: ChannelReceiver<MessageContainer> {
fn read_messages(
&mut self,
message_kinds: &MessageKinds,
local_world_manager: &mut LocalWorldManager,
reader: &mut BitReader,
) -> Result<(), SerdeErr>;
fn receive_requests_and_responses(
&mut self,
) -> RequestsAndResponses;
}