X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FServer.hh;h=3b7a93e90d598b83a83e647d1393d5666c6ef419;hb=9a782796586d1f6708e1baab64f2140c3c7972e8;hp=7bca747032fa68d39656411f8868b5d61cfeb4b5;hpb=2d5a1fd2cef2d84e16226a7336948f524fbb71c6;p=senf.git diff --git a/Console/Server.hh b/Console/Server.hh index 7bca747..3b7a93e 100644 --- a/Console/Server.hh +++ b/Console/Server.hh @@ -56,6 +56,13 @@ namespace console { \todo Add readline support \todo Add interactivity detection using timeout + \idea To support blocking commands, we could give the Client 'suspend()' and 'resume()' + members. suspend() would probably throw some kind of exception to transfer control back + to the Client instance. on resume(), the command would be called again, maybe setting + some flag or something. Example for use: Host name resolution: Here we can just built + our own little host-name cache. When the name is not found, we ask the resolver to + resolve it and call 'resume' when the name is found. Since it is in the cache now, the + command will now complete. */ class Server : boost::noncopyable @@ -76,6 +83,7 @@ namespace console { ///< Start server on given IPv4 address/port static Server & start(senf::INet6SocketAddress const & address); ///< Start server on given IPv6 address/port + static Server & instance(); void name(std::string const & name); ///< Set server name /**< This information is used in the prompt string. */ @@ -86,6 +94,7 @@ namespace console { Server(ServerHandle handle); static void start(ServerHandle handle); + static boost::scoped_ptr & instancePtr(); void newClient(Scheduler::EventId event); void removeClient(Client & client); @@ -96,8 +105,6 @@ namespace console { Clients clients_; std::string name_; - static boost::scoped_ptr instance_; - friend class Client; }; @@ -109,8 +116,6 @@ namespace console { \fixme Fix Client::clientData implementation \fixme Don't register a new ReadHelper every round - \fixme Ensure, that output errors (or any errors) in the console don't terminate the - application */ class Client : public senf::intrusive_refcount,