diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-05-29 06:29:39 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-29 06:29:39 +0000 |
commit | 3fbc71e369fedddd7ebc2eb08c9721860ae6b597 (patch) | |
tree | 297c9e2d905b0ba33978be5f64b9624773661a30 /src/discord/websocket.cpp | |
parent | 8e9fb27e0bec4c9dd4b706e15987cbb16cf42005 (diff) | |
parent | 7da37a2fa90cebf43631c74aa1abfb9842502291 (diff) | |
download | abaddon-portaudio-3fbc71e369fedddd7ebc2eb08c9721860ae6b597.tar.gz abaddon-portaudio-3fbc71e369fedddd7ebc2eb08c9721860ae6b597.zip |
Merge pull request #105 from uowuo/voice
Voice support 🤯
Diffstat (limited to 'src/discord/websocket.cpp')
-rw-r--r-- | src/discord/websocket.cpp | 51 |
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); |