Allow connect with query string.

This commit is contained in:
Jianjun Zhu 2015-04-23 16:55:16 +08:00
parent 0b0f265c39
commit b06184bbbf
4 changed files with 30 additions and 10 deletions

View File

@ -60,7 +60,7 @@ namespace sio
sync_close(); sync_close();
} }
void client_impl::connect(const std::string& uri) void client_impl::connect(const std::string& uri, const std::map<string,string>& query)
{ {
if(m_reconn_timer) if(m_reconn_timer)
{ {
@ -86,8 +86,18 @@ namespace sio
m_con_state = con_opening; m_con_state = con_opening;
m_base_url = uri; m_base_url = uri;
m_reconn_made = 0; m_reconn_made = 0;
std::string queryString;
for(std::map<std::string,std::string>::const_iterator it=query.begin();it!=query.end();++it){
queryString.append("&");
queryString.append(it->first);
queryString.append("=");
queryString.append(it->second);
}
m_query_string=queryString;
this->reset_states(); this->reset_states();
m_client.get_io_service().dispatch(lib::bind(&client_impl::connect_impl,this,uri)); m_client.get_io_service().dispatch(lib::bind(&client_impl::connect_impl,this,uri,queryString));
m_network_thread.reset(new std::thread(lib::bind(&client_impl::run_loop,this)));//uri lifecycle? m_network_thread.reset(new std::thread(lib::bind(&client_impl::run_loop,this)));//uri lifecycle?
} }
@ -182,17 +192,18 @@ namespace sio
"run loop end"); "run loop end");
} }
void client_impl::connect_impl(const std::string& uri) void client_impl::connect_impl(const std::string& uri, const std::string& queryString)
{ {
do{ do{
websocketpp::uri uo(uri); websocketpp::uri uo(uri);
std::ostringstream ss; std::ostringstream ss;
if (m_sid.size()==0) { if (m_sid.size()==0) {
ss<<"ws://"<<uo.get_host()<<":"<<uo.get_port()<<"/socket.io/?EIO=4&transport=websocket&t="<<time(NULL); ss<<"ws://"<<uo.get_host()<<":"<<uo.get_port()<<"/socket.io/?EIO=4&transport=websocket&t="<<time(NULL)<<queryString;
} }
else else
{ {
ss<<"ws://"<<uo.get_host()<<":"<<uo.get_port()<<"/socket.io/?EIO=4&transport=websocket&sid="<<m_sid<<"&t="<<time(NULL); ss<<"ws://"<<uo.get_host()<<":"<<uo.get_port()<<"/socket.io/?EIO=4&transport=websocket&sid="<<m_sid<<"&t="<<time(NULL)<<queryString;
} }
lib::error_code ec; lib::error_code ec;
client_type::connection_ptr con = m_client.get_connection(ss.str(), ec); client_type::connection_ptr con = m_client.get_connection(ss.str(), ec);
@ -303,7 +314,7 @@ namespace sio
this->reset_states(); this->reset_states();
LOG("Reconnecting..."<<std::endl); LOG("Reconnecting..."<<std::endl);
if(m_reconnecting_listener) m_reconnecting_listener(); if(m_reconnecting_listener) m_reconnecting_listener();
m_client.get_io_service().dispatch(lib::bind(&client_impl::connect_impl,this,m_base_url)); m_client.get_io_service().dispatch(lib::bind(&client_impl::connect_impl,this,m_base_url,m_query_string));
} }
} }

View File

@ -87,7 +87,7 @@ namespace sio
} }
// Client Functions - such as send, etc. // Client Functions - such as send, etc.
void connect(const std::string& uri); void connect(const std::string& uri, const std::map<string, string>& queryString);
sio::socket::ptr const& socket(const std::string& nsp); sio::socket::ptr const& socket(const std::string& nsp);
@ -120,7 +120,7 @@ namespace sio
private: private:
void run_loop(); void run_loop();
void connect_impl(const std::string& uri); void connect_impl(const std::string& uri, const std::string& query);
void close_impl(close::status::value const& code,std::string const& reason); void close_impl(close::status::value const& code,std::string const& reason);
@ -165,6 +165,7 @@ namespace sio
// Socket.IO server settings // Socket.IO server settings
std::string m_sid; std::string m_sid;
std::string m_base_url; std::string m_base_url;
std::string m_query_string;
unsigned int m_ping_interval; unsigned int m_ping_interval;
unsigned int m_ping_timeout; unsigned int m_ping_timeout;

View File

@ -70,7 +70,13 @@ namespace sio
void client::connect(const std::string& uri) void client::connect(const std::string& uri)
{ {
m_impl->connect(uri); const std::map<string,string> query;
m_impl->connect(uri, query);
}
void client::connect(const std::string& uri, const std::map<string,string>& query)
{
m_impl->connect(uri, query);
} }
socket::ptr const& client::socket(const std::string& nsp) socket::ptr const& client::socket(const std::string& nsp)

View File

@ -56,6 +56,8 @@ namespace sio
// Client Functions - such as send, etc. // Client Functions - such as send, etc.
void connect(const std::string& uri); void connect(const std::string& uri);
void connect(const std::string& uri, const std::map<string,string>& query);
void set_reconnect_attempts(int attempts); void set_reconnect_attempts(int attempts);
void set_reconnect_delay(unsigned millis); void set_reconnect_delay(unsigned millis);