prefix_ senf::console::Server & senf::console::Server::start(ServerHandle handle)
{
- // Uah .... ensure the scheduler is created before the instance pointer so it get's destructed
- // AFTER it.
- (void) senf::Scheduler::instance();
boost::intrusive_ptr<Server> p (new Server(handle));
detail::ServerManager::add(boost::intrusive_ptr<Server>(p));
return *p;
}
prefix_ senf::console::Server::Server(ServerHandle handle)
- : handle_ (handle), root_ (senf::console::root().thisptr()), mode_ (Automatic)
-{
- Scheduler::instance().add( handle_, senf::membind(&Server::newClient, this) );
-}
-
-prefix_ senf::console::Server::~Server()
-{
- Scheduler::instance().remove(handle_);
-}
+ : handle_ (handle),
+ event_ ("console::Server", senf::membind(&Server::newClient, this),
+ handle_, scheduler::FdEvent::EV_READ),
+ root_ (senf::console::root().thisptr()), mode_ (Automatic)
+{}
prefix_ void senf::console::Server::newClient(int event)
{
prefix_
senf::console::detail::NoninteractiveClientReader::NoninteractiveClientReader(Client & client)
- : ClientReader (client), binding_ (handle(),
- senf::membind(&NoninteractiveClientReader::newData, this),
- senf::Scheduler::EV_READ)
+ : ClientReader (client),
+ readevent_ ("NoninteractiveClientReader",
+ senf::membind(&NoninteractiveClientReader::newData, this),
+ handle(), senf::scheduler::FdEvent::EV_READ)
{}
prefix_ void senf::console::detail::NoninteractiveClientReader::v_disablePrompt()
prefix_ void
senf::console::detail::NoninteractiveClientReader::newData(int event)
{
- if (event != senf::Scheduler::EV_READ || handle().eof()) {
+ if (event != senf::scheduler::FdEvent::EV_READ || handle().eof()) {
if (! buffer_.empty())
handleInput(buffer_);
stopClient();
prefix_ senf::console::Client::Client(Server & server, ClientHandle handle)
: out_t(boost::ref(*this)), senf::log::IOStreamTarget(out_t::member), server_ (server),
handle_ (handle),
- binding_ (handle, boost::bind(&Client::setNoninteractive,this), Scheduler::EV_READ, false),
- timer_ (Scheduler::instance().eventTime() + ClockService::milliseconds(INTERACTIVE_TIMEOUT),
- boost::bind(&Client::setInteractive, this), false),
+ readevent_ ("senf::console::Client", boost::bind(&Client::setNoninteractive,this),
+ handle, scheduler::FdEvent::EV_READ, false),
+ timer_ ("senf::console::Client interactive timeout",
+ boost::bind(&Client::setInteractive, this),
+ scheduler::eventTime() + ClockService::milliseconds(INTERACTIVE_TIMEOUT),
+ false),
name_ (server.name()), reader_ (), mode_ (server.mode())
{
handle_.facet<senf::TCPSocketProtocol>().nodelay();
setNoninteractive();
break;
case Server::Automatic :
- binding_.enable();
+ readevent_.enable();
timer_.enable();
break;
}
prefix_ void senf::console::Client::setInteractive()
{
- binding_.disable();
+ readevent_.disable();
timer_.disable();
mode_ = Server::Interactive;
reader_.reset(new detail::SafeReadlineClientReader (*this));
prefix_ void senf::console::Client::setNoninteractive()
{
- binding_.disable();
+ readevent_.disable();
timer_.disable();
mode_ = Server::Noninteractive;
reader_.reset(new detail::NoninteractiveClientReader(*this));
else
lastCommand_ = data;
- bool state (true);
std::string::size_type n (data.size());
try {
boost::ref(stream()),
_1 ));
else
- state = parser_.parse(data, boost::bind<void>( boost::ref(executor_),
- boost::ref(stream()),
- _1 ));
- if (! state )
- stream() << "syntax error" << std::endl;
+ parser_.parse(data, boost::bind<void>( boost::ref(executor_),
+ boost::ref(stream()),
+ _1 ));
}
catch (Executor::ExitException &) {
// This generates an EOF condition on the Handle. This EOF condition is expected