refactored

This commit is contained in:
mb 2022-08-22 16:02:40 +03:00
parent 695ac6daa2
commit 4588a50d75
3 changed files with 81 additions and 69 deletions

View file

@ -42,40 +42,21 @@ impl GatewayProc {
} }
ClientRequest::MessageList(client::MessageList { channel_id }) => { ClientRequest::MessageList(client::MessageList { channel_id }) => {
let (cmd, rec) = StorageCmd::new_message_list(channel_id.into()); self.on_message_list(channel_id, address).await;
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();
} }
ClientRequest::MessageCreate(client::MessageCreate { ClientRequest::MessageCreate(client::MessageCreate {
channel_id, channel_id,
content, content,
}) => { }) => {
let (cmd, rec) = StorageCmd::new_message_create(channel_id.into(), content.clone()); self.on_message_create(channel_id, content).await;
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();
} }
ClientRequest::MessageDelete(client::MessageDelete { id, channel_id }) => { ClientRequest::MessageDelete(client::MessageDelete { id, channel_id }) => {
let command = StorageCmd::new_message_delete(channel_id.into(), id.into()); self.on_message_delete(channel_id, id);
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();
} }
ClientRequest::MessageGetContent(client::MessageGetContent { id, channel_id }) => { ClientRequest::MessageGetContent(client::MessageGetContent { id, channel_id }) => {
let (cmd, rec) = StorageCmd::new_message_get_content(channel_id.into(), id.into()); self.on_message_get_content(channel_id, id, address).await;
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();
} }
ClientRequest::MessageSetContent(client::MessageSetContent { ClientRequest::MessageSetContent(client::MessageSetContent {
@ -83,15 +64,7 @@ impl GatewayProc {
id, id,
channel_id, channel_id,
}) => { }) => {
let command = StorageCmd::new_message_set_content( self.on_message_set_content(channel_id, id, 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();
} }
} }
} }
@ -149,6 +122,49 @@ impl GatewayProc {
let command = SessionCmd::new_broadcast(request); let command = SessionCmd::new_broadcast(request);
self.sessions.send(command).unwrap(); 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] #[telecomande::async_trait]

View file

@ -95,12 +95,8 @@ async fn session(address: Addr, reader: OwnedReadHalf, remote: Remote<gateway::G
loop { loop {
let mut line = String::new(); let mut line = String::new();
match reader.read_line(&mut line).await { match reader.read_line(&mut line).await {
Err(error) => { Err(error) => eprintln!("[session/error] {error}"),
eprintln!("[session/error] {error}"); Ok(0) => break,
}
Ok(0) => {
break;
}
_ => (), _ => (),
} }
remote remote

View file

@ -135,7 +135,7 @@ impl StorageProc {
StorageCmd::ChannelSetName(id, name) => { StorageCmd::ChannelSetName(id, name) => {
self.on_channel_set_name(id, name); self.on_channel_set_name(id, name);
} }
// ChannelGetParent // ChannelGetParent / Set
// //
StorageCmd::MessageList(channel_id, sender) => { 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<Option<String>>) {
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<Id>) {
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<Vec<Id>>) {
let items = self.list(format!("/messages/{channel_id}/"));
sender.send(items).unwrap();
}
// //
// Channels // Channels
// //
@ -222,6 +192,36 @@ impl StorageProc {
// //
// Messages // Messages
// //
fn on_message_list(&mut self, channel_id: Id, sender: Sender<Vec<Id>>) {
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<Id>) {
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<Option<String>>) {
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] #[telecomande::async_trait]