refactor(eventsub): more references, less const (#5953)

This commit is contained in:
nerix
2025-02-13 13:46:52 +01:00
committed by GitHub
parent 9c96dd53c7
commit 9afd60534a
16 changed files with 154 additions and 139 deletions
+1 -1
View File
@@ -25,7 +25,7 @@
- Bugfix: Fixed search in emote popup not always working correctly. (#5946)
- Bugfix: Fixed channel point redemptions with messages not showing up if PubSub is disconnected. (#5948)
- Dev: Subscriptions to PubSub channel points redemption topics now use no auth token, making it continue to work during PubSub shutdown. (#5947)
- Dev: Add initial experimental EventSub support. (#5837, #5895, #5897, #5904, #5910, #5903, #5915, #5916, #5930, #5935, #5932, #5943, #5952)
- Dev: Add initial experimental EventSub support. (#5837, #5895, #5897, #5904, #5910, #5903, #5915, #5916, #5930, #5935, #5932, #5943, #5952, #5953)
- Dev: Remove unneeded platform specifier for toasts. (#5914)
- Dev: Highlight checks now use non-capturing groups for the boundaries. (#5784)
- Dev: Removed unused PubSub whisper code. (#5898)
+23 -18
View File
@@ -14,7 +14,8 @@ using namespace chatterino::eventsub::lib;
std::vector<boost::beast::flat_buffer> readMessages()
{
QFile file(":/bench/messages.ndjson");
assert(file.open(QFile::ReadOnly));
bool ok = file.open(QFile::ReadOnly);
assert(ok);
std::vector<boost::beast::flat_buffer> messages;
while (!file.atEnd())
@@ -41,67 +42,71 @@ public:
NoopListener() = default;
// NOLINTBEGIN(cppcoreguidelines-pro-type-const-cast)
void onSessionWelcome(messages::Metadata metadata,
payload::session_welcome::Payload payload) override
void onSessionWelcome(
const messages::Metadata &metadata,
const payload::session_welcome::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onNotification(messages::Metadata metadata,
void onNotification(const messages::Metadata &metadata,
const boost::json::value &jv) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&jv);
}
void onChannelBan(messages::Metadata metadata,
payload::channel_ban::v1::Payload payload) override
void onChannelBan(const messages::Metadata &metadata,
const payload::channel_ban::v1::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onStreamOnline(messages::Metadata metadata,
payload::stream_online::v1::Payload payload) override
void onStreamOnline(
const messages::Metadata &metadata,
const payload::stream_online::v1::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onStreamOffline(messages::Metadata metadata,
payload::stream_offline::v1::Payload payload) override
void onStreamOffline(
const messages::Metadata &metadata,
const payload::stream_offline::v1::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onChannelChatNotification(
messages::Metadata metadata,
payload::channel_chat_notification::v1::Payload payload) override
const messages::Metadata &metadata,
const payload::channel_chat_notification::v1::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onChannelUpdate(messages::Metadata metadata,
payload::channel_update::v1::Payload payload) override
void onChannelUpdate(
const messages::Metadata &metadata,
const payload::channel_update::v1::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onChannelChatMessage(
messages::Metadata metadata,
payload::channel_chat_message::v1::Payload payload) override
const messages::Metadata &metadata,
const payload::channel_chat_message::v1::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
}
void onChannelModerate(
messages::Metadata metadata,
payload::channel_moderate::v2::Payload payload) override
const messages::Metadata &metadata,
const payload::channel_moderate::v2::Payload &payload) override
{
benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload);
@@ -18,39 +18,40 @@ public:
virtual ~Listener() = default;
virtual void onSessionWelcome(
messages::Metadata metadata,
payload::session_welcome::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::session_welcome::Payload &payload) = 0;
virtual void onNotification(messages::Metadata metadata,
virtual void onNotification(const messages::Metadata &metadata,
const boost::json::value &jv) = 0;
// Subscription types
virtual void onChannelBan(messages::Metadata metadata,
payload::channel_ban::v1::Payload payload) = 0;
virtual void onChannelBan(
const messages::Metadata &metadata,
const payload::channel_ban::v1::Payload &payload) = 0;
virtual void onStreamOnline(
messages::Metadata metadata,
payload::stream_online::v1::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::stream_online::v1::Payload &payload) = 0;
virtual void onStreamOffline(
messages::Metadata metadata,
payload::stream_offline::v1::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::stream_offline::v1::Payload &payload) = 0;
virtual void onChannelChatNotification(
messages::Metadata metadata,
payload::channel_chat_notification::v1::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::channel_chat_notification::v1::Payload &payload) = 0;
virtual void onChannelUpdate(
messages::Metadata metadata,
payload::channel_update::v1::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::channel_update::v1::Payload &payload) = 0;
virtual void onChannelChatMessage(
messages::Metadata metadata,
payload::channel_chat_message::v1::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::channel_chat_message::v1::Payload &payload) = 0;
virtual void onChannelModerate(
messages::Metadata metadata,
payload::channel_moderate::v2::Payload payload) = 0;
const messages::Metadata &metadata,
const payload::channel_moderate::v2::Payload &payload) = 0;
// Add your new subscription types above this line
};
@@ -21,13 +21,13 @@ namespace chatterino::eventsub::lib::messages {
*/
struct Metadata {
const std::string messageID;
const std::string messageType;
std::string messageID;
std::string messageType;
// TODO: should this be chronofied?
const std::string messageTimestamp;
std::string messageTimestamp;
const std::optional<std::string> subscriptionType;
const std::optional<std::string> subscriptionVersion;
std::optional<std::string> subscriptionType;
std::optional<std::string> subscriptionVersion;
};
#include "twitch-eventsub-ws/messages/metadata.inc"
@@ -91,9 +91,9 @@ struct Event {
};
struct Payload {
const subscription::Subscription subscription;
subscription::Subscription subscription;
const Event event;
Event event;
};
#include "twitch-eventsub-ws/payloads/channel-ban-v1.inc"
@@ -135,9 +135,9 @@ struct Event {
};
struct Payload {
const subscription::Subscription subscription;
subscription::Subscription subscription;
const Event event;
Event event;
};
#include "twitch-eventsub-ws/payloads/channel-chat-message-v1.inc"
@@ -190,9 +190,9 @@ struct Event {
};
struct Payload {
const subscription::Subscription subscription;
subscription::Subscription subscription;
const Event event;
Event event;
};
#include "twitch-eventsub-ws/payloads/channel-chat-notification-v1.inc"
@@ -10,31 +10,31 @@ namespace chatterino::eventsub::lib::payload::channel_update::v1 {
struct Event {
// The broadcaster's user ID
const std::string broadcasterUserID;
std::string broadcasterUserID;
// The broadcaster's user login
const std::string broadcasterUserLogin;
std::string broadcasterUserLogin;
// The broadcaster's user display name
const std::string broadcasterUserName;
std::string broadcasterUserName;
// The channel's stream title
const std::string title;
std::string title;
// The channel's broadcast language
const std::string language;
std::string language;
// The channels category ID
const std::string categoryID;
std::string categoryID;
// The category name
const std::string categoryName;
std::string categoryName;
// A boolean identifying whether the channel is flagged as mature
const bool isMature;
bool isMature;
};
struct Payload {
const subscription::Subscription subscription;
subscription::Subscription subscription;
const Event event;
Event event;
};
#include "twitch-eventsub-ws/payloads/channel-update-v1.inc"
@@ -23,7 +23,7 @@ namespace chatterino::eventsub::lib::payload::session_welcome {
/// json_inner=session
struct Payload {
const std::string id;
std::string id;
};
#include "twitch-eventsub-ws/payloads/session-welcome.inc"
@@ -10,17 +10,17 @@ namespace chatterino::eventsub::lib::payload::stream_offline::v1 {
struct Event {
// The broadcaster's user ID
const std::string broadcasterUserID;
std::string broadcasterUserID;
// The broadcaster's user login
const std::string broadcasterUserLogin;
std::string broadcasterUserLogin;
// The broadcaster's user display name
const std::string broadcasterUserName;
std::string broadcasterUserName;
};
struct Payload {
const subscription::Subscription subscription;
subscription::Subscription subscription;
const Event event;
Event event;
};
#include "twitch-eventsub-ws/payloads/stream-offline-v1.inc"
@@ -10,27 +10,27 @@ namespace chatterino::eventsub::lib::payload::stream_online::v1 {
struct Event {
// The ID of the stream
const std::string id;
std::string id;
// The broadcaster's user ID
const std::string broadcasterUserID;
std::string broadcasterUserID;
// The broadcaster's user login
const std::string broadcasterUserLogin;
std::string broadcasterUserLogin;
// The broadcaster's user display name
const std::string broadcasterUserName;
std::string broadcasterUserName;
// The stream type (e.g. live, playlist, watch_party)
const std::string type;
std::string type;
// The timestamp at which the stream went online
// TODO: chronofy?
const std::string startedAt;
std::string startedAt;
};
struct Payload {
const subscription::Subscription subscription;
subscription::Subscription subscription;
const Event event;
Event event;
};
#include "twitch-eventsub-ws/payloads/stream-online-v1.inc"
@@ -33,23 +33,23 @@ namespace chatterino::eventsub::lib::payload::subscription {
*/
struct Transport {
const std::string method;
const std::string sessionID;
std::string method;
std::string sessionID;
};
struct Subscription {
const std::string id;
const std::string status;
const std::string type;
const std::string version;
std::string id;
std::string status;
std::string type;
std::string version;
// TODO: How do we map condition here? vector of key/value pairs?
const Transport transport;
Transport transport;
// TODO: chronofy?
const std::string createdAt;
const int cost;
std::string createdAt;
int cost;
};
#include "twitch-eventsub-ws/payloads/subscription.inc"
+9 -8
View File
@@ -32,15 +32,16 @@ using EventSubSubscription = std::pair<std::string, std::string>;
using NotificationHandlers = std::unordered_map<
EventSubSubscription,
std::function<boost::system::error_code(
messages::Metadata, boost::json::value, std::unique_ptr<Listener> &)>,
std::function<boost::system::error_code(const messages::Metadata &,
const boost::json::value &,
std::unique_ptr<Listener> &)>,
boost::hash<EventSubSubscription>>;
using MessageHandlers =
std::unordered_map<std::string, std::function<boost::system::error_code(
messages::Metadata, boost::json::value,
std::unique_ptr<Listener> &,
const NotificationHandlers &)>>;
using MessageHandlers = std::unordered_map<
std::string,
std::function<boost::system::error_code(
const messages::Metadata &, const boost::json::value &,
std::unique_ptr<Listener> &, const NotificationHandlers &)>>;
namespace {
@@ -153,7 +154,7 @@ namespace {
{
return oPayload.error();
}
listener->onChannelModerate(metadata, std::move(*oPayload));
listener->onChannelModerate(metadata, *oPayload);
return boost::system::error_code{};
},
},
+21 -17
View File
@@ -55,51 +55,55 @@ boost::beast::flat_buffer readToFlatBuffer(const std::filesystem::path &path)
class NoOpListener : public chatterino::eventsub::lib::Listener
{
void onSessionWelcome(messages::Metadata metadata,
payload::session_welcome::Payload payload) override
void onSessionWelcome(
const messages::Metadata &metadata,
const payload::session_welcome::Payload &payload) override
{
}
void onNotification(messages::Metadata metadata,
void onNotification(const messages::Metadata &metadata,
const boost::json::value &jv) override
{
}
void onChannelBan(messages::Metadata metadata,
payload::channel_ban::v1::Payload payload) override
void onChannelBan(const messages::Metadata &metadata,
const payload::channel_ban::v1::Payload &payload) override
{
}
void onStreamOnline(messages::Metadata metadata,
payload::stream_online::v1::Payload payload) override
void onStreamOnline(
const messages::Metadata &metadata,
const payload::stream_online::v1::Payload &payload) override
{
}
void onStreamOffline(messages::Metadata metadata,
payload::stream_offline::v1::Payload payload) override
void onStreamOffline(
const messages::Metadata &metadata,
const payload::stream_offline::v1::Payload &payload) override
{
}
void onChannelChatNotification(
messages::Metadata metadata,
payload::channel_chat_notification::v1::Payload payload) override
const messages::Metadata &metadata,
const payload::channel_chat_notification::v1::Payload &payload) override
{
}
void onChannelUpdate(messages::Metadata metadata,
payload::channel_update::v1::Payload payload) override
void onChannelUpdate(
const messages::Metadata &metadata,
const payload::channel_update::v1::Payload &payload) override
{
}
void onChannelChatMessage(
messages::Metadata metadata,
payload::channel_chat_message::v1::Payload payload) override
const messages::Metadata &metadata,
const payload::channel_chat_message::v1::Payload &payload) override
{
}
void onChannelModerate(
messages::Metadata metadata,
payload::channel_moderate::v2::Payload payload) override
const messages::Metadata &metadata,
const payload::channel_moderate::v2::Payload &payload) override
{
}
};
+18 -17
View File
@@ -28,8 +28,8 @@ const auto &LOG = chatterinoTwitchEventSub;
namespace chatterino::eventsub {
void Connection::onSessionWelcome(
lib::messages::Metadata metadata,
lib::payload::session_welcome::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::session_welcome::Payload &payload)
{
(void)metadata;
qCDebug(LOG) << "On session welcome:" << payload.id.c_str();
@@ -37,7 +37,7 @@ void Connection::onSessionWelcome(
this->sessionID = QString::fromStdString(payload.id);
}
void Connection::onNotification(lib::messages::Metadata metadata,
void Connection::onNotification(const lib::messages::Metadata &metadata,
const boost::json::value &jv)
{
(void)metadata;
@@ -45,8 +45,9 @@ void Connection::onNotification(lib::messages::Metadata metadata,
qCDebug(LOG) << "on notification: " << jsonString.c_str();
}
void Connection::onChannelBan(lib::messages::Metadata metadata,
lib::payload::channel_ban::v1::Payload payload)
void Connection::onChannelBan(
const lib::messages::Metadata &metadata,
const lib::payload::channel_ban::v1::Payload &payload)
{
(void)metadata;
@@ -91,8 +92,8 @@ void Connection::onChannelBan(lib::messages::Metadata metadata,
}
void Connection::onStreamOnline(
lib::messages::Metadata metadata,
lib::payload::stream_online::v1::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::stream_online::v1::Payload &payload)
{
(void)metadata;
qCDebug(LOG) << "On stream online event for channel"
@@ -100,8 +101,8 @@ void Connection::onStreamOnline(
}
void Connection::onStreamOffline(
lib::messages::Metadata metadata,
lib::payload::stream_offline::v1::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::stream_offline::v1::Payload &payload)
{
(void)metadata;
qCDebug(LOG) << "On stream offline event for channel"
@@ -109,8 +110,8 @@ void Connection::onStreamOffline(
}
void Connection::onChannelChatNotification(
lib::messages::Metadata metadata,
lib::payload::channel_chat_notification::v1::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::channel_chat_notification::v1::Payload &payload)
{
(void)metadata;
qCDebug(LOG) << "On channel chat notification for"
@@ -118,8 +119,8 @@ void Connection::onChannelChatNotification(
}
void Connection::onChannelUpdate(
lib::messages::Metadata metadata,
lib::payload::channel_update::v1::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::channel_update::v1::Payload &payload)
{
(void)metadata;
qCDebug(LOG) << "On channel update for"
@@ -127,8 +128,8 @@ void Connection::onChannelUpdate(
}
void Connection::onChannelChatMessage(
lib::messages::Metadata metadata,
lib::payload::channel_chat_message::v1::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::channel_chat_message::v1::Payload &payload)
{
(void)metadata;
@@ -137,8 +138,8 @@ void Connection::onChannelChatMessage(
}
void Connection::onChannelModerate(
lib::messages::Metadata metadata,
lib::payload::channel_moderate::v2::Payload payload)
const lib::messages::Metadata &metadata,
const lib::payload::channel_moderate::v2::Payload &payload)
{
(void)metadata;
+20 -17
View File
@@ -15,38 +15,41 @@ class Connection final : public lib::Listener
{
public:
void onSessionWelcome(
lib::messages::Metadata metadata,
lib::payload::session_welcome::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::session_welcome::Payload &payload) override;
void onNotification(lib::messages::Metadata metadata,
void onNotification(const lib::messages::Metadata &metadata,
const boost::json::value &jv) override;
void onChannelBan(lib::messages::Metadata metadata,
lib::payload::channel_ban::v1::Payload payload) override;
void onChannelBan(
const lib::messages::Metadata &metadata,
const lib::payload::channel_ban::v1::Payload &payload) override;
void onStreamOnline(
lib::messages::Metadata metadata,
lib::payload::stream_online::v1::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::stream_online::v1::Payload &payload) override;
void onStreamOffline(
lib::messages::Metadata metadata,
lib::payload::stream_offline::v1::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::stream_offline::v1::Payload &payload) override;
void onChannelChatNotification(
lib::messages::Metadata metadata,
lib::payload::channel_chat_notification::v1::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::channel_chat_notification::v1::Payload &payload)
override;
void onChannelUpdate(
lib::messages::Metadata metadata,
lib::payload::channel_update::v1::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::channel_update::v1::Payload &payload) override;
void onChannelChatMessage(
lib::messages::Metadata metadata,
lib::payload::channel_chat_message::v1::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::channel_chat_message::v1::Payload &payload)
override;
void onChannelModerate(
lib::messages::Metadata metadata,
lib::payload::channel_moderate::v2::Payload payload) override;
const lib::messages::Metadata &metadata,
const lib::payload::channel_moderate::v2::Payload &payload) override;
QString getSessionID() const;