(&mut self)
| 211 | } |
| 212 | |
| 213 | pub(crate) async fn next_event(&mut self) -> Option<NextGuildAction> { |
| 214 | self.scheduled_tasks_man.init_next_task_time().await; |
| 215 | |
| 216 | let scheduled_task_sleep_check = match self.scheduled_tasks_man.next_action() { |
| 217 | scheduled_task_manager::NextAction::None => tokio::time::sleep(Duration::MAX), |
| 218 | scheduled_task_manager::NextAction::Wait(until) => { |
| 219 | let sleep_dur = (until - chrono::Utc::now()) |
| 220 | .to_std() |
| 221 | .unwrap_or_else(|_| Duration::from_millis(1)); |
| 222 | tokio::time::sleep(sleep_dur) |
| 223 | } |
| 224 | scheduled_task_manager::NextAction::Run => { |
| 225 | return Some(NextGuildAction::CheckScheduledTasks); |
| 226 | } |
| 227 | }; |
| 228 | |
| 229 | let interval_timers_sleep_check = match self.interval_timers_man.next_action() { |
| 230 | interval_timer_manager::NextAction::None => tokio::time::sleep(Duration::MAX), |
| 231 | interval_timer_manager::NextAction::Wait(until) => { |
| 232 | let sleep_dur = (until - chrono::Utc::now()) |
| 233 | .to_std() |
| 234 | .unwrap_or_else(|_| Duration::from_millis(1)); |
| 235 | tokio::time::sleep(sleep_dur) |
| 236 | } |
| 237 | interval_timer_manager::NextAction::Run => { |
| 238 | return Some(NextGuildAction::CheckIntervalTimers); |
| 239 | } |
| 240 | }; |
| 241 | |
| 242 | tokio::pin!(scheduled_task_sleep_check); |
| 243 | tokio::pin!(interval_timers_sleep_check); |
| 244 | |
| 245 | if let Some(session) = &mut self.session { |
| 246 | tokio::select! { |
| 247 | msg = session.recv() => { |
| 248 | Some(NextGuildAction::WorkerMessage(msg)) |
| 249 | }, |
| 250 | next_guild_evt = self.guild_rx.recv() => { |
| 251 | next_guild_evt.map(NextGuildAction::GuildCommand) |
| 252 | }, |
| 253 | _ = scheduled_task_sleep_check => { |
| 254 | Some(NextGuildAction::CheckScheduledTasks) |
| 255 | }, |
| 256 | _ = interval_timers_sleep_check => { |
| 257 | Some(NextGuildAction::CheckIntervalTimers) |
| 258 | } |
| 259 | } |
| 260 | } else { |
| 261 | tokio::select! { |
| 262 | next_guild_evt = self.guild_rx.recv() => { |
| 263 | next_guild_evt.map(NextGuildAction::GuildCommand) |
| 264 | }, |
| 265 | _ = scheduled_task_sleep_check => { |
| 266 | Some(NextGuildAction::CheckScheduledTasks) |
| 267 | }, |
| 268 | _ = interval_timers_sleep_check => { |
| 269 | Some(NextGuildAction::CheckIntervalTimers) |
| 270 | } |
no test coverage detected