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

Method handle_session_events

components/scheduler/src/guild_handler.rs:325–406  ·  view source on GitHub ↗

Applies the side effects of the events produced by the session, returning false when the guild handler should stop.

(&mut self, events: Vec<SessionEvent>)

Source from the content-addressed store, hash-verified

323 /// Applies the side effects of the events produced by the session,
324 /// returning false when the guild handler should stop.
325 async fn handle_session_events(&mut self, events: Vec<SessionEvent>) -> bool {
326 let mut keep_running = true;
327 let mut broken_session_cleanup = false;
328
329 let mut queue = VecDeque::from(events);
330 while let Some(evt) = queue.pop_front() {
331 match evt {
332 SessionEvent::ScriptStarted(meta) => {
333 self.script_loaded(meta).await;
334 }
335 SessionEvent::TaskAcked(task_id) => {
336 self.scheduled_tasks_man.ack_triggered_task(task_id).await;
337 }
338 SessionEvent::TimerAcked(timer) => {
339 self.interval_timers_man.timer_ack(&timer).await;
340 }
341 SessionEvent::TaskDispatchCancelled(task_id) => {
342 self.scheduled_tasks_man.remove_pending(task_id);
343 }
344 SessionEvent::TimerDispatchCancelled(timer) => {
345 self.interval_timers_man.remove_pending(timer);
346 }
347 SessionEvent::TaskScheduled => {
348 self.scheduled_tasks_man.clear_next();
349 }
350 SessionEvent::VmIdle => {
351 if let Some(session) = self.session.take() {
352 self.note_worker_returned(session.worker_id());
353 session.return_idle(&self.worker_pool);
354 }
355 }
356 SessionEvent::VmShutdown { current_vm, reason } => {
357 if current_vm {
358 if let Some(session) = self.session.take() {
359 self.note_worker_returned(session.worker_id());
360 session.return_after_shutdown(&self.worker_pool);
361 }
362 self.force_load_scripts_next = true;
363 } else {
364 // an older vm of ours finished shutting down, the new
365 // vm will send us a new set of timers and tasks
366 self.scheduled_tasks_man.clear_task_names();
367 self.interval_timers_man.clear_loaded_timers();
368 }
369
370 match reason {
371 Some(ShutdownReason::DiscordInvalidRequestsRatelimit) => {
372 let _ = self
373 .scheduler_tx
374 .send(VmSessionEvent::ShutdownTooManyInvalidRequests);
375 keep_running = false;
376 }
377 Some(ShutdownReason::Runaway) => {
378 let _ = self.scheduler_tx.send(VmSessionEvent::ShutdownExcessCpu);
379 keep_running = false;
380 }
381 _ => {}
382 }

Callers 3

handle_next_actionMethod · 0.80
shutdownMethod · 0.80

Calls 15

script_loadedMethod · 0.80
ack_triggered_taskMethod · 0.80
timer_ackMethod · 0.80
clear_nextMethod · 0.80
note_worker_returnedMethod · 0.80
worker_idMethod · 0.80
return_idleMethod · 0.80
return_after_shutdownMethod · 0.80
clear_task_namesMethod · 0.80
clear_loaded_timersMethod · 0.80
destroy_brokenMethod · 0.80
clear_pending_acksMethod · 0.80

Tested by

no test coverage detected