Refactor
This commit is contained in:
parent
ba41b311ab
commit
ca26efca6e
70
src/lib.rs
70
src/lib.rs
@ -1,6 +1,6 @@
|
|||||||
use rand::distributions::{Alphanumeric, DistString};
|
use rand::distributions::{Alphanumeric, DistString};
|
||||||
use std::{
|
use std::{
|
||||||
sync::mpsc::{channel, Sender},
|
sync::mpsc::{channel, Receiver, Sender},
|
||||||
thread::spawn,
|
thread::spawn,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -24,6 +24,46 @@ enum SendMsg {
|
|||||||
ValidateSess(ValidateSession),
|
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)]
|
#[derive(Clone)]
|
||||||
pub struct MoreThanText {
|
pub struct MoreThanText {
|
||||||
tx: Sender<SendMsg>,
|
tx: Sender<SendMsg>,
|
||||||
@ -33,32 +73,8 @@ impl MoreThanText {
|
|||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let (tx, rx) = channel();
|
let (tx, rx) = channel();
|
||||||
spawn(move || {
|
spawn(move || {
|
||||||
let mut ids: Vec<String> = Vec::new();
|
let mut cache = Cache::new(rx);
|
||||||
loop {
|
cache.listen();
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
Self { tx: tx }
|
Self { tx: tx }
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,9 @@ struct Args {
|
|||||||
/// IP used
|
/// IP used
|
||||||
#[arg(short, long, default_value_t = LOCALHOST.to_string())]
|
#[arg(short, long, default_value_t = LOCALHOST.to_string())]
|
||||||
address: String,
|
address: String,
|
||||||
|
/// cluster host
|
||||||
|
#[arg(short, long, num_args(0..))]
|
||||||
|
cluster: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
Reference in New Issue
Block a user