Skip to main content

clankerdiff_protocol/server/
transport.rs

1use crate::{
2    client::{ClientCommand, LocalClientMessageTransport, LocalClientTransport},
3    shared::LocalEnd,
4};
5
6use super::{ServerEvent, ServerMessage};
7use async_channel::bounded;
8
9pub type LocalServerTransport = LocalEnd<ServerEvent, ClientCommand>;
10pub type LocalServerMessageTransport = LocalEnd<ServerMessage, ClientCommand>;
11
12#[must_use]
13pub fn local_transport_pair(capacity: usize) -> (LocalClientTransport, LocalServerTransport) {
14    let (commands_tx, commands_rx) = bounded(capacity.max(1));
15    let (events_tx, events_rx) = bounded(capacity.max(1));
16    (
17        LocalEnd::new(commands_tx, events_rx),
18        LocalEnd::new(events_tx, commands_rx),
19    )
20}
21
22#[must_use]
23pub fn local_message_transport_pair(
24    capacity: usize,
25) -> (LocalClientMessageTransport, LocalServerMessageTransport) {
26    let (commands_tx, commands_rx) = bounded(capacity.max(1));
27    let (messages_tx, messages_rx) = bounded(capacity.max(1));
28    (
29        LocalEnd::new(commands_tx, messages_rx),
30        LocalEnd::new(messages_tx, commands_rx),
31    )
32}