use std::sync::Arc;
use std::sync::atomic::AtomicBool;
use std::convert::Into;
use {ErrorKind, JobService, JobServices, Result};
pub struct Config<R> {
pub(crate) host: String,
pub(crate) workers: u64,
pub(crate) with_redis: R,
pub(crate) job_services: JobServices,
pub(crate) tick_sleep: u64,
pub(crate) stop_timeout: u64,
pub(crate) watch_dead_thread: u64,
pub(crate) fetch_timeout: u64,
pub(crate) closed: Arc<AtomicBool>,
}
impl<R> Config<R> {
pub fn new<S>(host: S, workers: u64, with_redis: R, closed: Arc<AtomicBool>) -> Config<R>
where
S: Into<String>,
{
Config {
host: host.into(),
workers: workers,
with_redis: with_redis,
job_services: JobServices::new(),
tick_sleep: 1,
stop_timeout: 10,
watch_dead_thread: 3,
fetch_timeout: 5,
closed: closed,
}
}
pub fn reg_job_service(&mut self, job_service: Box<JobService>) -> Result<()> {
let job_type = job_service.job_type().to_string();
if self.job_services
.insert(job_type.clone(), job_service)
.is_some()
{
return Err(ErrorKind::RegDupJobService(job_type).into());
}
Ok(())
}
pub fn set_tick_sleep(&mut self, tick_sleep: u64) {
self.tick_sleep = tick_sleep;
}
pub fn set_stop_timeout(&mut self, stop_timeout: u64) {
self.stop_timeout = stop_timeout;
}
pub fn set_watch_dead_thread(&mut self, watch_dead_thread: u64) {
self.watch_dead_thread = watch_dead_thread;
}
pub fn set_fetch_timeout(&mut self, fetch_timeout: u64) {
self.fetch_timeout = fetch_timeout;
}
}
pub struct ScheduleConfig<R> {
pub(crate) with_redis: R,
pub(crate) tick_sleep: u64,
pub(crate) closed: Arc<AtomicBool>,
}
impl<R> ScheduleConfig<R> {
pub fn new(with_redis: R, closed: Arc<AtomicBool>) -> ScheduleConfig<R> {
ScheduleConfig {
with_redis: with_redis,
tick_sleep: 1,
closed: closed,
}
}
}