From 0d12e3f420850b5f4688f190464e63fe8a41d4e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Sun, 26 May 2024 18:51:17 +0300 Subject: [PATCH] feat: :sparkles: chat max limit --- src/chat.rs | 13 ++++++++----- src/lib.rs | 4 ++-- src/routing.rs | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/chat.rs b/src/chat.rs index 3631389..3da7624 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -1,4 +1,4 @@ -use std::time::Duration; +use std::{collections::VecDeque, time::Duration}; use chrono::Utc; use serde::Serialize; @@ -14,21 +14,24 @@ pub struct Message { #[derive(Debug, Serialize)] pub struct Chat { pub room_id: String, - pub messages: Vec, + pub messages: VecDeque, } impl Chat { pub fn new(room_id: String) -> Self { Chat { room_id, - messages: vec![], + messages: vec![].into(), } } - pub fn add_message(&mut self, mut message: Message) -> bool { + pub fn add_message(&mut self, mut message: Message, max_message_count: u16) -> bool { message.calculate_hash(); if !self.is_message_exists(message.clone()) { - self.messages.push(message); + self.messages.push_back(message); + if self.messages.len() > max_message_count as usize { + let _ = self.messages.pop_front(); + } return true; } false diff --git a/src/lib.rs b/src/lib.rs index 3abb9b7..f37205a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,13 +11,13 @@ pub mod utils; pub struct ServerConfig { pub ip_address: IpAddr, pub port: u16, - pub max_message_counter: u64, + pub max_message_counter: u16, } #[derive(Debug, Clone)] pub struct AppState { pub chats: Arc>>, - pub max_message_counter: u64, + pub max_message_counter: u16, } impl AppState { diff --git a/src/routing.rs b/src/routing.rs index 0ba9f7b..1e0017e 100644 --- a/src/routing.rs +++ b/src/routing.rs @@ -47,11 +47,11 @@ async fn receive_message( match state.is_chat_exists(&room_id).await { Some(index) => { let mut chats = state.chats.lock().await; - chats[index].add_message(message); + chats[index].add_message(message, state.max_message_counter); } None => { let mut new_chat = Chat::new(room_id); - new_chat.add_message(message); + new_chat.add_message(message, state.max_message_counter); let mut chats = state.chats.lock().await; chats.push(new_chat); }