MCPcopy Create free account
hub / github.com/Botloader/botloader / next_event

Method next_event

components/scheduler/src/guild_handler.rs:213–273  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

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 }

Callers 1

runMethod · 0.80

Calls 2

init_next_task_timeMethod · 0.80
next_actionMethod · 0.45

Tested by

no test coverage detected