summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-09-05 21:00:00 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2020-09-05 21:00:00 -0400
commit7d41206a198495c2355e16512391a3aa0483d0ca (patch)
treee98278fb9aebf8bb624bdae80d387c5b7b661bbc /discord
parent8e749ac3bf048d2790496d2e8d23da476c56ff55 (diff)
downloadabaddon-portaudio-7d41206a198495c2355e16512391a3aa0483d0ca.tar.gz
abaddon-portaudio-7d41206a198495c2355e16512391a3aa0483d0ca.zip
wrap gateway message handling in a big ol try/catch
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp78
1 files changed, 41 insertions, 37 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index 02c11ea..6400bfa 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -270,44 +270,48 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
return;
}
- switch (m.Opcode) {
- case GatewayOp::Hello: {
- HelloMessageData d = m.Data;
- m_heartbeat_msec = d.HeartbeatInterval;
- assert(!m_heartbeat_thread.joinable()); // handle reconnects later
- m_heartbeat_thread = std::thread(std::bind(&DiscordClient::HeartbeatThread, this));
- SendIdentify();
- } break;
- case GatewayOp::HeartbeatAck: {
- m_heartbeat_acked = true;
- } break;
- case GatewayOp::Event: {
- auto iter = m_event_map.find(m.Type);
- if (iter == m_event_map.end()) {
- printf("Unknown event %s\n", m.Type.c_str());
+ try {
+ switch (m.Opcode) {
+ case GatewayOp::Hello: {
+ HelloMessageData d = m.Data;
+ m_heartbeat_msec = d.HeartbeatInterval;
+ assert(!m_heartbeat_thread.joinable()); // handle reconnects later
+ m_heartbeat_thread = std::thread(std::bind(&DiscordClient::HeartbeatThread, this));
+ SendIdentify();
+ } break;
+ case GatewayOp::HeartbeatAck: {
+ m_heartbeat_acked = true;
+ } break;
+ case GatewayOp::Event: {
+ auto iter = m_event_map.find(m.Type);
+ if (iter == m_event_map.end()) {
+ printf("Unknown event %s\n", m.Type.c_str());
+ break;
+ }
+ switch (iter->second) {
+ case GatewayEvent::READY: {
+ HandleGatewayReady(m);
+ } break;
+ case GatewayEvent::MESSAGE_CREATE: {
+ HandleGatewayMessageCreate(m);
+ } break;
+ case GatewayEvent::MESSAGE_DELETE: {
+ HandleGatewayMessageDelete(m);
+ } break;
+ case GatewayEvent::MESSAGE_UPDATE: {
+ HandleGatewayMessageUpdate(m);
+ } break;
+ case GatewayEvent::GUILD_MEMBER_LIST_UPDATE: {
+ HandleGatewayGuildMemberListUpdate(m);
+ } break;
+ }
+ } break;
+ default:
+ printf("Unknown opcode %d\n", m.Opcode);
break;
- }
- switch (iter->second) {
- case GatewayEvent::READY: {
- HandleGatewayReady(m);
- } break;
- case GatewayEvent::MESSAGE_CREATE: {
- HandleGatewayMessageCreate(m);
- } break;
- case GatewayEvent::MESSAGE_DELETE: {
- HandleGatewayMessageDelete(m);
- } break;
- case GatewayEvent::MESSAGE_UPDATE: {
- HandleGatewayMessageUpdate(m);
- } break;
- case GatewayEvent::GUILD_MEMBER_LIST_UPDATE: {
- HandleGatewayGuildMemberListUpdate(m);
- } break;
- }
- } break;
- default:
- printf("Unknown opcode %d\n", m.Opcode);
- break;
+ }
+ } catch (std::exception &e) {
+ fprintf(stderr, "error handling message (opcode %d): %s\n", m.Opcode, e.what());
}
}