Skip to content

Commit 46e95e2

Browse files
committed
Refactor RoomError for server
1 parent 400050b commit 46e95e2

File tree

2 files changed

+14
-31
lines changed

2 files changed

+14
-31
lines changed

chatty-tcp/src/listen/command.rs

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,14 @@ pub enum RoomError {
1717
#[error("IO error is: {0}")]
1818
Io(#[from] std::io::Error),
1919

20-
#[error("IO error is: {0}")]
21-
IoAnyhow(#[from] anyhow::Error),
22-
2320
#[error("Json parse error is: {0}")]
2421
JsonParse(#[from] serde_json::Error),
2522

26-
#[error("Lock error is: {0}")]
27-
Lock(String),
23+
#[error("Broadcast receive error is: {0}")]
24+
BroadcastReceive(String),
2825

29-
#[error("Broadcast error is: {0}")]
30-
Broadcast(String),
31-
32-
#[error("Join error is: {0}")]
33-
JoinError(#[from] tokio::task::JoinError),
26+
#[error("Broadcast send error: {0}")]
27+
BroadcastSend(#[from] tokio::sync::broadcast::error::SendError<ChatResponse>),
3428
}
3529
pub async fn process_command(
3630
writer_half: OwnedWriteHalf,
@@ -100,7 +94,7 @@ pub async fn process_command(
10094
send_to_broadcast_channel(chat_response, room_state.clone()).await?;
10195
}
10296
ChatCommand::Leave(username) => {
103-
remove_username(username.clone(), room_state.clone()).await?;
97+
remove_username(username.clone(), room_state.clone()).await;
10498
debug!("User {} has left", username);
10599
if let Some(handle) = room_state.task_handles.lock().await.remove(&username) {
106100
info!("Aborting background task for user: {}", username);
@@ -122,18 +116,13 @@ pub async fn process_command(
122116
Ok(())
123117
}
124118

125-
pub async fn remove_username(
126-
username: String,
127-
room_state: Arc<RoomState>,
128-
) -> Result<(), RoomError> {
119+
pub async fn remove_username(username: String, room_state: Arc<RoomState>) {
129120
let mut users = room_state.user_set.lock().await;
130121
users.remove(&username);
131122
info!("User {} removed from room", username);
132123
// list connected users
133124
let users: Vec<String> = users.iter().cloned().collect();
134125
info!("Users in room after removal: {:?}", users);
135-
136-
Ok(())
137126
}
138127

139128
#[cfg(test)]
@@ -156,8 +145,7 @@ mod tests {
156145
});
157146

158147
// Execute removal
159-
let result = remove_username("test_user".to_string(), room_state.clone()).await;
160-
assert!(result.is_ok());
148+
remove_username("test_user".to_string(), room_state.clone()).await;
161149

162150
// Verify user was removed
163151
let users = room_state.user_set.lock().await;

chatty-tcp/src/listen/response.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::listen::command::RoomError;
22
use crate::listen::state::RoomState;
3-
use anyhow::{Context, Result};
3+
use anyhow::Result;
44
use broadcast::error::RecvError;
55
use chatty_types::response::ChatResponse;
66
use std::sync::Arc;
@@ -12,7 +12,7 @@ use tracing::{debug, info};
1212
pub async fn send_to_broadcast_channel(
1313
chat_response: ChatResponse,
1414
room_state: Arc<RoomState>,
15-
) -> Result<()> {
15+
) -> Result<(), RoomError> {
1616
// send the chat_response to the broadcast channel
1717
let _ = room_state.tx.send(chat_response)?;
1818

@@ -32,7 +32,7 @@ pub async fn send_from_broadcast_channel_task(
3232
recv_chat_response
3333
);
3434
let ChatResponse::Broadcast(recv_memo) = recv_chat_response.clone() else {
35-
return Err(RoomError::Broadcast(
35+
return Err(RoomError::BroadcastReceive(
3636
"Failed to get memo from received chat response".to_string(),
3737
));
3838
};
@@ -69,17 +69,12 @@ pub async fn send_from_broadcast_channel_task(
6969
pub async fn send_response(
7070
chat_response: ChatResponse,
7171
writer: Arc<Mutex<OwnedWriteHalf>>,
72-
) -> Result<()> {
72+
) -> Result<(), RoomError> {
7373
let serialized = serde_json::to_string(&chat_response)?;
7474
let mut writer = writer.lock().await;
75-
writer
76-
.write_all(serialized.as_bytes())
77-
.await
78-
.context(format!("Failed to send response {:?}", chat_response))?;
79-
writer
80-
.write_all(b"\n")
81-
.await
82-
.context("Failed to send newline for framing")?; // Add newline for framing
75+
writer.write_all(serialized.as_bytes()).await?;
76+
77+
writer.write_all(b"\n").await?;
8378
Ok(())
8479
}
8580

0 commit comments

Comments
 (0)