diff options
-rw-r--r-- | src/discord/voiceclient.cpp | 17 | ||||
-rw-r--r-- | src/discord/websocket.cpp | 2 |
2 files changed, 10 insertions, 9 deletions
diff --git a/src/discord/voiceclient.cpp b/src/discord/voiceclient.cpp index 0b87032..c0679ce 100644 --- a/src/discord/voiceclient.cpp +++ b/src/discord/voiceclient.cpp @@ -132,6 +132,7 @@ DiscordVoiceClient::DiscordVoiceClient() { m_ws.signal_close().connect([this](uint16_t code) { printf("vws close %u\n", code); + Stop(); }); m_ws.signal_message().connect([this](const std::string &str) { @@ -175,16 +176,18 @@ void DiscordVoiceClient::Start() { m_ws.StartConnection("wss://" + m_endpoint + "/?v=7"); m_heartbeat_waiter.revive(); m_keepalive_waiter.revive(); + m_connected = true; + m_signal_connected.emit(); } void DiscordVoiceClient::Stop() { + m_ws.Stop(); + m_udp.Stop(); + m_heartbeat_waiter.kill(); + if (m_heartbeat_thread.joinable()) m_heartbeat_thread.join(); + m_keepalive_waiter.kill(); + if (m_keepalive_thread.joinable()) m_keepalive_thread.join(); if (m_connected) { - m_ws.Stop(); - m_udp.Stop(); - m_heartbeat_waiter.kill(); - if (m_heartbeat_thread.joinable()) m_heartbeat_thread.join(); - m_keepalive_waiter.kill(); - if (m_keepalive_thread.joinable()) m_keepalive_thread.join(); m_connected = false; m_signal_disconnected.emit(); } @@ -288,8 +291,6 @@ void DiscordVoiceClient::HandleGatewaySessionDescription(const VoiceGatewayMessa m_udp.SendEncrypted({ 0xF8, 0xFF, 0xFE }); m_udp.SendEncrypted({ 0xF8, 0xFF, 0xFE }); m_udp.Run(); - m_connected = true; - m_signal_connected.emit(); } void DiscordVoiceClient::HandleGatewaySpeaking(const VoiceGatewayMessage &m) { diff --git a/src/discord/websocket.cpp b/src/discord/websocket.cpp index 04970d3..cf0111c 100644 --- a/src/discord/websocket.cpp +++ b/src/discord/websocket.cpp @@ -8,6 +8,7 @@ Websocket::Websocket() }); m_close_dispatcher.connect([this]() { + Stop(); m_signal_close.emit(m_close_code); }); } @@ -58,7 +59,6 @@ void Websocket::OnMessage(const ix::WebSocketMessagePtr &msg) { 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: { m_signal_message.emit(msg->str); |