rllib  1
Public Member Functions | Private Attributes
rlDataProviderClient Class Reference

#include <rldataprovider.h>

Collaboration diagram for rlDataProviderClient:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 rlDataProviderClient ()
virtual ~rlDataProviderClient ()
int getInt (rlSocket *socket, int id, int *status)
float getFloat (rlSocket *socket, int id, int *status)
int getIntArray (rlSocket *socket, int id, int *array, int nmax)
int getFloatArray (rlSocket *socket, int id, float *array, int nmax)
const char * getString (rlSocket *socket, int id, int *status)
int setInt (rlSocket *socket, int id, int i)
int setFloat (rlSocket *socket, int id, float f)
int setIntArray (rlSocket *socket, int id, int *i, int num)
int setFloatArray (rlSocket *socket, int id, float *f, int num)
int setString (rlSocket *socket, int id, const char *str)
int getIntAndReset (rlSocket *socket, int id, int *status)
int setIntAndWaitForReset (rlSocket *socket, int id, int i)
int getInt0Semaphore (rlSocket *socket, int *status)

Private Attributes

rlInterpreter interpreter
char cret [rl_PRINTF_LENGTH]

Detailed Description

This class is a client that can access rlDataProvider over TCP.

Definition at line 62 of file rldataprovider.h.


Constructor & Destructor Documentation

rlDataProviderClient::rlDataProviderClient ( )

Definition at line 335 of file rldataprovider.cpp.

{
  rlwsa();
}
rlDataProviderClient::~rlDataProviderClient ( ) [virtual]

Definition at line 340 of file rldataprovider.cpp.

{
}

Member Function Documentation

float rlDataProviderClient::getFloat ( rlSocket socket,
int  id,
int *  status 
)

Definition at line 368 of file rldataprovider.cpp.

{
  float ret;
  int iret;

  *status = -1;
  if(socket->isConnected() == 0) return 0.0f;
  socket->printf("getFloat(%d)\n",id);
  iret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1,CLIENT_TIMEOUT);
  if(iret == 0) // timeout
  {
    socket->disconnect();
    socket->connect();
    *status = -2;
    return 0;
  }
  if(interpreter.isCommand("floatResult("))
  {
    sscanf(interpreter.line,"floatResult(%f)",&ret);
    *status = 0;
    return ret;
  }
  return 0.0f;
}
int rlDataProviderClient::getFloatArray ( rlSocket socket,
int  id,
float *  array,
int  nmax 
)

Definition at line 418 of file rldataprovider.cpp.

{
  int status,ret;
  const char *cptr = getString(socket,id,&status);
  if(status != 0) return -1;

  ret = 0;
  while(1)
  {
    if(cptr == NULL || *cptr == '\0') break;
    if(*cptr != ',' && *cptr != '\"')
    {
      sscanf(cptr,"%f",&array[ret++]);
      cptr = strchr(cptr,',');
      if(cptr != NULL) cptr++;
      if(ret >= nmax) break;
    }
    else
    {
      cptr++;
    }
  }
  return ret;
}
int rlDataProviderClient::getInt ( rlSocket socket,
int  id,
int *  status 
)

Definition at line 344 of file rldataprovider.cpp.

{
  int ret;

  *status = -1;
  if(socket->isConnected() == 0) return 0;
  socket->printf("getInt(%d)\n",id);
  ret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1,CLIENT_TIMEOUT);
  if(ret == 0)  // timeout
  {
    socket->disconnect();
    socket->connect();
    *status = -2;
    return 0;
  }
  if(interpreter.isCommand("intResult("))
  {
    sscanf(interpreter.line,"intResult(%d)",&ret);
    *status = 0;
    return ret;
  }
  return 0;
}
int rlDataProviderClient::getInt0Semaphore ( rlSocket socket,
int *  status 
)

Definition at line 555 of file rldataprovider.cpp.

{
  int ret;

  *status = -1;
  if(socket->isConnected() == 0) return 0;
  socket->printf("getInt0Semaphore()\n");
  ret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1,CLIENT_TIMEOUT*60*60); // 1 hour timeout
  if(ret == 0) { *status = -2; return 0; } // timeout
  if(interpreter.isCommand("intResult("))
  {
    sscanf(interpreter.line,"intResult(%d)",&ret);
    *status = 0;
    return ret;
  }
  return 0;
}
int rlDataProviderClient::getIntAndReset ( rlSocket socket,
int  id,
int *  status 
)

Definition at line 525 of file rldataprovider.cpp.

{
  int ret;

  *status = -1;
  if(socket->isConnected() == 0) return 0;
  socket->printf("getIntAndReset(%d)\n",id);
  ret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1,CLIENT_TIMEOUT);
  if(ret == 0) // timeout
  {
    socket->disconnect();
    socket->connect();
    *status = -2;
    return 0;
  }
  if(interpreter.isCommand("intResult("))
  {
    sscanf(interpreter.line,"intResult(%d)",&ret);
    *status = 0;
    return ret;
  }
  return 0;
}
int rlDataProviderClient::getIntArray ( rlSocket socket,
int  id,
int *  array,
int  nmax 
)

Definition at line 393 of file rldataprovider.cpp.

{
  int status,ret;
  const char *cptr = getString(socket,id,&status);
  if(status != 0) return -1;

  ret = 0;
  while(1)
  {
    if(cptr == NULL || *cptr == '\0') break;
    if(*cptr != ',' && *cptr != '\"')
    {
      sscanf(cptr,"%d",&array[ret++]);
      cptr = strchr(cptr,',');
      if(cptr != NULL) cptr++;
      if(ret >= nmax) break;
    }
    else
    {
      cptr++;
    }
  }
  return ret;
}
const char * rlDataProviderClient::getString ( rlSocket socket,
int  id,
int *  status 
)

Definition at line 443 of file rldataprovider.cpp.

{
  int ret;

  *status = -1;
  if(socket->isConnected() == 0) return NULL;
  socket->printf("getString(%d)\n",id);
  ret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1,CLIENT_TIMEOUT);
  if(ret == 0) // timeout
  {
    socket->disconnect();
    socket->connect();
    *status = -2;
    return 0;
  }
  if(interpreter.isCommand("stringResult("))
  {
    interpreter.copyStringParam(cret,0);
    *status = 0;
    return cret;
  }
  return NULL;
}
int rlDataProviderClient::setFloat ( rlSocket socket,
int  id,
float  f 
)

Definition at line 473 of file rldataprovider.cpp.

{
  if(socket->isConnected() == 0) return -1;
  return socket->printf("float(%d,%d)\n",id,f);
}
int rlDataProviderClient::setFloatArray ( rlSocket socket,
int  id,
float *  f,
int  num 
)

Definition at line 499 of file rldataprovider.cpp.

{
  char buf[rl_PRINTF_LENGTH],val[100];
  int nmax,ipos,ind;

  if(num <= 0) return -1;
  nmax = rl_PRINTF_LENGTH - strlen("\")\n") - 1;
  sprintf(buf,"string(%d,\"",id);
  ipos = strlen(buf);
  for(ind=0; ind<num; ind++)
  {
    sprintf(val,"%f,",f[ind]);
    if(ipos+(int)strlen(val) >= nmax) return -1;
    strcat(buf,val);
    ipos = strlen(buf);
  }
  strcat(buf,"\"\n");
  return socket->printf(buf);
}
int rlDataProviderClient::setInt ( rlSocket socket,
int  id,
int  i 
)

Definition at line 467 of file rldataprovider.cpp.

{
  if(socket->isConnected() == 0) return -1;
  return socket->printf("int(%d,%d)\n",id,i);
}
int rlDataProviderClient::setIntAndWaitForReset ( rlSocket socket,
int  id,
int  i 
)

Definition at line 549 of file rldataprovider.cpp.

{
  if(socket->isConnected() == 0) return -1;
  return socket->printf("intAndReset(%d,%d)\n",id,i);
}
int rlDataProviderClient::setIntArray ( rlSocket socket,
int  id,
int *  i,
int  num 
)

Definition at line 479 of file rldataprovider.cpp.

{
  char buf[rl_PRINTF_LENGTH],val[100];
  int nmax,ipos,ind;

  if(num <= 0) return -1;
  nmax = rl_PRINTF_LENGTH - strlen("\")\n") - 1;
  sprintf(buf,"string(%d,\"",id);
  ipos = strlen(buf);
  for(ind=0; ind<num; ind++)
  {
    sprintf(val,"%d,",i[ind]);
    if(ipos+(int)strlen(val) >= nmax) return -1;
    strcat(buf,val);
    ipos = strlen(buf);
  }
  strcat(buf,"\"\n");
  return socket->printf(buf);
}
int rlDataProviderClient::setString ( rlSocket socket,
int  id,
const char *  str 
)

Definition at line 519 of file rldataprovider.cpp.

{
  if(socket->isConnected() == 0) return -1;
  return socket->printf("string(%d,\"%d\")\n",id,str);
}

Member Data Documentation

char rlDataProviderClient::cret[rl_PRINTF_LENGTH] [private]

Definition at line 82 of file rldataprovider.h.

Definition at line 81 of file rldataprovider.h.


The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines