///////////////////////////////cci.p///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
-// senf::console::detail::NonblockingSocketSink
-
-prefix_ senf::console::detail::NonblockingSocketSink::NonblockingSocketSink(Client & client)
- : client_ (client)
-{}
+// senf::console::detail::ServerManager
-prefix_ senf::console::Client & senf::console::detail::NonblockingSocketSink::client()
- const
+prefix_ void senf::console::detail::ServerManager::add(ptr server)
{
- return client_;
+ instance().servers_.insert(server);
}
-///////////////////////////////////////////////////////////////////////////
-// senf::console::Server
+prefix_ void senf::console::detail::ServerManager::remove(ptr server)
+{
+ instance().servers_.erase(instance().servers_.find(server));
+}
-prefix_ void senf::console::Server::name(std::string const & name)
+prefix_ senf::console::detail::ServerManager & senf::console::detail::ServerManager::instance()
{
- name_ = name;
+ static ServerManager manager;
+ return manager;
}
///////////////////////////////////////////////////////////////////////////
-// senf::console::detail::ClientReader
+// senf::console::detail::NonblockingSocketSink
-prefix_ senf::console::detail::ClientReader::~ClientReader()
+prefix_ senf::console::detail::NonblockingSocketSink::NonblockingSocketSink(Client & client)
+ : client_ (client)
{}
-prefix_ senf::console::Client & senf::console::detail::ClientReader::client()
+prefix_ senf::console::Client & senf::console::detail::NonblockingSocketSink::client()
const
{
return client_;
}
-prefix_ std::string senf::console::detail::ClientReader::promptString()
- const
-{
- return client().promptString();
-}
+///////////////////////////////////////////////////////////////////////////
+// senf::console::Server
-prefix_ senf::console::detail::ClientReader::ClientHandle senf::console::detail::ClientReader::handle()
- const
+prefix_ senf::console::Server & senf::console::Server::name(std::string const & name)
{
- return client().handle();
+ name_ = name;
+ return *this;
}
-prefix_ std::ostream & senf::console::detail::ClientReader::stream()
+prefix_ std::string const & senf::console::Server::name()
const
{
- return client().stream();
+ return name_;
}
-prefix_ void senf::console::detail::ClientReader::stopClient()
+prefix_ senf::console::DirectoryNode & senf::console::Server::root()
+ const
{
- client().stop();
+ return *root_;
}
-prefix_ void senf::console::detail::ClientReader::handleInput(std::string const & input)
- const
+prefix_ senf::console::Server & senf::console::Server::root(DirectoryNode & root)
{
- client().handleInput(input);
+ root_ = root.thisptr();
+ return *this;
}
-prefix_ void senf::console::detail::ClientReader::disablePrompt()
+prefix_ senf::console::Server & senf::console::Server::mode(Mode m)
{
- v_disablePrompt();
+ mode_ = m;
+ return *this;
}
-prefix_ void senf::console::detail::ClientReader::enablePrompt()
+prefix_ senf::console::Server::Mode senf::console::Server::mode()
+ const
{
- v_enablePrompt();
+ return mode_;
}
-prefix_ void senf::console::detail::ClientReader::translate(std::string & data)
+prefix_ void senf::console::Server::stop()
{
- v_translate(data);
+ // commit suicide
+ detail::ServerManager::remove(boost::intrusive_ptr<Server>(this));
}
-prefix_ senf::console::detail::ClientReader::ClientReader(Client & client)
- : client_ (client)
-{}
-
///////////////////////////////////////////////////////////////////////////
// senf::console::Client
prefix_ senf::console::Client::~Client()
-{}
+{
+ stream() << std::flush;
+}
prefix_ void senf::console::Client::stop()
{
prefix_ std::string senf::console::Client::promptString()
const
{
- return name_ + ":" + executor_.cwd().path() + "$ ";
+ 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 out_t::member;
}
+///////////////////////////////////////////////////////////////////////////
+// senf::console::detail::ClientReader
+
+prefix_ senf::console::detail::ClientReader::~ClientReader()
+{}
+
+prefix_ senf::console::Client & senf::console::detail::ClientReader::client()
+ const
+{
+ return client_;
+}
+
+prefix_ std::string senf::console::detail::ClientReader::promptString()
+ const
+{
+ return client().promptString();
+}
+
+prefix_ senf::console::detail::ClientReader::ClientHandle senf::console::detail::ClientReader::handle()
+ const
+{
+ return client().handle();
+}
+
+prefix_ std::ostream & senf::console::detail::ClientReader::stream()
+ const
+{
+ return client().stream();
+}
+
+prefix_ void senf::console::detail::ClientReader::stopClient()
+{
+ client().stop();
+}
+
+prefix_ std::string::size_type
+senf::console::detail::ClientReader::handleInput(std::string const & input, bool incremental)
+ const
+{
+ return client().handleInput(input, incremental);
+}
+
+prefix_ void senf::console::detail::ClientReader::disablePrompt()
+{
+ v_disablePrompt();
+}
+
+prefix_ void senf::console::detail::ClientReader::enablePrompt()
+{
+ v_enablePrompt();
+}
+
+prefix_ void senf::console::detail::ClientReader::translate(std::string & data)
+{
+ v_translate(data);
+}
+
+prefix_ senf::console::detail::ClientReader::ClientReader(Client & client)
+ : client_ (client)
+{}
+
///////////////////////////////cci.e///////////////////////////////////////
#undef prefix_