use std::sync::Arc;
use tokio::sync::mpsc;
use tokio_util::sync::{CancellationToken, DropGuard};
use crate::clitask::{ClientMsg, ClientTask};
#[derive(Clone)]
pub struct Client {
tx: mpsc::Sender<ClientMsg>,
_shutdown: Arc<DropGuard>,
}
impl Client {
pub fn new(seed_list: Vec<String>) -> Self {
let (tx, rx) = mpsc::channel(1_000);
let shutdown = CancellationToken::new();
let task = ClientTask::new(seed_list, rx, shutdown.clone());
tokio::spawn(task.run());
Self {
tx,
_shutdown: Arc::new(shutdown.drop_guard()),
}
}
}