naia_shared/messages/channels/receivers/
channel_receiver.rs

1use naia_serde::{BitReader, SerdeErr};
2use naia_socket_shared::Instant;
3
4use crate::messages::channels::senders::request_sender::LocalRequestId;
5use crate::{
6    messages::{message_container::MessageContainer, message_kinds::MessageKinds},
7    world::remote::entity_waitlist::EntityWaitlist,
8    LocalEntityAndGlobalEntityConverter, LocalResponseId,
9};
10
11pub trait ChannelReceiver<P>: Send + Sync {
12    /// Read messages from an internal buffer and return their content
13    fn receive_messages(
14        &mut self,
15        message_kinds: &MessageKinds,
16        now: &Instant,
17        entity_waitlist: &mut EntityWaitlist,
18        converter: &dyn LocalEntityAndGlobalEntityConverter,
19    ) -> Vec<P>;
20}
21
22pub trait MessageChannelReceiver: ChannelReceiver<MessageContainer> {
23    /// Read messages from raw bits, parse them and store then into an internal buffer
24    fn read_messages(
25        &mut self,
26        message_kinds: &MessageKinds,
27        entity_waitlist: &mut EntityWaitlist,
28        converter: &dyn LocalEntityAndGlobalEntityConverter,
29        reader: &mut BitReader,
30    ) -> Result<(), SerdeErr>;
31
32    fn receive_requests_and_responses(
33        &mut self,
34    ) -> (
35        Vec<(LocalResponseId, MessageContainer)>,
36        Vec<(LocalRequestId, MessageContainer)>,
37    );
38}