use super::kcp::Kcp;
use std::time::Duration;
#[derive(Debug, Clone, Copy)]
pub struct KcpNoDelayConfig {
pub nodelay: bool,
pub interval: i32,
pub resend: i32,
pub nc: bool,
}
impl Default for KcpNoDelayConfig {
fn default() -> KcpNoDelayConfig {
KcpNoDelayConfig {
nodelay: false,
interval: 100,
resend: 0,
nc: false,
}
}
}
impl KcpNoDelayConfig {
pub fn fastest() -> KcpNoDelayConfig {
KcpNoDelayConfig {
nodelay: true,
interval: 10,
resend: 2,
nc: true,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct KcpConfig {
pub mtu: Option<usize>,
pub interval: Option<u32>,
pub nodelay: Option<KcpNoDelayConfig>,
pub wnd_size: Option<(u16, u16)>,
pub rx_minrto: Option<u32>,
pub session_expire: Option<Duration>,
pub fast_resend: Option<u32>,
pub flush_write: bool,
pub flush_acks_input: bool,
pub stream: bool,
}
impl Default for KcpConfig {
fn default() -> KcpConfig {
KcpConfig {
mtu: None,
interval: None,
nodelay: None,
wnd_size: None,
rx_minrto: Some(10),
session_expire: None,
fast_resend: None,
flush_write: true,
flush_acks_input: true,
stream: true,
}
}
}
impl KcpConfig {
#[doc(hidden)]
pub fn apply_config(&self, k: &mut Kcp) {
if let Some(mtu) = self.mtu {
k.set_mtu(mtu).expect("Invalid MTU");
}
if let Some(interval) = self.interval {
k.set_interval(interval);
}
if let Some(ref nodelay) = self.nodelay {
k.set_nodelay(
nodelay.nodelay,
nodelay.interval,
nodelay.resend,
nodelay.nc,
);
}
if let Some(rm) = self.rx_minrto {
k.set_rx_minrto(rm);
}
if let Some(ws) = self.wnd_size {
k.set_wndsize(ws.0, ws.1);
}
if let Some(fr) = self.fast_resend {
k.set_fast_resend(fr);
}
k.set_stream(self.stream)
}
}