(ixcobra) add explicit event types for handshake, authentication and subscription failure, and handle those by exiting in ws_cobra_subcribe and friends

This commit is contained in:
Benjamin Sergeant
2020-03-26 18:54:28 -07:00
parent 09e4584fc8
commit d2db7310ff
7 changed files with 103 additions and 23 deletions

View File

@@ -37,6 +37,7 @@ namespace ix
std::atomic<bool> errorSending(false);
std::atomic<bool> stop(false);
std::atomic<bool> throttled(false);
std::atomic<bool> fatalCobraError(false);
QueueManager queueManager(maxQueueSize);
@@ -179,6 +180,7 @@ namespace ix
verbose,
&throttled,
&receivedCount,
&fatalCobraError,
&queueManager](ix::CobraConnectionEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
@@ -240,6 +242,21 @@ namespace ix
{
spdlog::info("Received websocket pong");
}
else if (eventType == ix::CobraConnection_EventType_Handshake_Error)
{
spdlog::error("Subscriber: Handshake error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Authentication_Error)
{
spdlog::error("Subscriber: Authentication error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Subscription_Error)
{
spdlog::error("Subscriber: Subscription error: {}", errMsg);
fatalCobraError = true;
}
});
// Run forever
@@ -251,6 +268,7 @@ namespace ix
std::this_thread::sleep_for(duration);
if (strict && errorSending) break;
if (fatalCobraError) break;
}
}
// Run for a duration, used by unittesting now
@@ -262,6 +280,7 @@ namespace ix
std::this_thread::sleep_for(duration);
if (strict && errorSending) break;
if (fatalCobraError) break;
}
}
@@ -272,12 +291,15 @@ namespace ix
conn.disconnect();
stop = true;
// progress thread
t1.join();
if (t2.joinable()) t2.join();
spdlog::info("heartbeat thread done");
// heartbeat thread
if (t2.joinable()) t2.join();
// sentry sender thread
t3.join();
return (strict && errorSending) ? -1 : (int) sentCount;
return ((strict && errorSending) || fatalCobraError) ? -1 : (int) sentCount;
}
} // namespace ix