X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fcommand_client.cpp;h=8ccbf1046d3e97c7cfbf0d0b983dc0c57ac8b2fa;hp=0f44203cc734ef6b125e66282898e0768d4b6ef9;hb=fb3345ada7ea94225b78994fd50e3de693a2a3d5;hpb=4c3662a0b083759056b93c21e747e5551a8ddfcc diff --git a/src/command_client.cpp b/src/command_client.cpp index 0f44203..8ccbf10 100644 --- a/src/command_client.cpp +++ b/src/command_client.cpp @@ -39,21 +39,23 @@ using namespace std; namespace libt2n { -command_client::command_client(client_connection& _c, long long _command_timeout_usec, long long _hello_timeout_usec) +command_client::command_client(client_connection* _c, long long _command_timeout_usec, long long _hello_timeout_usec) : c(_c) { command_timeout_usec=_command_timeout_usec; hello_timeout_usec=_hello_timeout_usec; // for reconnects - c.add_callback(new_connection,bind(&command_client::read_hello, boost::ref(*this))); + c->add_callback(new_connection,bind(&command_client::read_hello, boost::ref(*this))); - read_hello(); + // don't expect hello from an always closed connection (like dummy_client_connection) + if (!c->is_closed()) + read_hello(); } /** @brief replace the connection currently in use with a new one - @param _c reference of the new connection + @param _c pointer to the new connection @note the old connection must still be valid when this method is called, it can safely be deleted after this method returned @@ -61,17 +63,17 @@ command_client::command_client(client_connection& _c, long long _command_timeout @note all callbacks registered on the old connection will be copied over to the new one */ -void command_client::replace_connection(client_connection& _c) +void command_client::replace_connection(client_connection* _c) { // copy all callbacks registered on the old connection for(callback_event_type e=static_cast(0); e < __events_end; e=static_cast(static_cast(e)+1)) { - list > evcb=c.get_callback_list(e); + list > evcb=c->get_callback_list(e); for (list >::iterator i=evcb.begin(); i != evcb.end(); i++) - _c.add_callback(e,*i); + _c->add_callback(e,*i); } // replace the connection @@ -85,8 +87,8 @@ std::string command_client::read_packet(const long long &usec_timeout) string resultpacket; bool got_packet=false; long long my_timeout=usec_timeout; - while(!(got_packet=c.get_packet(resultpacket)) && my_timeout > 0 && !c.is_closed()) - c.fill_buffer(my_timeout,&my_timeout); + while(!(got_packet=c->get_packet(resultpacket)) && my_timeout > 0 && !c->is_closed()) + c->fill_buffer(my_timeout,&my_timeout); if (!got_packet) throw t2n_transfer_error("timeout exceeded"); @@ -99,11 +101,11 @@ void command_client::read_hello() string resultpacket; bool got_packet=false; long long my_timeout=hello_timeout_usec; - while(!(got_packet=c.get_packet(resultpacket)) && my_timeout > 0 && !c.is_closed()) + while(!(got_packet=c->get_packet(resultpacket)) && my_timeout > 0 && !c->is_closed()) { - c.fill_buffer(my_timeout,&my_timeout); + c->fill_buffer(my_timeout,&my_timeout); - c.peek_packet(resultpacket); + c->peek_packet(resultpacket); check_hello(resultpacket); // will throw before timeout if wrong data received } @@ -209,14 +211,14 @@ void command_client::send_command(command* cmd, result_container &res) { throw; } std::ostream* ostr; - if ((ostr=c.get_logstream(fulldebug))!=NULL) + if ((ostr=c->get_logstream(fulldebug))!=NULL) { (*ostr) << "sending command, decoded data: " << std::endl; boost::archive::xml_oarchive xo(*ostr); xo << BOOST_SERIALIZATION_NVP(cc); } - c.write(ofs.str()); + c->write(ofs.str()); istringstream ifs(read_packet(command_timeout_usec)); boost::archive::binary_iarchive ia(ifs); @@ -234,7 +236,7 @@ void command_client::send_command(command* cmd, result_container &res) catch(...) { throw; } - if ((ostr=c.get_logstream(fulldebug))!=NULL) + if ((ostr=c->get_logstream(fulldebug))!=NULL) { (*ostr) << "received result, decoded data: " << std::endl; boost::archive::xml_oarchive xo(*ostr);