synchronize ws close/open to creating thread

This commit is contained in:
ouwou
2022-09-28 20:44:33 -04:00
parent 0571a05497
commit a79b2d418e
2 changed files with 18 additions and 2 deletions

View File

@@ -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: {

View File

@@ -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;
};