feat(eventsub): reconnect (#6035)

This commit is contained in:
nerix
2025-03-06 22:41:35 +01:00
committed by GitHub
parent 9d1f930e85
commit 914257d537
18 changed files with 305 additions and 45 deletions
@@ -17,6 +17,7 @@
#include <optional>
#include <string>
#include <thread>
#include <unordered_set>
namespace chatterino::eventsub {
@@ -44,6 +45,11 @@ public:
/// create a new connection and queue up the subscription to run again after X seconds.
[[nodiscard]] virtual SubscriptionHandle subscribe(
const SubscriptionRequest &request) = 0;
virtual void reconnectConnection(
std::unique_ptr<lib::Listener> connection,
const std::optional<std::string> &reconnectURL,
const std::unordered_set<SubscriptionRequest> &subs) = 0;
};
class Controller : public IController
@@ -59,10 +65,17 @@ public:
[[nodiscard]] SubscriptionHandle subscribe(
const SubscriptionRequest &request) override;
void reconnectConnection(
std::unique_ptr<lib::Listener> connection,
const std::optional<std::string> &reconnectURL,
const std::unordered_set<SubscriptionRequest> &subs) override;
private:
void subscribe(const SubscriptionRequest &request, bool isRetry);
void createConnection();
void createConnection(std::string host, std::string port, std::string path,
std::unique_ptr<lib::Listener> listener);
void registerConnection(std::weak_ptr<lib::Session> &&connection);
void retrySubscription(const SubscriptionRequest &request,
@@ -77,6 +90,8 @@ private:
void markRequestUnsubscribed(const SubscriptionRequest &request);
void clearConnections();
const std::string userAgent;
std::string eventSubHost;
@@ -154,6 +169,11 @@ public:
(void)request;
return {};
}
void reconnectConnection(
std::unique_ptr<lib::Listener> connection,
const std::optional<std::string> &reconnectURL,
const std::unordered_set<SubscriptionRequest> &subs) override;
};
} // namespace chatterino::eventsub