feat: ✨ chat max limit
This commit is contained in:
parent
62cf6e6232
commit
0d12e3f420
3 changed files with 12 additions and 9 deletions
13
src/chat.rs
13
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<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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue