@@ -286,6 +286,8 @@ class Session {
286286
287287 virtual ~Session () {
288288 CCAPI_LOGGER_FUNCTION_ENTER;
289+ this ->delayTimerByIdMap .clear ();
290+ this ->serviceByServiceNameExchangeMap .clear ();
289291 if (this ->useInternalServiceContextPtr ) {
290292 delete this ->serviceContextPtr ;
291293 }
@@ -597,6 +599,9 @@ class Session {
597599
598600 virtual void stop () {
599601 boost::asio::post (*this ->serviceContextPtr ->ioContextPtr , [this ]() {
602+ for (const auto & [_, delayTimer] : this ->delayTimerByIdMap ) {
603+ delayTimer->cancel ();
604+ }
600605 for (const auto & x : this ->serviceByServiceNameExchangeMap ) {
601606 for (const auto & y : x.second ) {
602607 y.second ->stop ();
@@ -655,7 +660,7 @@ class Session {
655660 auto subscriptionList = x.second ;
656661 if (this ->serviceByServiceNameExchangeMap .find (serviceName) == this ->serviceByServiceNameExchangeMap .end ()) {
657662 this ->onError (Event::Type::SUBSCRIPTION_STATUS, Message::Type::SUBSCRIPTION_FAILURE,
658- " please enable service: " + serviceName + " , and the exchanges that you want" );
663+ " please enable service: " + serviceName + " , and the exchanges that you want for subscriptionList " + toString (subscriptionList) );
659664 return ;
660665 }
661666 if (serviceName == CCAPI_MARKET_DATA) {
@@ -722,7 +727,8 @@ class Session {
722727 auto serviceName = subscription.getServiceName ();
723728 CCAPI_LOGGER_DEBUG (" serviceName = " + serviceName);
724729 if (this ->serviceByServiceNameExchangeMap .find (serviceName) == this ->serviceByServiceNameExchangeMap .end ()) {
725- this ->onError (Event::Type::FIX_STATUS, Message::Type::FIX_FAILURE, " please enable service: " + serviceName + " , and the exchanges that you want" );
730+ this ->onError (Event::Type::FIX_STATUS, Message::Type::FIX_FAILURE,
731+ " please enable service: " + serviceName + " , and the exchanges that you want for subscription " + toString (subscription));
726732 return ;
727733 }
728734 auto exchange = subscription.getExchange ();
@@ -776,7 +782,8 @@ class Session {
776782 auto serviceName = request.getServiceName ();
777783 CCAPI_LOGGER_DEBUG (" serviceName = " + serviceName);
778784 if (this ->serviceByServiceNameExchangeMap .find (serviceName) == this ->serviceByServiceNameExchangeMap .end ()) {
779- this ->onError (Event::Type::FIX_STATUS, Message::Type::FIX_FAILURE, " please enable service: " + serviceName + " , and the exchanges that you want" );
785+ this ->onError (Event::Type::FIX_STATUS, Message::Type::FIX_FAILURE,
786+ " please enable service: " + serviceName + " , and the exchanges that you want for request " + toString (request));
780787 return ;
781788 }
782789 std::map<std::string, std::shared_ptr<Service>>& serviceByExchangeMap = this ->serviceByServiceNameExchangeMap .at (serviceName);
@@ -802,7 +809,9 @@ class Session {
802809 const auto & serviceName = request.getServiceName ();
803810 CCAPI_LOGGER_DEBUG (" serviceName = " + serviceName);
804811 if (this ->serviceByServiceNameExchangeMap .find (serviceName) == this ->serviceByServiceNameExchangeMap .end ()) {
805- this ->onError (Event::Type::REQUEST_STATUS, Message::Type::REQUEST_FAILURE, " please enable service: " + serviceName + " , and the exchanges that you want" );
812+ this ->onError (Event::Type::REQUEST_STATUS, Message::Type::REQUEST_FAILURE,
813+ " please enable service: " + serviceName + " , and the exchanges that you want for websocketOrderEntrySubscriptionCorrelationId " +
814+ toString (websocketOrderEntrySubscriptionCorrelationId) + " , request = " + toString (request));
806815 return ;
807816 }
808817 const std::map<std::string, std::shared_ptr<Service>>& serviceByExchangeMap = this ->serviceByServiceNameExchangeMap .at (serviceName);
@@ -841,7 +850,7 @@ class Session {
841850 CCAPI_LOGGER_DEBUG (" serviceName = " + serviceName);
842851 if (this ->serviceByServiceNameExchangeMap .find (serviceName) == this ->serviceByServiceNameExchangeMap .end ()) {
843852 this ->onError (Event::Type::REQUEST_STATUS, Message::Type::REQUEST_FAILURE,
844- " please enable service: " + serviceName + " , and the exchanges that you want" , eventQueuePtr);
853+ " please enable service: " + serviceName + " , and the exchanges that you want for request " + toString (request) , eventQueuePtr);
845854 return ;
846855 }
847856 std::map<std::string, std::shared_ptr<Service>>& serviceByExchangeMap = this ->serviceByServiceNameExchangeMap .at (serviceName);
@@ -902,8 +911,7 @@ class Session {
902911 virtual void setTimer (const std::string& id, long delayMilliseconds, std::function<void (const boost::system::error_code&)> errorHandler,
903912 std::function<void()> successHandler) {
904913 boost::asio::post (*this ->serviceContextPtr ->ioContextPtr , [this , id, delayMilliseconds, errorHandler, successHandler]() {
905- std::shared_ptr<boost::asio::steady_timer> timerPtr (
906- new boost::asio::steady_timer (*this ->serviceContextPtr ->ioContextPtr , boost::asio::chrono::milliseconds (delayMilliseconds)));
914+ auto timerPtr = std::make_shared<boost::asio::steady_timer>(*this ->serviceContextPtr ->ioContextPtr , boost::asio::chrono::milliseconds (delayMilliseconds));
907915 timerPtr->async_wait ([this , id, errorHandler, successHandler](const boost::system::error_code& ec) {
908916 if (this ->eventHandler ) {
909917 if (!this ->eventDispatcher ) {
0 commit comments