summaryrefslogtreecommitdiff
path: root/src/discord/websocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/discord/websocket.cpp')
-rw-r--r--src/discord/websocket.cpp51
1 files changed, 40 insertions, 11 deletions
diff --git a/src/discord/websocket.cpp b/src/discord/websocket.cpp
index 46a4b90..f886e69 100644
--- a/src/discord/websocket.cpp
+++ b/src/discord/websocket.cpp
@@ -1,14 +1,33 @@
#include "websocket.hpp"
+#include <spdlog/sinks/stdout_color_sinks.h>
#include <utility>
-Websocket::Websocket() = default;
+Websocket::Websocket(const std::string &id)
+ : m_close_info { 1000, "Normal", false } {
+ if (m_log = spdlog::get(id); !m_log) {
+ m_log = spdlog::stdout_color_mt(id);
+ }
+
+ m_open_dispatcher.connect([this]() {
+ m_signal_open.emit();
+ });
+
+ m_close_dispatcher.connect([this]() {
+ Stop();
+ m_signal_close.emit(m_close_info);
+ });
+}
void Websocket::StartConnection(const std::string &url) {
- m_websocket.disableAutomaticReconnection();
- m_websocket.setUrl(url);
- m_websocket.setOnMessageCallback([this](auto &&msg) { OnMessage(std::forward<decltype(msg)>(msg)); });
- m_websocket.setExtraHeaders(ix::WebSocketHttpHeaders { { "User-Agent", m_agent } }); // idk if this actually works
- m_websocket.start();
+ m_log->debug("Starting connection to {}", url);
+
+ m_websocket = std::make_unique<ix::WebSocket>();
+
+ m_websocket->disableAutomaticReconnection();
+ m_websocket->setUrl(url);
+ m_websocket->setOnMessageCallback([this](auto &&msg) { OnMessage(std::forward<decltype(msg)>(msg)); });
+ m_websocket->setExtraHeaders(ix::WebSocketHttpHeaders { { "User-Agent", m_agent } }); // idk if this actually works
+ m_websocket->start();
}
void Websocket::SetUserAgent(std::string agent) {
@@ -24,17 +43,24 @@ void Websocket::SetPrintMessages(bool show) noexcept {
}
void Websocket::Stop() {
+ m_log->debug("Stopping with default close code");
Stop(ix::WebSocketCloseConstants::kNormalClosureCode);
}
void Websocket::Stop(uint16_t code) {
- m_websocket.stop(code);
+ m_log->debug("Stopping with close code {}", code);
+ m_websocket->stop(code);
+ m_log->trace("Socket::stop complete");
+ while (Gtk::Main::events_pending()) {
+ Gtk::Main::iteration();
+ }
+ m_log->trace("No events pending");
}
void Websocket::Send(const std::string &str) {
if (m_print_messages)
- printf("sending %s\n", str.c_str());
- m_websocket.sendText(str);
+ m_log->trace("Send: {}", str);
+ m_websocket->sendText(str);
}
void Websocket::Send(const nlohmann::json &j) {
@@ -44,10 +70,13 @@ void Websocket::Send(const nlohmann::json &j) {
void Websocket::OnMessage(const ix::WebSocketMessagePtr &msg) {
switch (msg->type) {
case ix::WebSocketMessageType::Open: {
- m_signal_open.emit();
+ m_log->debug("Received open frame, dispatching");
+ m_open_dispatcher.emit();
} break;
case ix::WebSocketMessageType::Close: {
- m_signal_close.emit(msg->closeInfo.code);
+ m_log->debug("Received close frame, dispatching. {} ({}){}", msg->closeInfo.code, msg->closeInfo.reason, msg->closeInfo.remote ? " Remote" : "");
+ m_close_info = msg->closeInfo;
+ m_close_dispatcher.emit();
} break;
case ix::WebSocketMessageType::Message: {
m_signal_message.emit(msg->str);