diff --git a/harsh-server/src/gateway.rs b/harsh-server/src/gateway.rs index d78f5a4..7a62ef4 100644 --- a/harsh-server/src/gateway.rs +++ b/harsh-server/src/gateway.rs @@ -42,40 +42,21 @@ impl GatewayProc { } ClientRequest::MessageList(client::MessageList { channel_id }) => { - let (cmd, rec) = StorageCmd::new_message_list(channel_id.into()); - self.storage.send(cmd).unwrap(); - let messages = rec.await.unwrap().iter().map(Id::to_u64).collect(); - let request = ServerRequest::new_message_list(channel_id, messages); - let command = SessionCmd::new_send(address, request); - self.sessions.send(command).unwrap(); + self.on_message_list(channel_id, address).await; } ClientRequest::MessageCreate(client::MessageCreate { channel_id, content, }) => { - let (cmd, rec) = StorageCmd::new_message_create(channel_id.into(), content.clone()); - self.storage.send(cmd).unwrap(); - let id = rec.await.unwrap(); - let request = ServerRequest::new_message_create(channel_id, id.to_u64(), content); - let command = SessionCmd::new_broadcast(request); - self.sessions.send(command).unwrap(); + self.on_message_create(channel_id, content).await; } ClientRequest::MessageDelete(client::MessageDelete { id, channel_id }) => { - let command = StorageCmd::new_message_delete(channel_id.into(), id.into()); - self.storage.send(command).unwrap(); - let request = ServerRequest::new_message_delete(channel_id, id); - let command = SessionCmd::new_broadcast(request); - self.sessions.send(command).unwrap(); + self.on_message_delete(channel_id, id); } ClientRequest::MessageGetContent(client::MessageGetContent { id, channel_id }) => { - let (cmd, rec) = StorageCmd::new_message_get_content(channel_id.into(), id.into()); - self.storage.send(cmd).unwrap(); - let request = - ServerRequest::new_message_get_content(channel_id, id, rec.await.unwrap()); - let command = SessionCmd::new_send(address, request); - self.sessions.send(command).unwrap(); + self.on_message_get_content(channel_id, id, address).await; } ClientRequest::MessageSetContent(client::MessageSetContent { @@ -83,15 +64,7 @@ impl GatewayProc { id, channel_id, }) => { - let command = StorageCmd::new_message_set_content( - channel_id.into(), - id.into(), - content.clone(), - ); - self.storage.send(command).unwrap(); - let request = ServerRequest::new_message_set_content(channel_id, id, content); - let command = SessionCmd::new_broadcast(request); - self.sessions.send(command).unwrap(); + self.on_message_set_content(channel_id, id, content); } } } @@ -149,6 +122,49 @@ impl GatewayProc { let command = SessionCmd::new_broadcast(request); self.sessions.send(command).unwrap(); } + + async fn on_message_list(&mut self, channel_id: u64, address: Addr) { + let (cmd, rec) = StorageCmd::new_message_list(channel_id.into()); + self.storage.send(cmd).unwrap(); + let messages = rec.await.unwrap().iter().map(Id::to_u64).collect(); + let request = ServerRequest::new_message_list(channel_id, messages); + let command = SessionCmd::new_send(address, request); + self.sessions.send(command).unwrap(); + } + + async fn on_message_create(&mut self, channel_id: u64, content: String) { + let (cmd, rec) = StorageCmd::new_message_create(channel_id.into(), content.clone()); + self.storage.send(cmd).unwrap(); + let id = rec.await.unwrap(); + let request = ServerRequest::new_message_create(channel_id, id.to_u64(), content); + let command = SessionCmd::new_broadcast(request); + self.sessions.send(command).unwrap(); + } + + fn on_message_delete(&mut self, channel_id: u64, id: u64) { + let command = StorageCmd::new_message_delete(channel_id.into(), id.into()); + self.storage.send(command).unwrap(); + let request = ServerRequest::new_message_delete(channel_id, id); + let command = SessionCmd::new_broadcast(request); + self.sessions.send(command).unwrap(); + } + + async fn on_message_get_content(&mut self, channel_id: u64, id: u64, address: Addr) { + let (cmd, rec) = StorageCmd::new_message_get_content(channel_id.into(), id.into()); + self.storage.send(cmd).unwrap(); + let request = ServerRequest::new_message_get_content(channel_id, id, rec.await.unwrap()); + let command = SessionCmd::new_send(address, request); + self.sessions.send(command).unwrap(); + } + + fn on_message_set_content(&mut self, channel_id: u64, id: u64, content: String) { + let command = + StorageCmd::new_message_set_content(channel_id.into(), id.into(), content.clone()); + self.storage.send(command).unwrap(); + let request = ServerRequest::new_message_set_content(channel_id, id, content); + let command = SessionCmd::new_broadcast(request); + self.sessions.send(command).unwrap(); + } } #[telecomande::async_trait] diff --git a/harsh-server/src/sessions.rs b/harsh-server/src/sessions.rs index a52955e..9b9158a 100644 --- a/harsh-server/src/sessions.rs +++ b/harsh-server/src/sessions.rs @@ -95,12 +95,8 @@ async fn session(address: Addr, reader: OwnedReadHalf, remote: Remote { - eprintln!("[session/error] {error}"); - } - Ok(0) => { - break; - } + Err(error) => eprintln!("[session/error] {error}"), + Ok(0) => break, _ => (), } remote diff --git a/harsh-server/src/storage.rs b/harsh-server/src/storage.rs index 4bb68e2..da29f34 100644 --- a/harsh-server/src/storage.rs +++ b/harsh-server/src/storage.rs @@ -135,7 +135,7 @@ impl StorageProc { StorageCmd::ChannelSetName(id, name) => { self.on_channel_set_name(id, name); } - // ChannelGetParent + // ChannelGetParent / Set // StorageCmd::MessageList(channel_id, sender) => { @@ -156,36 +156,6 @@ impl StorageProc { }; } - fn on_message_set_content(&mut self, channel_id: Id, id: Id, content: String) { - let path = format!("/messages/{channel_id}/{id}"); - if let Some(mut message) = self.get::<_, Message>(&path) { - message.set_content(content); - self.set(path, message); - } - } - - fn on_message_get_content(&mut self, channel_id: Id, id: Id, sender: Sender>) { - let message = self.get::<_, Message>(format!("/messages/{channel_id}/{id}")); - let content = message.map(|m| m.get_content().to_string()); - sender.send(content).unwrap() - } - - fn on_message_delete(&mut self, channel_id: Id, id: Id) { - self.remove(format!("/messages/{channel_id}/{id}")); - } - - fn on_message_create(&mut self, channel_id: Id, content: String, sender: Sender) { - let message = Message::new(content); - let id = message.get_id(); - self.set(format!("/messages/{channel_id}/{id}"), message); - sender.send(id).unwrap(); - } - - fn on_message_list(&mut self, channel_id: Id, sender: Sender>) { - let items = self.list(format!("/messages/{channel_id}/")); - sender.send(items).unwrap(); - } - // // Channels // @@ -222,6 +192,36 @@ impl StorageProc { // // Messages // + + fn on_message_list(&mut self, channel_id: Id, sender: Sender>) { + let items = self.list(format!("/messages/{channel_id}/")); + sender.send(items).unwrap(); + } + + fn on_message_create(&mut self, channel_id: Id, content: String, sender: Sender) { + let message = Message::new(content); + let id = message.get_id(); + self.set(format!("/messages/{channel_id}/{id}"), message); + sender.send(id).unwrap(); + } + + fn on_message_delete(&mut self, channel_id: Id, id: Id) { + self.remove(format!("/messages/{channel_id}/{id}")); + } + + fn on_message_get_content(&mut self, channel_id: Id, id: Id, sender: Sender>) { + let message = self.get::<_, Message>(format!("/messages/{channel_id}/{id}")); + let content = message.map(|m| m.get_content().to_string()); + sender.send(content).unwrap() + } + + fn on_message_set_content(&mut self, channel_id: Id, id: Id, content: String) { + let path = format!("/messages/{channel_id}/{id}"); + if let Some(mut message) = self.get::<_, Message>(&path) { + message.set_content(content); + self.set(path, message); + } + } } #[telecomande::async_trait]