Packets: annotation facility
[senf.git] / Console / Server.cc
index 3148e76..e69bca1 100644 (file)
@@ -85,24 +85,17 @@ senf::console::Server::start(senf::INet6SocketAddress const & address)
 
 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)
 {
@@ -185,9 +178,10 @@ prefix_ void senf::console::detail::DumbClientReader::v_translate(std::string &
 
 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()
@@ -202,7 +196,7 @@ prefix_ void senf::console::detail::NoninteractiveClientReader::v_translate(std:
 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();
@@ -223,10 +217,11 @@ senf::console::detail::NoninteractiveClientReader::newData(int event)
 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),
+      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::instance().eventTime() + ClockService::milliseconds(INTERACTIVE_TIMEOUT),
+              scheduler::eventTime() + ClockService::milliseconds(INTERACTIVE_TIMEOUT),
               false),
       name_ (server.name()), reader_ (), mode_ (server.mode())
 {
@@ -240,7 +235,7 @@ prefix_ senf::console::Client::Client(Server & server, ClientHandle handle)
         setNoninteractive();
         break;
     case Server::Automatic :
-        binding_.enable();
+        readevent_.enable();
         timer_.enable();
         break;
     }
@@ -248,7 +243,7 @@ prefix_ senf::console::Client::Client(Server & server, ClientHandle handle)
 
 prefix_ void senf::console::Client::setInteractive()
 {
-    binding_.disable();
+    readevent_.disable();
     timer_.disable();
     mode_ = Server::Interactive;
     reader_.reset(new detail::SafeReadlineClientReader (*this));
@@ -257,7 +252,7 @@ prefix_ void senf::console::Client::setInteractive()
 
 prefix_ void senf::console::Client::setNoninteractive()
 {
-    binding_.disable();
+    readevent_.disable();
     timer_.disable();
     mode_ = Server::Noninteractive;
     reader_.reset(new detail::NoninteractiveClientReader(*this));
@@ -276,7 +271,6 @@ prefix_ std::string::size_type senf::console::Client::handleInput(std::string da
     else
         lastCommand_ = data;
 
-    bool state (true);
     std::string::size_type n (data.size());
 
     try {
@@ -285,11 +279,9 @@ prefix_ std::string::size_type senf::console::Client::handleInput(std::string da
                                                                   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