prefix_ void senf::console::Server::removeClient(Client & client)
{
- SENF_LOG(( "Disposing client " << client.handle().peer() ));
+ 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>(&client));
}
handle().write(data);
}
+prefix_ unsigned senf::console::detail::DumbClientReader::v_width()
+ const
+{
+ return 80;
+}
+
///////////////////////////////////////////////////////////////////////////
// senf::console::detail::NoninteractiveClientReader
handle().write(data);
}
+prefix_ unsigned senf::console::detail::NoninteractiveClientReader::v_width()
+ const
+{
+ return 80;
+}
+
prefix_ void
senf::console::detail::NoninteractiveClientReader::newData(int event)
{
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 {
reader_->enablePrompt();
}
+prefix_ unsigned senf::console::Client::getWidth(std::ostream & os, unsigned defaultWidth,
+ unsigned minWidth)
+{
+ unsigned rv (defaultWidth);
+ try {
+ rv = get(os).width();
+ }
+ catch (std::bad_cast &) {}
+ return rv < minWidth ? defaultWidth : rv;
+}
+
///////////////////////////////////////////////////////////////////////////
// senf::console::Client::SysBacktrace
{
Client & client (Client::get(os));
if (client.backtrace().empty())
- os << "(no backtrace)";
+ os << "(no backtrace)\n";
else
os << client.backtrace();
}