rmux-server 0.9.0

Tokio daemon and request dispatcher for the RMUX terminal multiplexer.
Documentation
#[derive(Debug, Clone, Copy)]
pub(super) struct ControlCommandFrame {
    pub(super) number: u64,
    pub(super) guard_flag: u8,
}

#[derive(Debug)]
pub(super) struct ControlCommandNumbering {
    next_number: u64,
    initial_frames_remaining: usize,
}

impl ControlCommandNumbering {
    pub(super) fn after_initial_ack() -> Self {
        Self {
            next_number: 2,
            initial_frames_remaining: 0,
        }
    }

    pub(super) fn with_initial_commands(command_count: usize) -> Self {
        Self {
            next_number: 1,
            initial_frames_remaining: command_count,
        }
    }

    pub(super) fn next_frame(&mut self) -> ControlCommandFrame {
        let number = self.next_number;
        self.next_number = self.next_number.saturating_add(1);
        let guard_flag = if self.initial_frames_remaining == 0 {
            1
        } else {
            self.initial_frames_remaining = self.initial_frames_remaining.saturating_sub(1);
            0
        };
        ControlCommandFrame { number, guard_flag }
    }
}