use core::time::Duration; use std::collections::HashMap; use colored::Colorize; use tokio::{ sync::broadcast::{Receiver, Sender}, time::Instant, }; use werewolves_proto::{ error::GameError, message::{ClientMessage, ServerMessage, Target, night::ActionResponse}, player::{Character, CharacterId, PlayerId}, }; use crate::{connection::JoinedPlayers, runner::IdentifiedClientMessage}; pub struct PlayerIdComms { joined_players: JoinedPlayers, message_recv: Receiver, connect_recv: tokio::sync::broadcast::Receiver<(PlayerId, bool)>, } impl PlayerIdComms { pub fn new( joined_players: JoinedPlayers, message_recv: Receiver, connect_recv: tokio::sync::broadcast::Receiver<(PlayerId, bool)>, ) -> Self { Self { joined_players, message_recv, connect_recv, } } pub async fn recv(&mut self) -> Result { match self .message_recv .recv() .await .map_err(|err| GameError::GenericError(err.to_string())) { Ok(msg) => { log::debug!("got message: {}", format!("{msg:?}").dimmed()); Ok(msg) } Err(err) => Err(err), } } }