use enum_dispatch::enum_dispatch;
use crate::packet::message::{MessageContainer, SingleData};
use crate::shared::tick_manager::TickManager;
use crate::shared::time_manager::TimeManager;
pub(crate) mod fragment_receiver;
pub(crate) mod ordered_reliable;
pub(crate) mod sequenced_reliable;
pub(crate) mod sequenced_unreliable;
pub(crate) mod tick_unreliable;
pub(crate) mod unordered_reliable;
pub(crate) mod unordered_unreliable;
#[enum_dispatch]
pub trait ChannelReceive {
fn update(&mut self, time_manager: &TimeManager, tick_manager: &TickManager);
fn buffer_recv(&mut self, message: MessageContainer) -> anyhow::Result<()>;
fn read_message(&mut self) -> Option<SingleData>;
}
#[enum_dispatch(ChannelReceive)]
pub enum ChannelReceiver {
UnorderedUnreliable(unordered_unreliable::UnorderedUnreliableReceiver),
SequencedUnreliable(sequenced_unreliable::SequencedUnreliableReceiver),
OrderedReliable(ordered_reliable::OrderedReliableReceiver),
SequencedReliable(sequenced_reliable::SequencedReliableReceiver),
UnorderedReliable(unordered_reliable::UnorderedReliableReceiver),
TickUnreliable(tick_unreliable::TickUnreliableReceiver),
}