X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FServer.cci;h=b68443977c40485b98db726a989dc9f841880ae7;hb=1863c038d0400159ce49b851a5b81c2ce698c684;hp=12e0c005d5d0eb72e684f51d12bbed225ebb0a38;hpb=412cf8e222086fb5d89b15cb11556799e131f390;p=senf.git diff --git a/Console/Server.cci b/Console/Server.cci index 12e0c00..b684439 100644 --- a/Console/Server.cci +++ b/Console/Server.cci @@ -23,7 +23,7 @@ /** \file \brief Server inline non-template implementation */ -//#include "Server.ih" +#include "Server.ih" // Custom includes @@ -31,11 +31,131 @@ ///////////////////////////////cci.p/////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// +// senf::console::detail::NonblockingSocketSink + +prefix_ senf::console::detail::NonblockingSocketSink::NonblockingSocketSink(Client & client) + : client_ (client) +{} + +prefix_ senf::console::Client & senf::console::detail::NonblockingSocketSink::client() + const +{ + return client_; +} + +/////////////////////////////////////////////////////////////////////////// // senf::console::Server -prefix_ void senf::console::Server::name(std::string const & name) +prefix_ senf::console::Server & senf::console::Server::name(std::string const & name) { name_ = name; + return *this; +} + +prefix_ void senf::console::Server::stop() +{ + // commit suicide + instancePtr().reset(0); +} + +/////////////////////////////////////////////////////////////////////////// +// 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_ void senf::console::detail::ClientReader::handleInput(std::string const & input) + const +{ + client().handleInput(input); +} + +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) +{} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::Client + +prefix_ senf::console::Client::~Client() +{} + +prefix_ void senf::console::Client::stop() +{ + // THIS COMMITS SUICIDE. THE INSTANCE IS GONE AFTER removeClient RETURNS + server_.removeClient(*this); +} + +prefix_ std::string const & senf::console::Client::name() + const +{ + return name_; +} + +prefix_ std::string senf::console::Client::promptString() + const +{ + return name_ + ":" + executor_.cwd().path() + "$ "; +} + +prefix_ senf::console::Client & senf::console::Client::get(std::ostream & os) +{ + return dynamic_cast(os)->client(); +} + +prefix_ senf::console::Client::ClientHandle senf::console::Client::handle() + const +{ + return handle_; +} + +prefix_ std::ostream & senf::console::Client::stream() +{ + return out_t::member; } ///////////////////////////////cci.e///////////////////////////////////////