From 2d96e35793d821ea3313a418788604e44beb950d Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 7 Apr 2026 22:02:44 +0200 Subject: [PATCH] {message,submit}_queue: add size() function and callback --- src/core/message_queue.cpp | 19 +++++++++++++++++++ src/core/message_queue.h | 9 +++++++-- src/core/submit_queue.cpp | 19 +++++++++++++++++++ src/core/submit_queue.h | 7 ++++++- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/core/message_queue.cpp b/src/core/message_queue.cpp index 04b2683..0b0d934 100644 --- a/src/core/message_queue.cpp +++ b/src/core/message_queue.cpp @@ -101,6 +101,8 @@ void message_queue::run(bot::settings::settings *settings, submit_queue *submit_ if (!m_queue.empty()) { const message message = m_queue.front(); m_queue.pop(); + for (message_queue_size_callback &callback : m_callbacks) + callback(m_queue.size()); m_mutex.unlock(); auto translator = settings->get_translator(); @@ -134,6 +136,23 @@ void message_queue::run(bot::settings::settings *settings, submit_queue *submit_ } } +size_t message_queue::size() { + const std::lock_guard guard(m_mutex); + return m_queue.size(); +} + +void message_queue::size_callback_add(const message_queue_size_callback &callback) { + const std::lock_guard guard(m_mutex); + m_callbacks.push_back(callback); +} + +/* +void message_queue::size_callback_remove(const message_queue_size_callback &callback) { + const std::lock_guard guard(m_mutex); + m_callbacks.erase(std::remove(m_callbacks.begin(), m_callbacks.end(), callback)); +} +*/ + void message_queue::terminate() { m_running = false; diff --git a/src/core/message_queue.h b/src/core/message_queue.h index 5d15e5e..12bbecb 100644 --- a/src/core/message_queue.h +++ b/src/core/message_queue.h @@ -19,9 +19,10 @@ #ifndef MESSAGE_QUEUE_H #define MESSAGE_QUEUE_H #include +#include #include -#include #include +#include #include #include #include "settings.h" @@ -42,7 +43,8 @@ namespace bot { std::vector targets; }; - typedef std::variant message; + typedef std::function message_queue_size_callback; + typedef std::variant message; class message_queue { public: @@ -51,12 +53,15 @@ namespace bot { void process_direct_message_event(dpp::cluster *bot, bot::settings::settings *settings, const dpp::message_context_menu_t &event); void process_guild_message_event(dpp::cluster *bot, bot::settings::settings *settings, const dpp::message_create_t &event); void run(bot::settings::settings *settings, submit_queue *submit_queue); + size_t size(); + void size_callback_add(const message_queue_size_callback &callback); void terminate(); private: bool m_running; std::mutex m_mutex; std::queue m_queue; + std::vector m_callbacks; }; } diff --git a/src/core/submit_queue.cpp b/src/core/submit_queue.cpp index 4ba524f..58a98aa 100644 --- a/src/core/submit_queue.cpp +++ b/src/core/submit_queue.cpp @@ -42,6 +42,8 @@ void submit_queue::run(dpp::cluster *bot) if (!m_queue.empty()) { const translated_message message = m_queue.front(); m_queue.pop(); + for (submit_queue_size_callback &callback : m_callbacks) + callback(m_queue.size()); m_mutex.unlock(); if (const auto *direct_message = std::get_if(&message)) { @@ -60,6 +62,23 @@ void submit_queue::run(dpp::cluster *bot) } } +size_t submit_queue::size() { + const std::lock_guard guard(m_mutex); + return m_queue.size(); +} + +void submit_queue::size_callback_add(const submit_queue_size_callback &callback) { + const std::lock_guard guard(m_mutex); + m_callbacks.push_back(callback); +} + +/* +void submit_queue::size_callback_remove(const submit_queue_size_callback &callback) { + const std::lock_guard guard(m_mutex); + m_callbacks.erase(std::remove(m_callbacks.begin(), m_callbacks.end(), callback)); +} +*/ + void submit_queue::terminate() { m_running = false; diff --git a/src/core/submit_queue.h b/src/core/submit_queue.h index ffc58b0..3a1b156 100644 --- a/src/core/submit_queue.h +++ b/src/core/submit_queue.h @@ -21,8 +21,9 @@ #include #include #include -#include #include +#include +#include namespace bot { struct translated_direct_message { @@ -37,6 +38,7 @@ namespace bot { dpp::webhook webhook; }; + typedef std::function submit_queue_size_callback; typedef std::variant translated_message; class submit_queue { @@ -44,12 +46,15 @@ namespace bot { void add(const translated_message &message); void add(translated_message &&message); void run(dpp::cluster *bot); + size_t size(); + void size_callback_add(const submit_queue_size_callback &callback); void terminate(); private: bool m_running; std::mutex m_mutex; std::queue m_queue; + std::vector m_callbacks; }; }