diff --git a/ixsnake/ixsnake/IXSnakeConnectionState.h b/ixsnake/ixsnake/IXSnakeConnectionState.h index 948c101a..c75752a7 100644 --- a/ixsnake/ixsnake/IXSnakeConnectionState.h +++ b/ixsnake/ixsnake/IXSnakeConnectionState.h @@ -17,6 +17,15 @@ namespace snake class SnakeConnectionState : public ix::ConnectionState { public: + virtual ~SnakeConnectionState() + { + if (subscriptionThread.joinable()) + { + subscriptionRedisClient.stop(); + subscriptionThread.join(); + } + } + std::string getNonce() { return _nonce; @@ -52,19 +61,11 @@ namespace snake return _redisClient; } - void cleanup() - { - if (subscriptionThread.joinable()) - { - subscriptionRedisClient.stop(); - subscriptionThread.join(); - } - } - // We could make those accessible through methods std::thread subscriptionThread; std::string appChannel; std::string subscriptionId; + uint64_t id; std::unique_ptr streamSql; ix::RedisClient subscriptionRedisClient; ix::RedisClient::OnRedisSubscribeResponseCallback onRedisSubscribeResponseCallback; diff --git a/ixsnake/ixsnake/IXSnakeProtocol.cpp b/ixsnake/ixsnake/IXSnakeProtocol.cpp index 9658dad6..ef6d7d73 100644 --- a/ixsnake/ixsnake/IXSnakeProtocol.cpp +++ b/ixsnake/ixsnake/IXSnakeProtocol.cpp @@ -198,9 +198,8 @@ namespace snake std::string filterStr = pdu["body"]["filter"]; } state->streamSql = std::make_unique(filterStr); - - int id = 0; - state->onRedisSubscribeCallback = [&ws, &id, state](const std::string& messageStr) { + state->id = 0; + state->onRedisSubscribeCallback = [&ws, state](const std::string& messageStr) { auto msg = nlohmann::json::parse(messageStr); msg = msg["body"]["message"]; @@ -212,7 +211,7 @@ namespace snake nlohmann::json response = { {"action", "rtm/subscription/data"}, - {"id", id++}, + {"id", state->id++}, {"body", {{"subscription_id", state->subscriptionId}, {"position", "0-0"}, {"messages", {msg}}}}}; diff --git a/ixsnake/ixsnake/IXSnakeServer.cpp b/ixsnake/ixsnake/IXSnakeServer.cpp index 0d7fedf9..bcc38053 100644 --- a/ixsnake/ixsnake/IXSnakeServer.cpp +++ b/ixsnake/ixsnake/IXSnakeServer.cpp @@ -99,8 +99,6 @@ namespace snake ss << "Closed connection" << " code " << msg->closeInfo.code << " reason " << msg->closeInfo.reason << std::endl; - - state->cleanup(); } else if (msg->type == ix::WebSocketMessageType::Error) {