51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
|
|
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),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|