zero_trust_rps/common/client/connection/
read.rs1use 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 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}