5 #include <pajlada/signals/signal.hpp> 6 #include <unordered_set> 27 template <
typename Subscription>
29 :
public std::enable_shared_from_this<BasicPubSubClient<Subscription>>
37 size_t maxSubscriptions = 100)
38 : maxSubscriptions(maxSubscriptions)
40 , handle_(
std::move(handle))
56 bool send(
const char *payload)
60 websocketpp::frame::opcode::text, ec);
64 qCDebug(chatterinoLiveupdates) <<
"Error sending message" << payload
65 <<
":" << ec.message().c_str();
87 if (!this->subscriptions_.emplace(subscription).second)
89 qCWarning(chatterinoLiveupdates)
90 <<
"Tried subscribing to" << subscription
91 <<
"but we're already subscribed!";
95 qCDebug(chatterinoLiveupdates) <<
"Subscribing to" << subscription;
98 QByteArray encoded = subscription.encodeSubscribe();
110 if (this->subscriptions_.erase(subscription) <= 0)
115 qCDebug(chatterinoLiveupdates) <<
"Unsubscribing from" << subscription;
118 QByteArray encoded = subscription.encodeUnsubscribe();
124 void close(
const std::string &reason,
125 websocketpp::close::status::value code =
126 websocketpp::close::status::normal)
133 qCDebug(chatterinoLiveupdates)
134 <<
"Error getting connection:" << ec.message().c_str();
138 conn->close(code, reason, ec);
141 qCDebug(chatterinoLiveupdates)
142 <<
"Error closing:" << ec.message().c_str();
149 return this->started_.load(std::memory_order_acquire);
158 this->started_.store(
true, std::memory_order_release);
165 this->started_.store(
false, std::memory_order_release);
169 std::unordered_set<Subscription> subscriptions_;
171 std::atomic<bool> started_{
false};
173 template <
typename ManagerSubscription>
BasicPubSubClient & operator=(const BasicPubSubClient &)=delete
void close(const std::string &reason, websocketpp::close::status::value code=websocketpp::close::status::normal)
Definition: BasicPubSubClient.hpp:124
websocketpp::lib::error_code WebsocketErrorCode
Definition: BasicPubSubWebsocket.hpp:33
BasicPubSubClient(liveupdates::WebsocketClient &websocketClient, liveupdates::WebsocketHandle handle, size_t maxSubscriptions=100)
Definition: BasicPubSubClient.hpp:35
Definition: BasicPubSubClient.hpp:28
bool subscribe(const Subscription &subscription)
Definition: BasicPubSubClient.hpp:80
Definition: SeventvEventAPISubscription.hpp:67
Definition: Application.cpp:48
bool isStarted() const
Definition: BasicPubSubClient.hpp:147
websocketpp::client< chatterino::BasicPubSubConfig > WebsocketClient
Definition: BasicPubSubWebsocket.hpp:31
static void increase(const QString &name)
Definition: DebugCount.hpp:16
virtual void onConnectionEstablished()
Definition: BasicPubSubClient.hpp:52
const size_t maxSubscriptions
Definition: BasicPubSubClient.hpp:33
static void decrease(const QString &name)
Definition: DebugCount.hpp:45
bool send(const char *payload)
Definition: BasicPubSubClient.hpp:56
Definition: BasicPubSubManager.hpp:58
websocketpp::connection_hdl WebsocketHandle
Definition: BasicPubSubWebsocket.hpp:32
liveupdates::WebsocketClient & websocketClient_
Definition: BasicPubSubClient.hpp:152
virtual ~BasicPubSubClient()=default
bool unsubscribe(const Subscription &subscription)
Definition: BasicPubSubClient.hpp:108