diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index eae50161..438c3699 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -301,6 +301,10 @@ namespace sio m_ping_timeout_timer->expires_from_now(milliseconds(m_ping_timeout), timeout_ec); m_ping_timeout_timer->async_wait(lib::bind(&client_impl::timeout_pong, this,lib::placeholders::_1)); } + if(m_ping_sent_listener) + { + m_ping_sent_listener(); + } } void client_impl::timeout_pong(const boost::system::error_code &ec) @@ -505,6 +509,10 @@ namespace sio m_ping_timeout_timer->cancel(); m_ping_timeout_timer.reset(); } + if(m_pong_received_listener) + { + m_pong_received_listener(); + } } void client_impl::on_decode(packet const& p) diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 87ac1d03..79e593d0 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -64,6 +64,10 @@ namespace sio void set_##__FIELD__(__TYPE__ const& l) \ { m_##__FIELD__ = l;} + SYNTHESIS_SETTER(client::con_listener,ping_sent_listener) + + SYNTHESIS_SETTER(client::con_listener,pong_received_listener) + SYNTHESIS_SETTER(client::con_listener,open_listener) SYNTHESIS_SETTER(client::con_listener,fail_listener) @@ -83,6 +87,9 @@ namespace sio void clear_con_listeners() { + m_ping_sent_listener = nullptr; + m_pong_received_listener = nullptr; + m_open_listener = nullptr; m_close_listener = nullptr; m_fail_listener = nullptr; @@ -200,6 +207,9 @@ namespace sio con_state m_con_state; + client::con_listener m_ping_sent_listener; + client::con_listener m_pong_received_listener; + client::con_listener m_open_listener; client::con_listener m_fail_listener; client::con_listener m_reconnecting_listener; diff --git a/src/sio_client.cpp b/src/sio_client.cpp index 48d0ce20..9cf8b9ea 100644 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -23,6 +23,16 @@ namespace sio delete m_impl; } + void client::set_ping_sent_listener(con_listener const& l) + { + m_impl->set_ping_sent_listener(l); + } + + void client::set_pong_received_listener(con_listener const& l) + { + m_impl->set_pong_received_listener(l); + } + void client::set_open_listener(con_listener const& l) { m_impl->set_open_listener(l); diff --git a/src/sio_client.h b/src/sio_client.h index adb84e77..874c4d28 100644 --- a/src/sio_client.h +++ b/src/sio_client.h @@ -35,6 +35,10 @@ namespace sio ~client(); //set listeners and event bindings. + void set_ping_sent_listener(con_listener const& l); + + void set_pong_received_listener(con_listener const& l); + void set_open_listener(con_listener const& l); void set_fail_listener(con_listener const& l);