diff options
-rw-r--r-- | src/discord/websocket.cpp | 15 | ||||
-rw-r--r-- | src/discord/websocket.hpp | 5 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/discord/websocket.cpp b/src/discord/websocket.cpp index 46a4b90..04970d3 100644 --- a/src/discord/websocket.cpp +++ b/src/discord/websocket.cpp @@ -1,7 +1,16 @@ #include "websocket.hpp" #include <utility> -Websocket::Websocket() = default; +Websocket::Websocket() + : m_close_code(ix::WebSocketCloseConstants::kNormalClosureCode) { + m_open_dispatcher.connect([this]() { + m_signal_open.emit(); + }); + + m_close_dispatcher.connect([this]() { + m_signal_close.emit(m_close_code); + }); +} void Websocket::StartConnection(const std::string &url) { m_websocket.disableAutomaticReconnection(); @@ -44,9 +53,11 @@ 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_open_dispatcher.emit(); } break; case ix::WebSocketMessageType::Close: { + m_close_code = msg->closeInfo.code; + m_close_dispatcher.emit(); m_signal_close.emit(msg->closeInfo.code); } break; case ix::WebSocketMessageType::Message: { diff --git a/src/discord/websocket.hpp b/src/discord/websocket.hpp index ca7dcc6..ba55254 100644 --- a/src/discord/websocket.hpp +++ b/src/discord/websocket.hpp @@ -3,6 +3,7 @@ #include <ixwebsocket/IXWebSocket.h> #include <string> #include <functional> +#include <glibmm.h> #include <nlohmann/json.hpp> #include <sigc++/sigc++.h> @@ -42,4 +43,8 @@ private: type_signal_message m_signal_message; bool m_print_messages = true; + + Glib::Dispatcher m_open_dispatcher; + Glib::Dispatcher m_close_dispatcher; + std::atomic<uint16_t> m_close_code; }; |