(ixcobra) make CobraConnection_EventType an enum class (CobraEventType)

This commit is contained in:
Benjamin Sergeant 2020-04-15 16:59:17 -07:00
parent 2c4bf8f4bd
commit 386ef3ab04
14 changed files with 122 additions and 105 deletions

View File

@ -1,6 +1,10 @@
# Changelog
All changes to this project will be documented in this file.
## [9.2.8] - 2020-04-15
(ixcobra) make CobraConnection_EventType an enum class (CobraEventType)
## [9.2.7] - 2020-04-14
(ixsentry) add a library method to upload a payload directly to sentry

View File

@ -181,12 +181,12 @@ namespace ix
&throttled,
&receivedCount,
&fatalCobraError,
&queueManager](ix::CobraConnectionEventType eventType,
&queueManager](ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
spdlog::info("Subscriber connected");
@ -195,11 +195,11 @@ namespace ix
spdlog::info("{}: {}", it.first, it.second);
}
}
if (eventType == ix::CobraConnection_EventType_Closed)
if (eventType == ix::CobraEventType::Closed)
{
spdlog::info("Subscriber closed");
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
spdlog::info("Subscriber authenticated");
conn.subscribe(channel,
@ -222,37 +222,37 @@ namespace ix
queueManager.add(msg);
});
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
spdlog::info("Subscriber: subscribed to channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
spdlog::info("Subscriber: unsubscribed from channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
spdlog::error("Subscriber: error {}", errMsg);
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
spdlog::error("Published message hacked: {}", msgId);
}
else if (eventType == ix::CobraConnection_EventType_Pong)
else if (eventType == ix::CobraEventType::Pong)
{
spdlog::info("Received websocket pong");
}
else if (eventType == ix::CobraConnection_EventType_Handshake_Error)
else if (eventType == ix::CobraEventType::HandshakeError)
{
spdlog::error("Subscriber: Handshake error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Authentication_Error)
else if (eventType == ix::CobraEventType::AuthenticationError)
{
spdlog::error("Subscriber: Authentication error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Subscription_Error)
else if (eventType == ix::CobraEventType::SubscriptionError)
{
spdlog::error("Subscriber: Subscription error: {}", errMsg);
fatalCobraError = true;

View File

@ -202,12 +202,12 @@ namespace ix
conn.setEventCallback(
[&conn, &channel, &filter, &position, &jsonWriter, verbose, &queueManager, &receivedCount, &fatalCobraError](
ix::CobraConnectionEventType eventType,
ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
spdlog::info("Subscriber connected");
@ -216,11 +216,11 @@ namespace ix
spdlog::info("{}: {}", it.first, it.second);
}
}
if (eventType == ix::CobraConnection_EventType_Closed)
if (eventType == ix::CobraEventType::Closed)
{
spdlog::info("Subscriber closed");
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
spdlog::info("Subscriber authenticated");
conn.subscribe(channel,
@ -239,37 +239,37 @@ namespace ix
queueManager.add(msg);
});
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
spdlog::info("Subscriber: subscribed to channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
spdlog::info("Subscriber: unsubscribed from channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
spdlog::error("Subscriber: error {}", errMsg);
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
spdlog::error("Published message hacked: {}", msgId);
}
else if (eventType == ix::CobraConnection_EventType_Pong)
else if (eventType == ix::CobraEventType::Pong)
{
spdlog::info("Received websocket pong");
}
else if (eventType == ix::CobraConnection_EventType_Handshake_Error)
else if (eventType == ix::CobraEventType::HandshakeError)
{
spdlog::error("Subscriber: Handshake error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Authentication_Error)
else if (eventType == ix::CobraEventType::AuthenticationError)
{
spdlog::error("Subscriber: Authentication error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Subscription_Error)
else if (eventType == ix::CobraEventType::SubscriptionError)
{
spdlog::error("Subscriber: Subscription error: {}", errMsg);
fatalCobraError = true;

View File

@ -14,6 +14,8 @@ set (IXCOBRA_HEADERS
ixcobra/IXCobraMetricsThreadedPublisher.h
ixcobra/IXCobraMetricsPublisher.h
ixcobra/IXCobraConfig.h
ixcobra/IXCobraEvent.h
ixcobra/IXCobraEventType.h
)
add_library(ixcobra STATIC

View File

@ -87,7 +87,7 @@ namespace ix
_eventCallback = eventCallback;
}
void CobraConnection::invokeEventCallback(ix::CobraConnectionEventType eventType,
void CobraConnection::invokeEventCallback(ix::CobraEventType eventType,
const std::string& errorMsg,
const WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
@ -105,7 +105,7 @@ namespace ix
{
std::stringstream ss;
ss << errorMsg << " : received pdu => " << serializedPdu;
invokeEventCallback(ix::CobraConnection_EventType_Error, ss.str());
invokeEventCallback(ix::CobraEventType::Error, ss.str());
}
void CobraConnection::disconnect()
@ -124,7 +124,7 @@ namespace ix
std::stringstream ss;
if (msg->type == ix::WebSocketMessageType::Open)
{
invokeEventCallback(ix::CobraConnection_EventType_Open,
invokeEventCallback(ix::CobraEventType::Open,
std::string(),
msg->openInfo.headers);
sendHandshakeMessage();
@ -136,7 +136,7 @@ namespace ix
std::stringstream ss;
ss << "Close code " << msg->closeInfo.code;
ss << " reason " << msg->closeInfo.reason;
invokeEventCallback(ix::CobraConnection_EventType_Closed,
invokeEventCallback(ix::CobraEventType::Closed,
ss.str());
}
else if (msg->type == ix::WebSocketMessageType::Message)
@ -166,18 +166,18 @@ namespace ix
}
else if (action == "auth/handshake/error")
{
invokeEventCallback(ix::CobraConnection_EventType_Handshake_Error,
invokeEventCallback(ix::CobraEventType::HandshakeError,
msg->str);
}
else if (action == "auth/authenticate/ok")
{
_authenticated = true;
invokeEventCallback(ix::CobraConnection_EventType_Authenticated);
invokeEventCallback(ix::CobraEventType::Authenticated);
flushQueue();
}
else if (action == "auth/authenticate/error")
{
invokeEventCallback(ix::CobraConnection_EventType_Authentication_Error,
invokeEventCallback(ix::CobraEventType::AuthenticationError,
msg->str);
}
else if (action == "rtm/subscription/data")
@ -193,7 +193,7 @@ namespace ix
}
else if (action == "rtm/subscribe/error")
{
invokeEventCallback(ix::CobraConnection_EventType_Subscription_Error,
invokeEventCallback(ix::CobraEventType::SubscriptionError,
msg->str);
}
else if (action == "rtm/unsubscribe/ok")
@ -234,7 +234,7 @@ namespace ix
}
else if (msg->type == ix::WebSocketMessageType::Pong)
{
invokeEventCallback(ix::CobraConnection_EventType_Pong);
invokeEventCallback(ix::CobraEventType::Pong);
}
});
}
@ -396,7 +396,7 @@ namespace ix
if (!subscriptionId.isString()) return false;
invokeEventCallback(ix::CobraConnection_EventType_Subscribed,
invokeEventCallback(ix::CobraEventType::Subscribed,
std::string(), WebSocketHttpHeaders(),
subscriptionId.asString());
return true;
@ -414,7 +414,7 @@ namespace ix
if (!subscriptionId.isString()) return false;
invokeEventCallback(ix::CobraConnection_EventType_UnSubscribed,
invokeEventCallback(ix::CobraEventType::UnSubscribed,
std::string(), WebSocketHttpHeaders(),
subscriptionId.asString());
return true;
@ -462,7 +462,7 @@ namespace ix
uint64_t msgId = id.asUInt64();
invokeEventCallback(ix::CobraConnection_EventType_Published,
invokeEventCallback(ix::CobraEventType::Published,
std::string(), WebSocketHttpHeaders(),
std::string(), msgId);

View File

@ -8,6 +8,7 @@
#include <ixwebsocket/IXWebSocketHttpHeaders.h>
#include <ixwebsocket/IXWebSocketPerMessageDeflateOptions.h>
#include "IXCobraEventType.h"
#include <json/json.h>
#include <memory>
#include <mutex>
@ -28,21 +29,6 @@ namespace ix
class WebSocket;
struct SocketTLSOptions;
enum CobraConnectionEventType
{
CobraConnection_EventType_Authenticated = 0,
CobraConnection_EventType_Error = 1,
CobraConnection_EventType_Open = 2,
CobraConnection_EventType_Closed = 3,
CobraConnection_EventType_Subscribed = 4,
CobraConnection_EventType_UnSubscribed = 5,
CobraConnection_EventType_Published = 6,
CobraConnection_EventType_Pong = 7,
CobraConnection_EventType_Handshake_Error = 8,
CobraConnection_EventType_Authentication_Error = 9,
CobraConnection_EventType_Subscription_Error = 10
};
enum CobraConnectionPublishMode
{
CobraConnection_PublishMode_Immediate = 0,
@ -50,7 +36,7 @@ namespace ix
};
using SubscriptionCallback = std::function<void(const Json::Value&, const std::string&)>;
using EventCallback = std::function<void(CobraConnectionEventType,
using EventCallback = std::function<void(CobraEventType,
const std::string&,
const WebSocketHttpHeaders&,
const std::string&,
@ -171,7 +157,7 @@ namespace ix
static void invokePublishTrackerCallback(bool sent, bool acked);
/// Invoke event callbacks
void invokeEventCallback(CobraConnectionEventType eventType,
void invokeEventCallback(CobraEventType eventType,
const std::string& errorMsg = std::string(),
const WebSocketHttpHeaders& headers = WebSocketHttpHeaders(),
const std::string& subscriptionId = std::string(),

View File

@ -0,0 +1,25 @@
/*
* IXCobraEventType.h
* Author: Benjamin Sergeant
* Copyright (c) 2020 Machine Zone, Inc. All rights reserved.
*/
#pragma once
namespace ix
{
enum class CobraEventType
{
Authenticated = 0,
Error = 1,
Open = 2,
Closed = 3,
Subscribed = 4,
UnSubscribed = 5,
Published = 6,
Pong = 7,
HandshakeError = 8,
AuthenticationError = 9,
SubscriptionError = 10
};
}

View File

@ -24,7 +24,7 @@ namespace ix
{
_cobra_connection.setEventCallback(
[]
(ix::CobraConnectionEventType eventType,
(ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
@ -32,7 +32,7 @@ namespace ix
{
std::stringstream ss;
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
ss << "Handshake headers" << std::endl;
@ -41,31 +41,31 @@ namespace ix
ss << it.first << ": " << it.second << std::endl;
}
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
ss << "Authenticated";
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
ss << "Error: " << errMsg;
}
else if (eventType == ix::CobraConnection_EventType_Closed)
else if (eventType == ix::CobraEventType::Closed)
{
ss << "Connection closed: " << errMsg;
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
ss << "Subscribed through subscription id: " << subscriptionId;
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
ss << "Unsubscribed through subscription id: " << subscriptionId;
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
ss << "Published message " << msgId << " acked";
}
else if (eventType == ix::CobraConnection_EventType_Pong)
else if (eventType == ix::CobraEventType::Pong)
{
ss << "Received websocket pong";
}

View File

@ -6,4 +6,4 @@
#pragma once
#define IX_WEBSOCKET_VERSION "9.2.7"
#define IX_WEBSOCKET_VERSION "9.2.8"

View File

@ -180,12 +180,12 @@ namespace
_conn.configure(_cobraConfig);
_conn.connect();
_conn.setEventCallback([this, channel](ix::CobraConnectionEventType eventType,
_conn.setEventCallback([this, channel](ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
log("Subscriber connected: " + _user);
for (auto&& it : headers)
@ -193,29 +193,29 @@ namespace
log("Headers " + it.first + " " + it.second);
}
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
log("Subscriber authenticated: " + _user);
subscribe(channel);
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
log(errMsg + _user);
}
else if (eventType == ix::CobraConnection_EventType_Closed)
else if (eventType == ix::CobraEventType::Closed)
{
log("Connection closed: " + _user);
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
log("Subscription ok: " + _user + " subscription_id " + subscriptionId);
_connectedAndSubscribed = true;
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
log("Unsubscription ok: " + _user + " subscription_id " + subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
TLogger() << "Subscriber: published message acked: " << msgId;
}
@ -248,7 +248,7 @@ namespace
ix::msleep(50);
_conn.disconnect();
_conn.setEventCallback([](ix::CobraConnectionEventType /*eventType*/,
_conn.setEventCallback([](ix::CobraEventType /*eventType*/,
const std::string& /*errMsg*/,
const ix::WebSocketHttpHeaders& /*headers*/,
const std::string& /*subscriptionId*/,

View File

@ -54,12 +54,12 @@ namespace
conn.configure(config);
conn.connect();
conn.setEventCallback([&conn, &channel](ix::CobraConnectionEventType eventType,
conn.setEventCallback([&conn, &channel](ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
TLogger() << "Subscriber connected:";
for (auto&& it : headers)
@ -67,11 +67,11 @@ namespace
log("Headers " + it.first + " " + it.second);
}
}
if (eventType == ix::CobraConnection_EventType_Error)
if (eventType == ix::CobraEventType::Error)
{
TLogger() << "Subscriber error:" << errMsg;
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
log("Subscriber authenticated");
std::string filter;
@ -92,7 +92,7 @@ namespace
gMessageCount++;
});
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
TLogger() << "Subscriber: subscribed to channel " << subscriptionId;
if (subscriptionId == channel)
@ -104,7 +104,7 @@ namespace
TLogger() << "Subscriber: unexpected channel " << subscriptionId;
}
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
TLogger() << "Subscriber: ununexpected from channel " << subscriptionId;
if (subscriptionId != channel)
@ -112,7 +112,7 @@ namespace
TLogger() << "Subscriber: unexpected channel " << subscriptionId;
}
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
TLogger() << "Subscriber: published message acked: " << msgId;
}

View File

@ -106,12 +106,12 @@ namespace ix
&msgPerSeconds,
&conditionVariableMutex,
&condition,
&queue](ix::CobraConnectionEventType eventType,
&queue](ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
spdlog::info("Subscriber connected");
@ -120,7 +120,7 @@ namespace ix
spdlog::info("{}: {}", it.first, it.second);
}
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
spdlog::info("Subscriber authenticated");
@ -141,19 +141,19 @@ namespace ix
msgCount++;
});
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
spdlog::info("Subscriber: subscribed to channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
spdlog::info("Subscriber: unsubscribed from channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
spdlog::error("Subscriber: error {}", errMsg);
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
spdlog::error("Published message hacked: {}", msgId);
}

View File

@ -39,12 +39,12 @@ namespace ix
std::atomic<bool> messageAcked(false);
conn.setEventCallback([&conn, &channel, &data, &authenticated, &messageAcked](
ix::CobraConnectionEventType eventType,
ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
spdlog::info("Publisher connected");
@ -53,7 +53,7 @@ namespace ix
spdlog::info("{}: {}", it.first, it.second);
}
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
spdlog::info("Publisher authenticated");
authenticated = true;
@ -64,24 +64,24 @@ namespace ix
spdlog::info("Published msg {}", msgId);
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
spdlog::info("Publisher: subscribed to channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
spdlog::info("Publisher: unsubscribed from channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
spdlog::error("Publisher: error {}", errMsg);
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
spdlog::info("Published message id {} acked", msgId);
messageAcked = true;
}
else if (eventType == ix::CobraConnection_EventType_Pong)
else if (eventType == ix::CobraEventType::Pong)
{
spdlog::info("Received websocket pong");
}

View File

@ -106,12 +106,12 @@ namespace ix
&msgPerSeconds,
&quiet,
&fluentd,
&fatalCobraError](ix::CobraConnectionEventType eventType,
&fatalCobraError](ix::CobraEventType eventType,
const std::string& errMsg,
const ix::WebSocketHttpHeaders& headers,
const std::string& subscriptionId,
CobraConnection::MsgId msgId) {
if (eventType == ix::CobraConnection_EventType_Open)
if (eventType == ix::CobraEventType::Open)
{
spdlog::info("Subscriber connected");
@ -120,7 +120,7 @@ namespace ix
spdlog::info("{}: {}", it.first, it.second);
}
}
else if (eventType == ix::CobraConnection_EventType_Authenticated)
else if (eventType == ix::CobraEventType::Authenticated)
{
spdlog::info("Subscriber authenticated");
spdlog::info("Subscribing to {} at position {}", channel, subscriptionPosition);
@ -145,37 +145,37 @@ namespace ix
subscriptionPosition = position;
});
}
else if (eventType == ix::CobraConnection_EventType_Subscribed)
else if (eventType == ix::CobraEventType::Subscribed)
{
spdlog::info("Subscriber: subscribed to channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_UnSubscribed)
else if (eventType == ix::CobraEventType::UnSubscribed)
{
spdlog::info("Subscriber: unsubscribed from channel {}", subscriptionId);
}
else if (eventType == ix::CobraConnection_EventType_Error)
else if (eventType == ix::CobraEventType::Error)
{
spdlog::error("Subscriber: error {}", errMsg);
}
else if (eventType == ix::CobraConnection_EventType_Published)
else if (eventType == ix::CobraEventType::Published)
{
spdlog::error("Published message hacked: {}", msgId);
}
else if (eventType == ix::CobraConnection_EventType_Pong)
else if (eventType == ix::CobraEventType::Pong)
{
spdlog::info("Received websocket pong");
}
else if (eventType == ix::CobraConnection_EventType_Handshake_Error)
else if (eventType == ix::CobraEventType::HandshakeError)
{
spdlog::error("Subscriber: Handshake error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Authentication_Error)
else if (eventType == ix::CobraEventType::AuthenticationError)
{
spdlog::error("Subscriber: Authentication error: {}", errMsg);
fatalCobraError = true;
}
else if (eventType == ix::CobraConnection_EventType_Subscription_Error)
else if (eventType == ix::CobraEventType::SubscriptionError)
{
spdlog::error("Subscriber: Subscription error: {}", errMsg);
fatalCobraError = true;