///////////////////////////////cci.p///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
+// senf::console::detail::ServerManager
+
+prefix_ void senf::console::detail::ServerManager::add(ptr server)
+{
+ instance().servers_.insert(server);
+}
+
+prefix_ void senf::console::detail::ServerManager::remove(ptr server)
+{
+ instance().servers_.erase(instance().servers_.find(server));
+}
+
+///////////////////////////////////////////////////////////////////////////
// senf::console::detail::NonblockingSocketSink
prefix_ senf::console::detail::NonblockingSocketSink::NonblockingSocketSink(Client & client)
return *this;
}
+prefix_ std::string const & senf::console::Server::name()
+ const
+{
+ return name_;
+}
+
+prefix_ senf::console::DirectoryNode & senf::console::Server::root()
+ const
+{
+ return *root_;
+}
+
+prefix_ senf::console::Server & senf::console::Server::root(DirectoryNode & root)
+{
+ root_ = root.thisptr();
+ return *this;
+}
+
+prefix_ senf::console::Server & senf::console::Server::mode(Mode m)
+{
+ mode_ = m;
+ return *this;
+}
+
+prefix_ senf::console::Server::Mode senf::console::Server::mode()
+ const
+{
+ return mode_;
+}
+
prefix_ void senf::console::Server::stop()
{
// commit suicide
- instancePtr().reset(0);
+ detail::ServerManager::remove(boost::intrusive_ptr<Server>(this));
}
///////////////////////////////////////////////////////////////////////////
// senf::console::Client
prefix_ senf::console::Client::~Client()
-{}
+{
+ stream() << std::flush;
+}
prefix_ void senf::console::Client::stop()
{
return name_ + ":" + executor_.cwdPath() + "$ ";
}
+prefix_ senf::console::DirectoryNode & senf::console::Client::root()
+ const
+{
+ return server_.root();
+}
+
+prefix_ senf::console::Server::Mode senf::console::Client::mode()
+ const
+{
+ return mode_;
+}
+
prefix_ senf::console::Client & senf::console::Client::get(std::ostream & os)
{
return dynamic_cast<detail::NonblockingSocketOStream&>(os)->client();
client().stop();
}
-prefix_ void senf::console::detail::ClientReader::handleInput(std::string const & input)
+prefix_ std::string::size_type
+senf::console::detail::ClientReader::handleInput(std::string const & input, bool incremental)
const
{
- client().handleInput(input);
+ return client().handleInput(input, incremental);
}
prefix_ void senf::console::detail::ClientReader::disablePrompt()