X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FConsole%2FServer.cc;h=a1bad60e45e27a1a2b53e43b9e1e77e93fb57951;hb=d5a72d0b3f6fee56dba6de1c54cafb448ebe3457;hp=719f527b4fea6f1c9cec588e18cad1f8f18d0c84;hpb=6745b9a3712f3221fe4b076ed7abb1ab92d6ac2b;p=senf.git diff --git a/Utils/Console/Server.cc b/Utils/Console/Server.cc index 719f527..a1bad60 100644 --- a/Utils/Console/Server.cc +++ b/Utils/Console/Server.cc @@ -106,12 +106,20 @@ prefix_ void senf::console::Server::newClient(int event) ServerHandle::ClientHandle client (handle_.accept()); boost::intrusive_ptr p (new Client(*this, client)); clients_.insert( p ); - SENF_LOG(( "Registered new client " << p.get() )); + SENF_LOG(( "Registered new client " << client.peer() )); } prefix_ void senf::console::Server::removeClient(Client & client) { - SENF_LOG(( "Disposing client " << & client )); + SENF_LOG_BLOCK(({ + log << "Disposing client "; + try { + log << client.handle().peer(); + } + catch (senf::SystemException ex) { + log << "(unknown)"; + } + })); // THIS DELETES THE CLIENT INSTANCE !! clients_.erase(boost::intrusive_ptr(&client)); } @@ -180,6 +188,12 @@ prefix_ void senf::console::detail::DumbClientReader::v_write(std::string const handle().write(data); } +prefix_ unsigned senf::console::detail::DumbClientReader::v_width() + const +{ + return 80; +} + /////////////////////////////////////////////////////////////////////////// // senf::console::detail::NoninteractiveClientReader @@ -202,6 +216,12 @@ prefix_ void senf::console::detail::NoninteractiveClientReader::v_write(std::str handle().write(data); } +prefix_ unsigned senf::console::detail::NoninteractiveClientReader::v_width() + const +{ + return 80; +} + prefix_ void senf::console::detail::NoninteractiveClientReader::newData(int event) { @@ -224,8 +244,9 @@ senf::console::detail::NoninteractiveClientReader::newData(int event) // senf::console::Client prefix_ senf::console::Client::Client(Server & server, ClientHandle handle) - : out_t(boost::ref(*this)), senf::log::IOStreamTarget(out_t::member), server_ (server), - handle_ (handle), + : out_t(boost::ref(*this)), + senf::log::IOStreamTarget("client-" + senf::str(handle.peer()), out_t::member), + server_ (server), handle_ (handle), readevent_ ("senf::console::Client::interactive_check", boost::bind(&Client::setNoninteractive,this), handle, scheduler::FdEvent::EV_READ, false), @@ -271,11 +292,6 @@ prefix_ void senf::console::Client::setNoninteractive() prefix_ std::string::size_type senf::console::Client::handleInput(std::string data, bool incremental) { - if (data.empty() && ! incremental) - data = lastCommand_; - else - lastCommand_ = data; - std::string::size_type n (data.size()); try { @@ -322,31 +338,15 @@ prefix_ void senf::console::Client::v_write(senf::log::time_type timestamp, reader_->enablePrompt(); } -prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Client const & client) +prefix_ unsigned senf::console::Client::getWidth(std::ostream & os, unsigned defaultWidth, + unsigned minWidth) { - typedef ClientSocketHandle< MakeSocketPolicy< - INet4AddressingPolicy,ConnectedCommunicationPolicy>::policy > V4Socket; - typedef ClientSocketHandle< MakeSocketPolicy< - INet6AddressingPolicy,ConnectedCommunicationPolicy>::policy > V6Socket; - - try { - if (check_socket_cast(client.handle())) - os << dynamic_socket_cast(client.handle()).peer(); - else if (check_socket_cast(client.handle())) - os << dynamic_socket_cast(client.handle()).peer(); - else - os << static_cast(&client); - } - catch (SystemException &) { - os << "0.0.0.0:0"; + unsigned rv (defaultWidth); + try { + rv = get(os).width(); } - - return os; -} - -prefix_ std::ostream & senf::console::operator<<(std::ostream & os, Client * client) -{ - return os << *client; + catch (std::bad_cast &) {} + return rv < minWidth ? defaultWidth : rv; } /////////////////////////////////////////////////////////////////////////// @@ -362,7 +362,7 @@ prefix_ void senf::console::Client::SysBacktrace::backtrace(std::ostream & os) { Client & client (Client::get(os)); if (client.backtrace().empty()) - os << "(no backtrace)"; + os << "(no backtrace)\n"; else os << client.backtrace(); }