feat(eventsub): reconnect (#6035)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user