Message database and protocol fixes
This commit is contained in:
+10
-15
@@ -29,21 +29,7 @@ pub fn send(
|
|||||||
chrono::Utc::now().timestamp(),
|
chrono::Utc::now().timestamp(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let server = server.clone();
|
server.broadcast(types::message::ServerMessage::MessageCreate(msg.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.send_plugin_message(&LoaderMessage::MessageSent {
|
server.send_plugin_message(&LoaderMessage::MessageSent {
|
||||||
user_id: client.get_uuid().unwrap_or_default(),
|
user_id: client.get_uuid().unwrap_or_default(),
|
||||||
@@ -69,6 +55,12 @@ pub fn edit(
|
|||||||
}
|
}
|
||||||
|
|
||||||
server.db.edit_message(message_id, new_contents)?;
|
server.db.edit_message(message_id, new_contents)?;
|
||||||
|
|
||||||
|
server.broadcast(types::message::ServerMessage::MessageUpdate {
|
||||||
|
message_id,
|
||||||
|
contents: new_contents.to_string(),
|
||||||
|
});
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,5 +75,8 @@ pub fn delete(server: &Arc<Server>, client: &Client, message_id: i64) -> crate::
|
|||||||
}
|
}
|
||||||
|
|
||||||
server.db.delete_message(message_id)?;
|
server.db.delete_message(message_id)?;
|
||||||
|
|
||||||
|
server.broadcast(types::message::ServerMessage::MessageDelete { message_id });
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-1
@@ -4,7 +4,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
server::Server,
|
server::Server,
|
||||||
types::message::{ClientMessage, WsMessage},
|
types::message::{ClientMessage, ServerMessage, WsMessage},
|
||||||
utils::client::Client,
|
utils::client::Client,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -44,4 +44,17 @@ impl Server {
|
|||||||
|
|
||||||
Ok(())
|
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
@@ -96,11 +96,13 @@ pub mod message {
|
|||||||
MessageCreate(data::Message),
|
MessageCreate(data::Message),
|
||||||
|
|
||||||
/// A message was edited
|
/// A message was edited
|
||||||
MessageUpdate(data::Message),
|
MessageUpdate {
|
||||||
|
message_id: i64,
|
||||||
|
contents: String,
|
||||||
|
},
|
||||||
|
|
||||||
/// A message was deleted
|
/// A message was deleted
|
||||||
MessageDelete {
|
MessageDelete {
|
||||||
channel_id: String,
|
|
||||||
message_id: i64,
|
message_id: i64,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ impl Database {
|
|||||||
/// Delete a message from the DB
|
/// Delete a message from the DB
|
||||||
pub fn edit_message(&self, message_id: i64, contents: &str) -> Result<()> {
|
pub fn edit_message(&self, message_id: i64, contents: &str) -> Result<()> {
|
||||||
self.0.execute(
|
self.0.execute(
|
||||||
"UPDATE table_name
|
"UPDATE chat
|
||||||
SET contents = ?2
|
SET contents = ?2
|
||||||
WHERE id = ?1;
|
WHERE id = ?1;
|
||||||
",
|
",
|
||||||
@@ -84,7 +84,7 @@ impl Database {
|
|||||||
Ok((
|
Ok((
|
||||||
row.get::<_, i64>(0)?, // id
|
row.get::<_, i64>(0)?, // id
|
||||||
row.get::<_, String>(1)?, // channel_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::<_, String>(3)?, // contents
|
||||||
row.get::<_, i64>(4)?, // timestamp
|
row.get::<_, i64>(4)?, // timestamp
|
||||||
))
|
))
|
||||||
|
|||||||
Reference in New Issue
Block a user