Removed interval tasks to be normal tasks

This commit is contained in:
wrk 2023-05-31 16:45:23 +02:00
parent 27ebcc0b65
commit 37e686b8c9

View File

@ -13,7 +13,7 @@ use std::{
net::ToSocketAddrs, net::ToSocketAddrs,
path::Path, path::Path,
sync::Arc, sync::Arc,
time::{Duration, SystemTime}, time::SystemTime,
}; };
use async_native_tls::TlsStream; use async_native_tls::TlsStream;
@ -171,7 +171,7 @@ pub struct Context {
default_system: Option<StoredSystem>, default_system: Option<StoredSystem>,
invalid_system: Option<StoredSystem>, invalid_system: Option<StoredSystem>,
systems: HashMap<String, StoredSystem>, systems: HashMap<String, StoredSystem>,
interval_tasks: Vec<(Duration, StoredSystem)>, tasks: Vec<StoredSystem>,
factory: Arc<RwLock<Factory>>, factory: Arc<RwLock<Factory>>,
} }
@ -310,13 +310,12 @@ impl Context {
) )
} }
pub async fn run_interval_tasks(&mut self, tx: mpsc::Sender<Response>) { pub async fn run_tasks(&mut self, tx: mpsc::Sender<Response>) {
for (task_duration, mut task) in std::mem::take(&mut self.interval_tasks) { for mut task in std::mem::take(&mut self.tasks) {
let fact = self.factory.clone(); let fact = self.factory.clone();
let task_tx = tx.clone(); let task_tx = tx.clone();
tokio::spawn(async move { tokio::spawn(async move {
loop { loop {
tokio::time::sleep(task_duration).await;
let resp = task.run( let resp = task.run(
&IrcPrefix { &IrcPrefix {
nick: "", nick: "",
@ -359,7 +358,7 @@ impl Irc {
default_system: None, default_system: None,
invalid_system: None, invalid_system: None,
systems: HashMap::default(), systems: HashMap::default(),
interval_tasks: Vec::new(), tasks: Vec::new(),
factory: Arc::new(RwLock::new(Factory::default())), factory: Arc::new(RwLock::new(Factory::default())),
})); }));
@ -407,16 +406,13 @@ impl Irc {
self self
} }
pub async fn add_interval_task<I, S: for<'a> System + Send + Sync + 'static>( pub async fn add_task<I, S: for<'a> System + Send + Sync + 'static>(
&mut self, &mut self,
duration: Duration,
system: impl for<'a> IntoSystem<I, System = S>, system: impl for<'a> IntoSystem<I, System = S>,
) -> &mut Self { ) -> &mut Self {
{ {
let mut context = self.context.write().await; let mut context = self.context.write().await;
context context.tasks.push(Box::new(system.into_system()));
.interval_tasks
.push((duration, Box::new(system.into_system())));
} }
self self
} }
@ -546,7 +542,7 @@ impl Irc {
{ {
let mut context = self.context.write().await; let mut context = self.context.write().await;
context.register(); context.register();
context.run_interval_tasks(tx).await; context.run_tasks(tx).await;
} }
let stream = self.stream.take().unwrap(); let stream = self.stream.take().unwrap();