use super::*;
use std::time::Duration;
const DEFAULT_COMMAND_TIMEOUT: Duration = Duration::from_secs(3);
const DEFAULT_ATTACH_RETRIES: usize = 240;
const DEFAULT_ATTACH_RETRY_DELAY: Duration = Duration::from_millis(250);
const DEFAULT_CHANNEL_SIZE: usize = 32;
pub struct WifiSetup {
wifi: WifiAp,
request_client: RequestClient,
}
impl WifiSetup {
pub fn new() -> Self {
Self::with_capacities(DEFAULT_CHANNEL_SIZE, DEFAULT_CHANNEL_SIZE)
}
pub fn with_capacities(request_channel_size: usize, broadcast_channel_size: usize) -> Self {
let (self_sender, request_receiver) = mpsc::channel(request_channel_size);
let request_client = RequestClient::new(self_sender.clone());
let broadcast_sender = broadcast::Sender::new(broadcast_channel_size);
Self {
wifi: WifiAp {
socket_path: PATH_DEFAULT_SERVER.into(),
attach_options: vec![],
request_receiver,
broadcast_sender,
self_sender,
command_timeout: DEFAULT_COMMAND_TIMEOUT,
attach_retries: DEFAULT_ATTACH_RETRIES,
attach_retry_delay: DEFAULT_ATTACH_RETRY_DELAY,
},
request_client,
}
}
pub fn set_socket_path<S: Into<std::path::PathBuf>>(&mut self, path: S) {
self.wifi.socket_path = path.into();
}
pub fn add_attach_options(&mut self, options: &[&str]) {
for o in options {
self.wifi.attach_options.push(o.to_string());
}
}
pub fn set_command_timeout(&mut self, timeout: Duration) {
self.wifi.command_timeout = timeout;
}
pub fn set_attach_retries(&mut self, retries: usize) {
self.wifi.attach_retries = retries;
}
pub fn set_attach_retry_delay(&mut self, delay: Duration) {
self.wifi.attach_retry_delay = delay;
}
pub fn get_broadcast_receiver(&self) -> BroadcastReceiver {
self.wifi.broadcast_sender.subscribe()
}
pub fn get_request_client(&self) -> RequestClient {
self.request_client.clone()
}
pub fn complete(self) -> WifiAp {
self.wifi
}
}
impl Default for WifiSetup {
fn default() -> Self {
Self::new()
}
}