ask name fix and some refactor

This commit is contained in:
MeexReay 2025-04-19 01:24:07 +03:00
parent 5c1f8f0cae
commit 94680c95e1
2 changed files with 17 additions and 15 deletions

View File

@ -1,11 +1,13 @@
use std::sync::{atomic::{AtomicUsize, Ordering}, mpsc::Sender, Arc, RwLock}; use std::sync::{atomic::{AtomicUsize, Ordering}, mpsc::Sender, Arc, RwLock};
use rand::random;
use super::config::Config; use super::config::Config;
pub struct Context { pub struct Context {
pub registered: Arc<RwLock<Option<String>>>, pub registered: RwLock<Option<String>>,
pub config: Arc<RwLock<Config>>, pub config: RwLock<Config>,
pub sender: Arc<RwLock<Option<Arc<Sender<String>>>>>, pub sender: RwLock<Option<Arc<Sender<String>>>>,
pub messages: RwLock<Vec<String>>, pub messages: RwLock<Vec<String>>,
pub packet_size: AtomicUsize, pub packet_size: AtomicUsize,
pub name: String pub name: String
@ -14,12 +16,12 @@ pub struct Context {
impl Context { impl Context {
pub fn new(config: &Config) -> Context { pub fn new(config: &Config) -> Context {
Context { Context {
registered: Arc::new(RwLock::new(None)), registered: RwLock::new(None),
config: Arc::new(RwLock::new(config.clone())), config: RwLock::new(config.clone()),
sender: Arc::new(RwLock::new(None)), sender: RwLock::new(None),
messages: RwLock::new(Vec::new()), messages: RwLock::new(Vec::new()),
packet_size: AtomicUsize::default(), packet_size: AtomicUsize::default(),
name: config.name.clone().expect("not implemented"), // TODO: ask for name name: config.name.clone().unwrap_or_else(|| format!("Anon#{:X}", random::<u16>())),
} }
} }
@ -35,7 +37,7 @@ impl Context {
self.messages.read().unwrap().clone() self.messages.read().unwrap().clone()
} }
pub fn update(&self, max_length: usize, messages: Vec<String>, packet_size: usize) { pub fn put_messages_packet(&self, max_length: usize, messages: Vec<String>, packet_size: usize) {
self.packet_size.store(packet_size, Ordering::SeqCst); self.packet_size.store(packet_size, Ordering::SeqCst);
let mut messages = messages; let mut messages = messages;
if messages.len() > max_length { if messages.len() > max_length {
@ -44,12 +46,12 @@ impl Context {
*self.messages.write().unwrap() = messages; *self.messages.write().unwrap() = messages;
} }
pub fn append_and_store(&self, max_length: usize, messages: Vec<String>, packet_size: usize) { pub fn add_messages_packet(&self, max_length: usize, messages: Vec<String>, packet_size: usize) {
self.packet_size.store(packet_size, Ordering::SeqCst); self.packet_size.store(packet_size, Ordering::SeqCst);
self.append(max_length, messages); self.add_message(max_length, messages);
} }
pub fn append(&self, max_length: usize, messages: Vec<String>) { pub fn add_message(&self, max_length: usize, messages: Vec<String>) {
self.messages.write().unwrap().append(&mut messages.clone()); self.messages.write().unwrap().append(&mut messages.clone());
if self.messages.read().unwrap().len() > max_length { if self.messages.read().unwrap().len() > max_length {
self.messages.write().unwrap().drain(max_length..); self.messages.write().unwrap().drain(max_length..);

View File

@ -35,7 +35,7 @@ pub fn add_chat_message(ctx: Arc<Context>, message: String) {
} }
pub fn print_message(ctx: Arc<Context>, message: String) -> Result<(), Box<dyn Error>> { pub fn print_message(ctx: Arc<Context>, message: String) -> Result<(), Box<dyn Error>> {
ctx.append(ctx.config(|o| o.max_messages), vec![message.clone()]); ctx.add_message(ctx.config(|o| o.max_messages), vec![message.clone()]);
add_chat_message(ctx.clone(), message); add_chat_message(ctx.clone(), message);
Ok(()) Ok(())
} }
@ -50,12 +50,12 @@ pub fn recv_tick(ctx: Arc<Context>) -> Result<(), Box<dyn Error>> {
) { ) {
Ok(Some((messages, size))) => { Ok(Some((messages, size))) => {
if ctx.config(|o| o.chunked_enabled) { if ctx.config(|o| o.chunked_enabled) {
ctx.append_and_store(ctx.config(|o| o.max_messages), messages.clone(), size); ctx.add_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size);
for msg in messages { for msg in messages {
add_chat_message(ctx.clone(), msg.clone()); add_chat_message(ctx.clone(), msg.clone());
} }
} else { } else {
ctx.update(ctx.config(|o| o.max_messages), messages.clone(), size); ctx.put_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size);
for msg in messages { for msg in messages {
add_chat_message(ctx.clone(), msg.clone()); add_chat_message(ctx.clone(), msg.clone());
} }
@ -63,7 +63,7 @@ pub fn recv_tick(ctx: Arc<Context>) -> Result<(), Box<dyn Error>> {
}, },
Err(e) => { Err(e) => {
let msg = format!("Read messages error: {}", e.to_string()).to_string(); let msg = format!("Read messages error: {}", e.to_string()).to_string();
ctx.append(ctx.config(|o| o.max_messages), vec![msg.clone()]); ctx.add_message(ctx.config(|o| o.max_messages), vec![msg.clone()]);
add_chat_message(ctx.clone(), msg.clone()); add_chat_message(ctx.clone(), msg.clone());
} }
_ => {} _ => {}