Message database and protocol fixes

This commit is contained in:
2025-12-22 14:13:34 +01:00
parent e0d4ffa09a
commit 50a9699bb2
4 changed files with 30 additions and 20 deletions
+10 -15
View File
@@ -29,21 +29,7 @@ pub fn send(
chrono::Utc::now().timestamp(),
)?;
let server = server.clone();
for c in server.clients.lock().unwrap().iter() {
let c = c.clone();
let server = server.clone();
let msg = msg.clone();
std::thread::spawn(move || {
server
.wrap_err(
&c,
c.send(types::message::ServerMessage::MessageCreate(msg)),
)
.expect("Failed to broadcast");
});
}
server.broadcast(types::message::ServerMessage::MessageCreate(msg.clone()));
server.send_plugin_message(&LoaderMessage::MessageSent {
user_id: client.get_uuid().unwrap_or_default(),
@@ -69,6 +55,12 @@ pub fn edit(
}
server.db.edit_message(message_id, new_contents)?;
server.broadcast(types::message::ServerMessage::MessageUpdate {
message_id,
contents: new_contents.to_string(),
});
Ok(())
}
@@ -83,5 +75,8 @@ pub fn delete(server: &Arc<Server>, client: &Client, message_id: i64) -> crate::
}
server.db.delete_message(message_id)?;
server.broadcast(types::message::ServerMessage::MessageDelete { message_id });
Ok(())
}
+14 -1
View File
@@ -4,7 +4,7 @@ use std::sync::Arc;
use crate::{
server::Server,
types::message::{ClientMessage, WsMessage},
types::message::{ClientMessage, ServerMessage, WsMessage},
utils::client::Client,
};
@@ -44,4 +44,17 @@ impl Server {
Ok(())
}
pub fn broadcast(self: &Arc<Self>, msg: ServerMessage) {
for c in self.clients.lock().unwrap().iter() {
let c = c.clone();
let server = self.clone();
let msg = msg.clone();
std::thread::spawn(move || {
server
.wrap_err(&c, c.send(msg))
.expect("Failed to broadcast");
});
}
}
}
+4 -2
View File
@@ -96,11 +96,13 @@ pub mod message {
MessageCreate(data::Message),
/// A message was edited
MessageUpdate(data::Message),
MessageUpdate {
message_id: i64,
contents: String,
},
/// A message was deleted
MessageDelete {
channel_id: String,
message_id: i64,
},
+2 -2
View File
@@ -62,7 +62,7 @@ impl Database {
/// Delete a message from the DB
pub fn edit_message(&self, message_id: i64, contents: &str) -> Result<()> {
self.0.execute(
"UPDATE table_name
"UPDATE chat
SET contents = ?2
WHERE id = ?1;
",
@@ -84,7 +84,7 @@ impl Database {
Ok((
row.get::<_, i64>(0)?, // id
row.get::<_, String>(1)?, // channel_id
row.get::<_, u32>(2)?, // user_id
row.get::<_, String>(2)?, // user_id
row.get::<_, String>(3)?, // contents
row.get::<_, i64>(4)?, // timestamp
))