Refactor
This commit is contained in:
		
							
								
								
									
										70
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								src/lib.rs
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
use rand::distributions::{Alphanumeric, DistString};
 | 
			
		||||
use std::{
 | 
			
		||||
    sync::mpsc::{channel, Sender},
 | 
			
		||||
    sync::mpsc::{channel, Receiver, Sender},
 | 
			
		||||
    thread::spawn,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -24,6 +24,46 @@ enum SendMsg {
 | 
			
		||||
    ValidateSess(ValidateSession),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct Cache {
 | 
			
		||||
    data: Vec<String>,
 | 
			
		||||
    rx: Receiver<SendMsg>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Cache {
 | 
			
		||||
    fn new(recv: Receiver<SendMsg>) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            rx: recv,
 | 
			
		||||
            data: Vec::new(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn gen_id(&self) -> String {
 | 
			
		||||
        Alphanumeric.sample_string(&mut rand::thread_rng(), 16)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn listen(&mut self) {
 | 
			
		||||
        loop {
 | 
			
		||||
            match self.rx.recv().unwrap() {
 | 
			
		||||
                SendMsg::ValidateSess(vsess) => {
 | 
			
		||||
                    vsess.tx.send(self.validate_session(vsess.id)).unwrap()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn validate_session(&mut self, sess: Option<String>) -> Session {
 | 
			
		||||
        let session: Session;
 | 
			
		||||
        if sess.is_some_and(|sess| self.data.contains(&sess)) {
 | 
			
		||||
            session = Session::Ok;
 | 
			
		||||
        } else {
 | 
			
		||||
            let id = self.gen_id();
 | 
			
		||||
            self.data.push(id.clone());
 | 
			
		||||
            session = Session::New(id);
 | 
			
		||||
        }
 | 
			
		||||
        session
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
pub struct MoreThanText {
 | 
			
		||||
    tx: Sender<SendMsg>,
 | 
			
		||||
@@ -33,32 +73,8 @@ impl MoreThanText {
 | 
			
		||||
    pub fn new() -> Self {
 | 
			
		||||
        let (tx, rx) = channel();
 | 
			
		||||
        spawn(move || {
 | 
			
		||||
            let mut ids: Vec<String> = Vec::new();
 | 
			
		||||
            loop {
 | 
			
		||||
                match rx.recv().unwrap() {
 | 
			
		||||
                    SendMsg::ValidateSess(vsess) => {
 | 
			
		||||
                        let session: Session;
 | 
			
		||||
                        match vsess.id {
 | 
			
		||||
                            Some(id) => {
 | 
			
		||||
                                if ids.contains(&id) {
 | 
			
		||||
                                    session = Session::Ok;
 | 
			
		||||
                                } else {
 | 
			
		||||
                                    let sid =
 | 
			
		||||
                                        Alphanumeric.sample_string(&mut rand::thread_rng(), 16);
 | 
			
		||||
                                    ids.push(sid.clone());
 | 
			
		||||
                                    session = Session::New(sid);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            None => {
 | 
			
		||||
                                let sid = Alphanumeric.sample_string(&mut rand::thread_rng(), 16);
 | 
			
		||||
                                ids.push(sid.clone());
 | 
			
		||||
                                session = Session::New(sid);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        vsess.tx.send(session).unwrap();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            let mut cache = Cache::new(rx);
 | 
			
		||||
            cache.listen();
 | 
			
		||||
        });
 | 
			
		||||
        Self { tx: tx }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,9 @@ struct Args {
 | 
			
		||||
    /// IP used
 | 
			
		||||
    #[arg(short, long, default_value_t = LOCALHOST.to_string())]
 | 
			
		||||
    address: String,
 | 
			
		||||
    /// cluster host
 | 
			
		||||
    #[arg(short, long, num_args(0..))]
 | 
			
		||||
    cluster: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user