zero_trust_rps/common/client/connection/
read.rs

1use thiserror::Error;
2
3use crate::common::connection::{GetNextMessageError, Reader};
4use crate::common::message::RoomState;
5use crate::common::message::ServerMessage;
6
7use super::super::channel::{AsyncChannelSender, SendError};
8
9#[derive(Debug)]
10pub enum SimplifiedServerMessage {
11    NewRoomState(RoomState),
12    Pong(u8),
13    #[allow(unused)]
14    Error(String),
15}
16
17#[derive(Error, Debug)]
18pub enum ReadMessagesError {
19    #[error("{}", .0)]
20    ReadingFailed(#[from] GetNextMessageError),
21    #[error("{}", .0)]
22    SendError(#[from] SendError),
23    #[error("Got unexpected {} from server", .0)]
24    UnexpectedServerMessage(&'static str),
25}
26
27pub async fn read_server_messages(
28    mut conn: impl Reader,
29    sender: impl AsyncChannelSender<SimplifiedServerMessage>,
30) -> Result<(), ReadMessagesError> {
31    use crate::common::message::ServerMessage::*;
32    log::debug!(
33        "read_server_messages on thread {:?}",
34        std::thread::current().id()
35    );
36    while let Some(msg) = conn.get_next_message::<ServerMessage>().await? {
37        log::debug!("Thread {:?} recieved: {msg:?}", std::thread::current().id());
38        match msg {
39            Hello(_, _, _) => return Err(ReadMessagesError::UnexpectedServerMessage("hello")),
40            // Ping { s } => tcp_sender.send(ClientMessage::Pong { s }).await?,
41            Pong { c } => sender.send(SimplifiedServerMessage::Pong(c)).await?,
42            RoomUpdate { new_state } => {
43                sender
44                    .send(SimplifiedServerMessage::NewRoomState(new_state))
45                    .await?
46            }
47            Error(string) => sender.send(SimplifiedServerMessage::Error(string)).await?,
48        }
49    }
50
51    Ok(())
52}