feat: chat max limit

This commit is contained in:
Ahmet Kaan GÜMÜŞ 2024-05-26 18:51:17 +03:00
parent 62cf6e6232
commit 0d12e3f420
3 changed files with 12 additions and 9 deletions

View file

@ -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<Message>,
pub messages: VecDeque<Message>,
}
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

View file

@ -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<Mutex<Vec<Chat>>>,
pub max_message_counter: u64,
pub max_message_counter: u16,
}
impl AppState {

View file

@ -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);
}