Boost logo

Boost :

From: JD (jean.daniel.michaud_at_[hidden])
Date: 2007-08-13 14:39:24


Ariel Kalingking wrote:
> Hi,
>
> I am looking for a similar functionality and would like to ask your
> opinion, what would it require to make cli usable across a network?
> For example I would want to embed it and control an existing
> application using a telnet like service.
>

Well I guess for that you would need much more than a CLI. But you can
use it in conjunction with some RPC implementation like xml-rpc
(http://xmlrpcpp.sourceforge.net/), and bind the cli commands to an
XmlRpcClient that would call remote procedure on XmlRpcServer.

Something like that:

// Code on client side:
#define PORT 16000

void sendFile(std::vector<std::string> &args)
{
   XmlRpcClient c(argv[0], PORT);
   XmlRpcValue server_args, result;
   server_args.setSize(args.size() - 1);
   for (int i = 1; i < args.size(); ++i) server_args[i] = args[i];
   if (c.execute("send_file", server_args, result))
     std::cout << "\nMethods:\n " << result << "\n\n";
   else
     std::cout << "Error calling 'listMethods'\n\n";
}

int main(int argc, char **argv)
{
   boost::cli::commands_description desc;
   desc.add_options()
     ("sendFile", po::value< std::vector<std::string>
>()->notifier(&sendFile), "SendFile <server_ip_address> <file1> ...
<filen>")
     ;

   boost::cli::command_line_interpreter cli(desc, ">");
   cli.interpret(std::cin);
}

//Code on server side:
// No arguments, result is "Hello".
class SendFile : public XmlRpcServerMethod
{
public:
   SendFile(XmlRpcServer* s) : XmlRpcServerMethod("send_file", s) {}

   void execute(XmlRpcValue& params, XmlRpcValue& result)
   {
     std::cout << "send_file called on server" << std::endl;
     // Sends the files in params here!
   }
};

int main(int argc, char **argv)
{
   XmlRpcServer s;
   s.bindAndListen(PORT);
   SendFile sf_command(&s);
   s.work(-1.0);
   return 0;
}

Don't forget to use the last version of the cli on
http://code.google.com/p/clipo/ ! :)

JD


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk