From 0aaebf9ea77eede8a347aa71b95e86686d04a854 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Thu, 15 Apr 2021 02:32:47 -0400 Subject: fix handling of reconnect messages --- discord/discord.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'discord/discord.cpp') diff --git a/discord/discord.cpp b/discord/discord.cpp index baa0b28..17ea74c 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -1030,11 +1030,13 @@ void DiscordClient::HandleGatewayMessage(std::string str) { } void DiscordClient::HandleGatewayHello(const GatewayMessage &msg) { + m_client_connected = true; HelloMessageData d = msg.Data; m_heartbeat_msec = d.HeartbeatInterval; m_heartbeat_waiter.revive(); m_heartbeat_thread = std::thread(std::bind(&DiscordClient::HeartbeatThread, this)); m_signal_connected.emit(); // socket is connected before this but emitting here should b fine + m_reconnecting = false; // maybe should go elsewhere? if (m_wants_resume) { m_wants_resume = false; SendResume(); @@ -1477,13 +1479,15 @@ void DiscordClient::HandleGatewayReconnect(const GatewayMessage &msg) { m_heartbeat_waiter.kill(); if (m_heartbeat_thread.joinable()) m_heartbeat_thread.join(); + m_reconnecting = true; + m_wants_resume = true; + m_heartbeat_acked = true; + m_websocket.Stop(1012); // 1000 (kNormalClosureCode) and 1001 will invalidate the session id std::memset(&m_zstream, 0, sizeof(m_zstream)); inflateInit2(&m_zstream, MAX_WBITS + 32); - m_heartbeat_acked = true; - m_wants_resume = true; m_websocket.StartConnection(DiscordGateway); } @@ -1498,6 +1502,7 @@ void DiscordClient::HandleGatewayInvalidSession(const GatewayMessage &msg) { m_heartbeat_acked = true; m_wants_resume = false; + m_reconnecting = true; m_heartbeat_waiter.kill(); if (m_heartbeat_thread.joinable()) m_heartbeat_thread.join(); @@ -1680,9 +1685,6 @@ void DiscordClient::HandleSocketClose(uint16_t code) { printf("got socket close code: %d\n", code); auto close_code = static_cast(code); auto cb = [this, close_code]() { - inflateEnd(&m_zstream); - m_compressed_buf.clear(); - m_heartbeat_waiter.kill(); if (m_heartbeat_thread.joinable()) m_heartbeat_thread.join(); m_client_connected = false; @@ -1691,9 +1693,7 @@ void DiscordClient::HandleSocketClose(uint16_t code) { m_chan_to_message_map.clear(); m_guild_to_users.clear(); - m_websocket.Stop(); - - m_signal_disconnected.emit(false, close_code); + m_signal_disconnected.emit(m_reconnecting, close_code); }; m_generic_mutex.lock(); m_generic_queue.push(cb); -- cgit v1.2.3