Parcourir la source

bin/ircd: update the buffer when add/send a message

ghassmo il y a 3 ans
Parent
commit
0395727e32

+ 1 - 16
Cargo.lock

@@ -77,12 +77,6 @@ version = "1.0.62"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1485d4d2cc45e7b201ee3767015c96faa5904387c9d87c6efdd0fb511f12d305"
 checksum = "1485d4d2cc45e7b201ee3767015c96faa5904387c9d87c6efdd0fb511f12d305"
 
 
-[[package]]
-name = "array-init"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfb6d71005dc22a708c7496eee5c8dc0300ee47355de6256c3b35b12b5fef596"
-
 [[package]]
 [[package]]
 name = "arrayref"
 name = "arrayref"
 version = "0.3.6"
 version = "0.3.6"
@@ -2337,6 +2331,7 @@ dependencies = [
  "async-std",
  "async-std",
  "async-trait",
  "async-trait",
  "bs58",
  "bs58",
+ "chrono",
  "clap 3.2.18",
  "clap 3.2.18",
  "crypto_box",
  "crypto_box",
  "ctrlc",
  "ctrlc",
@@ -2347,7 +2342,6 @@ dependencies = [
  "fxhash",
  "fxhash",
  "log",
  "log",
  "rand",
  "rand",
- "ringbuffer",
  "rustls-pemfile",
  "rustls-pemfile",
  "serde",
  "serde",
  "serde_json",
  "serde_json",
@@ -3357,15 +3351,6 @@ dependencies = [
  "winapi",
  "winapi",
 ]
 ]
 
 
-[[package]]
-name = "ringbuffer"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aa778d993bd10cc64483ec8c75ce3755bd48f42886943e23d6588bc0943678d"
-dependencies = [
- "array-init",
-]
-
 [[package]]
 [[package]]
 name = "rkyv"
 name = "rkyv"
 version = "0.7.39"
 version = "0.7.39"

+ 1 - 0
bin/ircd/src/buffers.rs

@@ -6,6 +6,7 @@ use chrono::Utc;
 use crate::Privmsg;
 use crate::Privmsg;
 
 
 pub const SIZE_OF_MSGS_BUFFER: usize = 4095;
 pub const SIZE_OF_MSGS_BUFFER: usize = 4095;
+pub const SIZE_OF_MSG_IDSS_BUFFER: usize = 65536;
 pub const LIFETIME_FOR_ORPHAN: i64 = 600;
 pub const LIFETIME_FOR_ORPHAN: i64 = 600;
 
 
 #[derive(Clone)]
 #[derive(Clone)]

+ 2 - 0
bin/ircd/src/crypto.rs

@@ -9,6 +9,8 @@ use crate::{
     privmsg::Privmsg,
     privmsg::Privmsg,
     settings::{ChannelInfo, ContactInfo},
     settings::{ChannelInfo, ContactInfo},
     MAXIMUM_LENGTH_OF_NICKNAME,
     MAXIMUM_LENGTH_OF_NICKNAME,
+    privmsg::{Privmsg, MAXIMUM_LENGTH_OF_NICKNAME},
+    settings::ChannelInfo,
 };
 };
 
 
 /// Try decrypting a message given a NaCl box and a base58 string.
 /// Try decrypting a message given a NaCl box and a base58 string.

+ 1 - 2
bin/ircd/src/main.rs

@@ -37,7 +37,7 @@ pub mod server;
 pub mod settings;
 pub mod settings;
 
 
 use crate::{
 use crate::{
-    buffers::{ArcPrivmsgsBuffer, PrivmsgsBuffer, RingBuffer, SeenMsgIds},
+    buffers::{ArcPrivmsgsBuffer, PrivmsgsBuffer, RingBuffer, SeenMsgIds, SIZE_OF_MSG_IDSS_BUFFER},
     privmsg::Privmsg,
     privmsg::Privmsg,
     protocol_privmsg::ProtocolPrivmsg,
     protocol_privmsg::ProtocolPrivmsg,
     rpc::JsonRpcInterface,
     rpc::JsonRpcInterface,
@@ -48,7 +48,6 @@ use crate::{
     },
     },
 };
 };
 
 
-const SIZE_OF_MSG_IDSS_BUFFER: usize = 65536;
 pub const MAXIMUM_LENGTH_OF_MESSAGE: usize = 1024;
 pub const MAXIMUM_LENGTH_OF_MESSAGE: usize = 1024;
 pub const MAXIMUM_LENGTH_OF_NICKNAME: usize = 32;
 pub const MAXIMUM_LENGTH_OF_NICKNAME: usize = 32;
 
 

+ 3 - 0
bin/ircd/src/privmsg.rs

@@ -7,6 +7,9 @@ use darkfi::util::{
 
 
 pub type PrivmsgId = u64;
 pub type PrivmsgId = u64;
 
 
+pub const MAXIMUM_LENGTH_OF_MESSAGE: usize = 1024;
+pub const MAXIMUM_LENGTH_OF_NICKNAME: usize = 32;
+
 #[derive(Debug, Clone, SerialEncodable, SerialDecodable, Eq, PartialEq)]
 #[derive(Debug, Clone, SerialEncodable, SerialDecodable, Eq, PartialEq)]
 pub struct Privmsg {
 pub struct Privmsg {
     pub id: PrivmsgId,
     pub id: PrivmsgId,

+ 13 - 12
bin/ircd/src/protocol_privmsg.rs

@@ -13,7 +13,7 @@ use crate::{
 
 
 pub struct ProtocolPrivmsg {
 pub struct ProtocolPrivmsg {
     jobsman: net::ProtocolJobsManagerPtr,
     jobsman: net::ProtocolJobsManagerPtr,
-    notify_queue_sender: async_channel::Sender<Privmsg>,
+    notify: async_channel::Sender<Privmsg>,
     msg_sub: net::MessageSubscription<Privmsg>,
     msg_sub: net::MessageSubscription<Privmsg>,
     p2p: net::P2pPtr,
     p2p: net::P2pPtr,
     msg_ids: SeenMsgIds,
     msg_ids: SeenMsgIds,
@@ -24,7 +24,7 @@ pub struct ProtocolPrivmsg {
 impl ProtocolPrivmsg {
 impl ProtocolPrivmsg {
     pub async fn init(
     pub async fn init(
         channel: net::ChannelPtr,
         channel: net::ChannelPtr,
-        notify_queue_sender: async_channel::Sender<Privmsg>,
+        notify: async_channel::Sender<Privmsg>,
         p2p: net::P2pPtr,
         p2p: net::P2pPtr,
         msg_ids: SeenMsgIds,
         msg_ids: SeenMsgIds,
         msgs: ArcPrivmsgsBuffer,
         msgs: ArcPrivmsgsBuffer,
@@ -36,7 +36,7 @@ impl ProtocolPrivmsg {
             channel.subscribe_msg::<Privmsg>().await.expect("Missing Privmsg dispatcher!");
             channel.subscribe_msg::<Privmsg>().await.expect("Missing Privmsg dispatcher!");
 
 
         Arc::new(Self {
         Arc::new(Self {
-            notify_queue_sender,
+            notify,
             msg_sub,
             msg_sub,
             jobsman: net::ProtocolJobsManager::new("ProtocolPrivmsg", channel.clone()),
             jobsman: net::ProtocolJobsManager::new("ProtocolPrivmsg", channel.clone()),
             p2p,
             p2p,
@@ -62,19 +62,20 @@ impl ProtocolPrivmsg {
             let msg = self.msg_sub.receive().await?;
             let msg = self.msg_sub.receive().await?;
             let msg = (*msg).to_owned();
             let msg = (*msg).to_owned();
 
 
-            {
-                let msg_ids = &mut self.msg_ids.lock().await;
-                if msg_ids.contains(&msg.id) {
-                    continue
-                }
-
-                msg_ids.push(msg.id);
+            let mut msg_ids = self.msg_ids.lock().await;
+            if msg_ids.contains(&msg.id) {
+                continue
             }
             }
+            msg_ids.push(msg.id);
+            drop(msg_ids);
 
 
             // add the msg to the buffer
             // add the msg to the buffer
-            self.msgs.lock().await.push(&msg);
+            let mut msgs = self.msgs.lock().await;
+            msgs.push(&msg);
+            msgs.update();
+            drop(msgs);
 
 
-            self.notify_queue_sender.send(msg.clone()).await?;
+            self.notify.send(msg.clone()).await?;
 
 
             self.p2p.broadcast_with_exclude(msg, &exclude_list).await?;
             self.p2p.broadcast_with_exclude(msg, &exclude_list).await?;
         }
         }

+ 11 - 2
bin/ircd/src/server/command.rs

@@ -3,7 +3,11 @@ use log::{debug, info, warn};
 
 
 use darkfi::{Error, Result};
 use darkfi::{Error, Result};
 
 
-use crate::{crypto::encrypt_privmsg, privmsg::Privmsg, ChannelInfo, MAXIMUM_LENGTH_OF_NICKNAME};
+use crate::{
+    crypto::encrypt_privmsg,
+    privmsg::{Privmsg, MAXIMUM_LENGTH_OF_NICKNAME},
+    ChannelInfo,
+};
 
 
 use super::IrcServerConnection;
 use super::IrcServerConnection;
 
 
@@ -206,7 +210,12 @@ impl<C: AsyncRead + AsyncWrite + Send + Unpin + 'static> IrcServerConnection<C>
 
 
         info!("(Plain) PRIVMSG {} :{}", target, message);
         info!("(Plain) PRIVMSG {} :{}", target, message);
 
 
-        let mut privmsg = Privmsg::new(&self.nickname, target, &message, 0);
+        let mut privmsgs_buffer = self.privmsgs_buffer.lock().await;
+        privmsgs_buffer.update();
+        let last_term = privmsgs_buffer.last_term();
+        drop(privmsgs_buffer);
+
+        let mut privmsg = Privmsg::new(&self.nickname, target, &message, last_term);
 
 
         if target.starts_with('#') {
         if target.starts_with('#') {
             if !self.configured_chans.contains_key(target) {
             if !self.configured_chans.contains_key(target) {

+ 2 - 1
bin/ircd/src/server/mod.rs

@@ -9,7 +9,8 @@ use darkfi::{net::P2pPtr, system::SubscriberPtr, Error, Result};
 use crate::{
 use crate::{
     buffers::{ArcPrivmsgsBuffer, SeenMsgIds},
     buffers::{ArcPrivmsgsBuffer, SeenMsgIds},
     crypto::{decrypt_privmsg, decrypt_target},
     crypto::{decrypt_privmsg, decrypt_target},
-    ChannelInfo, Privmsg, MAXIMUM_LENGTH_OF_MESSAGE,
+    privmsg::MAXIMUM_LENGTH_OF_MESSAGE,
+    ChannelInfo, Privmsg,
 };
 };
 
 
 mod command;
 mod command;