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
+13 -2
View File
@@ -1,7 +1,16 @@
#include "websocket.hpp" #include "websocket.hpp"
#include <utility> #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) { void Websocket::StartConnection(const std::string &url) {
m_websocket.disableAutomaticReconnection(); m_websocket.disableAutomaticReconnection();
@@ -44,9 +53,11 @@ void Websocket::Send(const nlohmann::json &j) {
void Websocket::OnMessage(const ix::WebSocketMessagePtr &msg) { void Websocket::OnMessage(const ix::WebSocketMessagePtr &msg) {
switch (msg->type) { switch (msg->type) {
case ix::WebSocketMessageType::Open: { case ix::WebSocketMessageType::Open: {
m_signal_open.emit(); m_open_dispatcher.emit();
} break; } break;
case ix::WebSocketMessageType::Close: { case ix::WebSocketMessageType::Close: {
m_close_code = msg->closeInfo.code;
m_close_dispatcher.emit();
m_signal_close.emit(msg->closeInfo.code); m_signal_close.emit(msg->closeInfo.code);
} break; } break;
case ix::WebSocketMessageType::Message: { case ix::WebSocketMessageType::Message: {
+5
View File
@@ -3,6 +3,7 @@
#include <ixwebsocket/IXWebSocket.h> #include <ixwebsocket/IXWebSocket.h>
#include <string> #include <string>
#include <functional> #include <functional>
#include <glibmm.h>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include <sigc++/sigc++.h> #include <sigc++/sigc++.h>
@@ -42,4 +43,8 @@ private:
type_signal_message m_signal_message; type_signal_message m_signal_message;
bool m_print_messages = true; bool m_print_messages = true;
Glib::Dispatcher m_open_dispatcher;
Glib::Dispatcher m_close_dispatcher;
std::atomic<uint16_t> m_close_code;
}; };