From 9da4979d7ffc6d7aa36252d0ade0379d2d3d17a5 Mon Sep 17 00:00:00 2001 From: "melo.yao" Date: Sat, 11 Apr 2015 00:26:13 +0800 Subject: [PATCH] change reconnect implementation --- src/internal/sio_client_impl.cpp | 40 ++++++++++++++++---------------- src/internal/sio_client_impl.h | 15 ++++++++++-- src/sio_client.cpp | 23 ++++++++++++++---- src/sio_client.h | 8 +++++-- 4 files changed, 58 insertions(+), 28 deletions(-) diff --git a/src/internal/sio_client_impl.cpp b/src/internal/sio_client_impl.cpp index 381b7f2..c59065f 100644 --- a/src/internal/sio_client_impl.cpp +++ b/src/internal/sio_client_impl.cpp @@ -411,27 +411,27 @@ namespace sio } - void client_impl::reconnect(const std::string& uri) - { - if(m_network_thread) - { - if(m_con_state == con_closing) - { - m_network_thread->join(); - } - else - { - return; - } - } - if(m_con_state == con_closed) - { - m_con_state = con_opening; +// void client_impl::reconnect(const std::string& uri) +// { +// if(m_network_thread) +// { +// if(m_con_state == con_closing) +// { +// m_network_thread->join(); +// } +// else +// { +// return; +// } +// } +// if(m_con_state == con_closed) +// { +// m_con_state = con_opening; - m_client.get_io_service().dispatch(lib::bind(&client_impl::__connect,this,uri)); - m_network_thread.reset(new std::thread(lib::bind(&client_impl::run_loop,this)));//uri - } - } +// m_client.get_io_service().dispatch(lib::bind(&client_impl::__connect,this,uri)); +// m_network_thread.reset(new std::thread(lib::bind(&client_impl::run_loop,this)));//uri +// } +// } socket::ptr const& client_impl::socket(std::string const& nsp) { diff --git a/src/internal/sio_client_impl.h b/src/internal/sio_client_impl.h index 5913b76..511b323 100644 --- a/src/internal/sio_client_impl.h +++ b/src/internal/sio_client_impl.h @@ -83,7 +83,7 @@ void set_##__FIELD__(__TYPE__ const& l) \ // Client Functions - such as send, etc. void connect(const std::string& uri); - void reconnect(const std::string& uri); +// void reconnect(const std::string& uri); socket::ptr const& socket(const std::string& nsp); @@ -95,8 +95,13 @@ void set_##__FIELD__(__TYPE__ const& l) \ bool opened() const { return m_con_state == con_opened; } std::string const& get_sessionid() const { return m_sid; } + + void set_reconnect_attempts(unsigned attempts) {m_reconn_attempts = attempts;} + + void set_reconnect_delay(unsigned millis) {m_reconn_delay = millis;if(m_reconn_delay_maxmillis) m_reconn_delay = millis;} - friend class client; protected: void send(packet& p); @@ -173,6 +178,12 @@ void set_##__FIELD__(__TYPE__ const& l) \ std::map m_sockets; std::mutex m_socket_mutex; + + unsigned m_reconn_delay; + + unsigned m_reconn_delay_max; + + unsigned m_reconn_attempts; friend class sio::client; friend class sio::socket; diff --git a/src/sio_client.cpp b/src/sio_client.cpp index 44da21e..5a32d1e 100755 --- a/src/sio_client.cpp +++ b/src/sio_client.cpp @@ -64,10 +64,10 @@ namespace sio m_impl->connect(uri); } - void client::reconnect(const std::string& uri) - { - m_impl->reconnect(uri); - } +// void client::reconnect(const std::string& uri) +// { +// m_impl->reconnect(uri); +// } socket::ptr const& client::socket(const std::string& nsp) { @@ -94,5 +94,20 @@ namespace sio { return m_impl->get_sessionid(); } + + void client::set_reconnect_attempts(int attempts) + { + m_impl->set_reconnect_attempts(attempts); + } + + void client::set_reconnect_delay(unsigned millis) + { + m_impl->set_reconnect_delay(millis); + } + + void client::set_reconnect_delay_max(unsigned millis) + { + m_impl->set_reconnect_delay_max(millis); + } } diff --git a/src/sio_client.h b/src/sio_client.h index 27d8038..f832ab1 100755 --- a/src/sio_client.h +++ b/src/sio_client.h @@ -49,8 +49,12 @@ namespace sio // Client Functions - such as send, etc. void connect(const std::string& uri); - - void reconnect(const std::string& uri); + + void set_reconnect_attempts(int attempts); + + void set_reconnect_delay(unsigned millis); + + void set_reconnect_delay_max(unsigned millis); socket::ptr const& socket(const std::string& nsp = "");