werewolves/werewolves-server/src/communication/player.rs

51 lines
1.3 KiB
Rust
Raw Normal View History

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<IdentifiedClientMessage>,
connect_recv: tokio::sync::broadcast::Receiver<(PlayerId, bool)>,
}
impl PlayerIdComms {
pub fn new(
joined_players: JoinedPlayers,
message_recv: Receiver<IdentifiedClientMessage>,
connect_recv: tokio::sync::broadcast::Receiver<(PlayerId, bool)>,
) -> Self {
Self {
joined_players,
message_recv,
connect_recv,
}
}
pub async fn recv(&mut self) -> Result<IdentifiedClientMessage, GameError> {
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),
}
}
}