rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Public Member Functions | Private Attributes | List of all members
rlCommandlineInterface Class Reference

#include <rlcommandlineinterface.h>

Collaboration diagram for rlCommandlineInterface:
Collaboration graph
[legend]

Public Member Functions

 rlCommandlineInterface ()
 
virtual ~rlCommandlineInterface ()
 
int start (const char *how, const char *command=NULL)
 
int start (rlSerial *tty)
 
const char * readLine (int timeout=0)
 
int readBlock (void *buf, int len, int timeout=0)
 
int printf (const char *format,...)
 
int writeBlock (void *buf, int len)
 

Private Attributes

char line [rl_PRINTF_LENGTH]
 
rlSocketsock
 
rlSpawnspawn
 
rlSerialtty
 

Detailed Description

Commandline interface that allows applications to communicate over pipe || socket || serial line || stdio .
The parameters of start() are as follows:
start("stdio");                    // use stdin and stdout
start("pipe","command");           // run "command" and connect it's stdio with us (runs on unix only)
start("host:5050");                // connect to "host" on port 5050 and communicate with the server (tip: define a server with xinted on "host" port 5050)
start("localhost:5050","command"); // run "command" and then try to connect to "localhost" port 5050 for communication with "command"
start("server.localhost:5050");    // act as a server on "localhost" port 5050 (can serve only 1 client. if you want to serve more clients use rlSocket)
start(tty);                        // use serial interface for communication
Return values:
start()      returns -1 on error
readLine()   returns the read string or NULL
readBlock()  returns the number of read bytes or -1 on error
printf()     returns the number of written characters or -1 on error
writeBlock() returns the number of written bytes or -1 on error

Definition at line 42 of file rlcommandlineinterface.h.

Constructor & Destructor Documentation

rlCommandlineInterface::rlCommandlineInterface ( )

Definition at line 23 of file rlcommandlineinterface.cpp.

{
sock = NULL;
spawn = NULL;
tty = NULL;
}
rlCommandlineInterface::~rlCommandlineInterface ( )
virtual

Definition at line 30 of file rlcommandlineinterface.cpp.

{
if(sock != NULL) delete sock;
if(spawn != NULL) delete spawn;
}

Member Function Documentation

int rlCommandlineInterface::printf ( const char *  format,
  ... 
)

Definition at line 180 of file rlcommandlineinterface.cpp.

{
va_list ap;
va_start(ap,format);
int ret = rlvsnprintf(line, sizeof(line) - 1, format, ap);
va_end(ap);
if(ret < 0) return ret;
if(spawn != NULL)
{
return spawn->printf("%s",line);
}
else if(sock != NULL)
{
if(sock->isConnected() == 0) return -1;
int ret = sock->printf("%s",line);
return ret;
}
else if(tty != NULL)
{
return tty->writeBlock((unsigned char *) line, strlen(line));
}
else
{
int ret = ::printf("%s",line);
fflush(stdout);
return ret;
}
}
int rlCommandlineInterface::readBlock ( void *  buf,
int  len,
int  timeout = 0 
)

Definition at line 107 of file rlcommandlineinterface.cpp.

{
if(spawn != NULL)
{
unsigned char *cbuf = (unsigned char *) buf;
int i = 0;
while(i<len)
{
if(timeout > 0)
{
if(spawn->select(timeout) == 0) return -1;
}
cbuf[i++] = spawn->getchar();
}
return len;
}
else if(sock != NULL)
{
if(sock->isConnected() == 0) return -1;
int ret = sock->read(buf,len,timeout);
if(ret <= 0)
{
return -1;
}
return len;
}
else if(tty != NULL)
{
int timout = 0;
if(timeout > 0) timout = timeout;
return tty->readBlock ((unsigned char *) buf, len, timout);
}
else
{
int ret = read(0,buf,len);
return ret;
}
}
const char * rlCommandlineInterface::readLine ( int  timeout = 0)

Definition at line 147 of file rlcommandlineinterface.cpp.

{
if(spawn != NULL)
{
if(timeout > 0)
{
if(spawn->select(timeout) == 0) return NULL;
}
return spawn->readLine();
}
else if(sock != NULL)
{
if(sock->isConnected() == 0) return NULL;
int ret = sock->readStr(line,sizeof(line)-1,timeout);
if(ret <= 0)
{
return NULL;
}
return line;
}
else if(tty != NULL)
{
int ret = tty->readLine((unsigned char *) line,sizeof(line)-1, timeout);
if(ret <= 0) return NULL;
return line;
}
else
{
return fgets(line,sizeof(line)-1,stdin);
}
}
int rlCommandlineInterface::start ( const char *  how,
const char *  command = NULL 
)

Definition at line 36 of file rlcommandlineinterface.cpp.

{
if(sock != NULL) delete sock;
sock = NULL;
if(spawn != NULL) delete spawn;
spawn = NULL;
tty = NULL;
if(strcmp(how,"pipe") == 0)
{
if(command == NULL) return -1;
spawn = new rlSpawn();
int ret = spawn->spawn(command);
if(ret < 0)
{
delete spawn;
spawn = NULL;
return -1;
}
return ret;
}
else if(strcmp(how,"stdio") == 0)
{
return 1;
}
else
{
rlString rlhow(how);
char *cptr, *host;
host = rlhow.text();
cptr = strchr(host,':');
if(cptr == NULL) return -1;
*cptr = '\0'; cptr++;
int port = atoi(cptr);
if(strcmp(host,"server.localhost") == 0)
{
sock = new rlSocket(host,port,0);
}
else
{
if(strcmp(host,"localhost") == 0 && command != NULL)
{
rlString cmd(command);
#ifdef RLUNIX
cmd += " &";
#endif
rlsystem(cmd.text());
}
sock = new rlSocket(host,port,1);
}
for(int itry=0; itry<10; itry++)
{
if(sock->isConnected()) return sock->s;
rlsleep(10);
}
return -1;
}
}
int rlCommandlineInterface::start ( rlSerial tty)

Definition at line 96 of file rlcommandlineinterface.cpp.

{
if(sock != NULL) delete sock;
sock = NULL;
if(spawn != NULL) delete spawn;
spawn = NULL;
tty = ttyinterface;
if(tty == NULL) return -1;
return 1;
}
int rlCommandlineInterface::writeBlock ( void *  buf,
int  len 
)

Definition at line 210 of file rlcommandlineinterface.cpp.

{
if(spawn != NULL)
{
return spawn->write((const char *) buf, len);
}
else if(sock != NULL)
{
if(sock->isConnected() == 0) return -1;
return sock->write(buf,len);
}
else if(tty != NULL)
{
return tty->writeBlock((unsigned char *) buf, len);
}
else
{
return write(1,buf,len);
}
}

Member Data Documentation

char rlCommandlineInterface::line[rl_PRINTF_LENGTH]
private

Definition at line 54 of file rlcommandlineinterface.h.

rlSocket* rlCommandlineInterface::sock
private

Definition at line 55 of file rlcommandlineinterface.h.

rlSpawn* rlCommandlineInterface::spawn
private

Definition at line 56 of file rlcommandlineinterface.h.

rlSerial* rlCommandlineInterface::tty
private

Definition at line 57 of file rlcommandlineinterface.h.


The documentation for this class was generated from the following files: