use std::sync::mpsc::{Receiver, TryRecvError};
use std::sync::Arc;
use crate::client::Client;
use crate::image_handler::Command;
pub fn painter(
rx: &Receiver<Arc<Command>>,
mut client: Client,
painter_id: usize,
max_frame: usize,
mut current_commands: Arc<Command>,
) -> Arc<Command> {
let mut max_idx = max_frame.min(current_commands.len());
let mut frame = painter_id % max_idx;
'outer: loop {
if client.send_pixel(¤t_commands[frame]).is_err() {
break 'outer;
}
frame = (frame + 1) % max_idx;
'inner: loop {
match rx.try_recv() {
Err(TryRecvError::Empty) => break 'inner,
Ok(command) => {
current_commands = command;
max_idx = max_frame.min(current_commands.len());
frame = painter_id % max_idx;
}
Err(TryRecvError::Disconnected) => {
break 'outer;
}
}
}
}
current_commands
}