ANNA Suite  2020b
Multipurpose development suite for Telco applications
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
anna::comm::CompatCodec Class Reference

#include <CompatCodec.hpp>

Inheritance diagram for anna::comm::CompatCodec:
Inheritance graph
[legend]
Collaboration diagram for anna::comm::CompatCodec:
Collaboration graph
[legend]

Public Types

typedef VariableContainer container
 
typedef container::iterator iterator
 
typedef container::const_iterator const_iterator
 
typedef unsigned char Type
 

Public Member Functions

 CompatCodec (const Type type, const bool scramble=true)
 
virtual ~CompatCodec ()
 
Type getType () const
 
const Variableattach (const char *name, const short int id, std::string &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, const char *&value) noexcept(false)
 
const Variableattach (const char *name, const short int id, int &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, S64 &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, bool &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, DataBlock &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, float &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, double &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, Second &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, Millisecond &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, Microsecond &value) noexcept(false)
 
const Variableattach (const char *name, const short int id, comm::CompatCodec &value) noexcept(false)
 
const Variablefind (const short int id) const noexcept(false)
 
void setNull (const short int id, const bool isNull=true) noexcept(false)
 
void setNull (const Variable *variable, const bool isNull=true)
 
bool isNull (const short int id) const noexcept(false)
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
int size () const
 
virtual const DataBlockcode () noexcept(false)
 
virtual void decode (const DataBlock &dataBlock) noexcept(false)
 
- Public Member Functions inherited from anna::comm::Message
 Message ()
 
virtual ~Message ()
 
const DataBlockgetBody () const
 
MessagesetBody (const DataBlock &body) noexcept(false)
 
MessagesetBody (const char *buffer, const int size) noexcept(false)
 
virtual MessagesetBody (const xml::Node *node) noexcept(false)
 
void clearBody ()
 
- Public Member Functions inherited from anna::DataBlock
 DataBlock (const bool deepCopy=false)
 
 DataBlock (const char *buffer, const int size, const bool deepCopy=false) noexcept(false)
 
 DataBlock (const DataBlock &other) noexcept(false)
 
virtual ~DataBlock ()
 
int getMaxSize () const
 
int getSize () const
 
const char * getData () const
 
bool isEmpty () const
 
bool deepCopy () const
 
void setSize (const int size) noexcept(false)
 
DataBlockoperator+= (const char c) noexcept(false)
 
DataBlockoperator+= (const DataBlock &right) noexcept(false)
 
DataBlockoperator+= (const std::string &str) noexcept(false)
 
const char operator[] (const int pos) const noexcept(false)
 
char & operator[] (const int pos) noexcept(false)
 
void append (const char *data, const int len) noexcept(false)
 
void append (const DataBlock &other) noexcept(false)
 
void assign (const DataBlock &right) noexcept(false)
 
void assign (const char *buffer, const int size) noexcept(false)
 
DataBlockoperator= (const DataBlock &right) noexcept(false)
 
DataBlockoperator= (const char c) noexcept(false)
 
DataBlockoperator= (const std::string &str) noexcept(false)
 
void allocate (const int nbytes) noexcept(false)
 
void clear () noexcept(false)
 
void remove (const int pos, const int nbytes) noexcept(false)
 
void remove (const int nbytes) noexcept(false)
 
std::string asString (const int characterByLine=24) const
 

Static Public Member Functions

static Variablevariable (iterator ii)
 
static const Variablevariable (const_iterator ii)
 
static Type getType (const DataBlock &dataBlock) noexcept(false)
 

Protected Attributes

bool a_scramble
 
- Protected Attributes inherited from anna::comm::Message
DataBlocka_codeBuffer
 

Additional Inherited Members

- Protected Member Functions inherited from anna::comm::Message
 Message (const StatusCodeBuffer::_v statusCodeBuffer)
 
 Message (DataBlock &codeBuffer)
 
- Protected Member Functions inherited from anna::DataBlock
void initialize (const char *buffer, const int size) noexcept(false)
 
void setBuffer (const char *buffer)
 
void setMaxSize (const int maxSize)
 

Detailed Description

Codificador/Decodificador compatible con los mensajes

Esta clase ofrece una forma muy eficaz para codificar estructuras de datos complejas y pretende sustituir los tipicos aplanadores y desaplanadores ya que permite que cualquier proceso defina facilmente la forma de transferir cierta informacion sobre un bloque de memoria y viceversa.

Vamos a ver un ejemplo de uso. Primero vamos a definir la clase MensajeDemo:

#include <anna.comm.CompatCodec.h>
class MensajeDemo : public CompatCodec {
public:
static const CompatCodec::Type type = 10;
MensajeDemo () : CompatCodec (type),
a_dataBlock (true)
{
attach ("Entero", 0, a_entero);
attach ("Cadena", 1, a_cadena);
attach ("Bloque datos", 2, a_dataBlock);
}
// Accesores
const int obtenerEntero () const { return a_entero; }
const std::string& obtenerCadena () const { return a_cadena; }
const DataBlock& obtenerDataBlock () const { return a_dataBlock; }
// Modificadores
void establecerEntero (const int entero) { a_entero = entero; }
void establecerCadena (const std::string& cadena) { a_cadena = cadena; }
void establecerCadena (const char* cadena) { a_cadena = cadena; }
void establecerDataBlock (const DataBlock& dataBlock) { a_dataBlock = dataBlock; }
private:
int a_entero;
std::string a_cadena;
DataBlock a_dataBlock;
};

La clase que use esta clase para enviar un mensaje debe establecer los valores de cada uno de los datos mediante los modificadores definidos y luego invocar al metodo code que transferiria el contenido de las variables asociadas a este mensaje a un bloque de memoria, que normalmente seriausado como mensaje.

Por otra parte la clase que recibe el mensaje invocar�al metodo decode que transfiere el contenido del bloque de memoria a cada una de las variables asociadas al mensaje. Posteriormente, podremos acceder al contenido de cada una de las variables asociadas al mensaje atraves de los accesores definidos para el caso.

Estos codificadores nos dan la posibilidad de definir variables opcionales, de forma que una determinada variable puede no ser transferida al bloque de memoria, y por tanto puede no ser recibida en el otro extremo. Ver el metodo isNull y setNull para mas informacion.

Warning
Esta clase no establece proteccion ante accesos concurrentes

Member Typedef Documentation

◆ const_iterator

◆ container

typedef VariableContainer anna::comm::CompatCodec::container

◆ iterator

◆ Type

typedef unsigned char anna::comm::CompatCodec::Type

Constructor & Destructor Documentation

◆ CompatCodec()

anna::comm::CompatCodec::CompatCodec ( const Type  type,
const bool  scramble = true 
)
explicit

Constructor.

Parameters
typeTipo por el que sera conocido este tipo de mensaje.
scrambleIndica si el mensaje debe ser codificado de forma que no se pueda ver el contenido del mismo con una simple herramienta de monitorizacion de mensajes de red. Por defecto esta activo ya que la codificacion realizada es muy simple y rapida y el tiempo empleado es casi inapreciable.

◆ ~CompatCodec()

virtual anna::comm::CompatCodec::~CompatCodec ( )
virtual

Destructor.

Member Function Documentation

◆ attach() [1/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
std::string &  value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos. La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [2/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
const char *&  value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [3/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
int &  value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [4/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
S64 value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [5/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
bool &  value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [6/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
DataBlock value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa. Debe tener activado el sistema de copia profunda.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [7/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
float &  value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa. Debe tener activado el sistema de copia profunda.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [8/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
double &  value 
)
noexcept

Asocia el valor recibido como parametro al dato interno identificado por `id'. Esta clase estapensada principalmente para comunicar entre si procesos remotos La unica restriccion que se les imponen a ambos que es compartan el significado que cada uno de ellos le da a un determinado `id'.

Parameters
nameNombre logico de la variable
idIdentificador asignado al dato.
valueRerencia a una variable de nuestro entorno usada para transferir los datos de la memoria al mensaje y viceversa. Debe tener activado el sistema de copia profunda.
Returns
Un puntero que hace referencia al nuevo dato interno que ha sido creado.

◆ attach() [9/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
Second value 
)
noexcept

◆ attach() [10/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
Millisecond value 
)
noexcept

◆ attach() [11/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
Microsecond value 
)
noexcept

◆ attach() [12/12]

const Variable* anna::comm::CompatCodec::attach ( const char *  name,
const short int  id,
comm::CompatCodec value 
)
noexcept

Asocia el mensaje recibido como un parámetro interno especificado por id.

Parameters
nameNombre lógico de la variable.
idIdentificador del dato asignado.
valueInstancia del mensaje que se codificará/decodificará de forma recursiva.

◆ begin() [1/2]

iterator anna::comm::CompatCodec::begin ( )
inline

Devuelve un iterador al comienzo de la lista de variables asociados a este mensaje.

Returns
Un iterador al comienzo de la lista de variables asociados a este mensaje.
325 { return a_variables.begin(); }

◆ begin() [2/2]

const_iterator anna::comm::CompatCodec::begin ( ) const
inline

Devuelve un iterador al comienzo de la lista de variables asociados a este mensaje.

Returns
Un iterador al comienzo de la lista de variables asociados a este mensaje.
331 { return a_variables.begin(); }

◆ code()

virtual const DataBlock& anna::comm::CompatCodec::code ( )
virtualnoexcept

Transfiene los datos establecidos en este mensaje interno a un bloque de memoria cuya instancia es devuelta por este metodo.

Returns
Bloque de memoria que contiene la informacion del mensaje.

Reimplemented from anna::comm::Message.

◆ decode()

virtual void anna::comm::CompatCodec::decode ( const DataBlock dataBlock)
virtualnoexcept

Transfiene la informacion contenida en el bloque de memoria recibido hacia las variables asociadas a este mensaje interno. Las variables cuyo value no esta incluidas en el bloque de memoria seria marcadas como nulas.

Parameters
dataBlockBloque de memoria que contiene las variables codificadas.

Reimplemented in anna::comm::LargeBinaryCodec.

◆ end() [1/2]

iterator anna::comm::CompatCodec::end ( )
inline

Devuelve un iterador al comienzo de la lista de variables asociados a este mensaje.

Returns
Un iterador al final de la lista de variables asociados a este mensaje.
337 { return a_variables.end(); }

◆ end() [2/2]

const_iterator anna::comm::CompatCodec::end ( ) const
inline

Devuelve un iterador al comienzo de la lista de variables asociados a este mensaje.

Returns
Un iterador al final de la lista de variables asociados a este mensaje.
343 { return a_variables.end(); }

◆ find()

const Variable& anna::comm::CompatCodec::find ( const short int  id) const
noexcept

Devuelve la referencia al dato interno identificado por el `id' recibido como parametro.

Parameters
idIdentificador asignado al dato que queremos obtener.
Returns
La referencia de la variable identificada por 'id'. Si no existe se lanzar�una excepcin.

◆ getType() [1/2]

Type anna::comm::CompatCodec::getType ( ) const
inline

Devuelve el identificador del mensaje indicado en el constructor.

Returns
El identificador de este mensaje.
157 { return a_type; }
Here is the call graph for this function:

◆ getType() [2/2]

static Type anna::comm::CompatCodec::getType ( const DataBlock dataBlock)
staticnoexcept

Permite conocer el identificador del mensaje que viene contenido en el bloque de memoria antes de realizar la decodificacion.

Parameters
dataBlockBloque de memoria que contiene la informacion del mensaje.
Returns
El tipo del mensaje contenido en el bloque de memoria.

◆ isNull()

bool anna::comm::CompatCodec::isNull ( const short int  id) const
noexcept
Parameters
idIdentificador asignado al dato.
Returns
Devuelve false si el dato identificado por `id' tiene algun valor o true en caso de que el dato haya sido marcado como nulo. Por defecto se considera que todos los datos tienen valor. Un dato puede tener un value nulo, bien por que se ha invocado a la funcin setNull o bien porque se recibio un mensaje en el que no venia contenido el identificador del dato.

◆ setNull() [1/2]

void anna::comm::CompatCodec::setNull ( const short int  id,
const bool  isNull = true 
)
noexcept

Marca el dato asociado al identificador recibido como nulo, lo cual conlleva que el dato no seria transferido al bloque de memoria del mensaje en caso de invocar al metodo de codificacion.

Parameters
idIdentificador asignado al dato.
isNullIndica la nueva marca de la variable.

◆ setNull() [2/2]

void anna::comm::CompatCodec::setNull ( const Variable variable,
const bool  isNull = true 
)

Marca el dato recibido como nulo, lo cual conlleva que el dato no seria transferido al bloque de memoria del mensaje en caso de invocar al metodo de codificacion.

Parameters
variableInstancia de Varaible obtenida al invocar al método attach
isNullIndica la nueva marca de la variable.

◆ size()

int anna::comm::CompatCodec::size ( ) const
inline

Devuelve el número de enginees asociados a.esta instancia.

Returns
el número de enginees asociados a.esta instancia.
349 { return a_variables.size(); }

◆ variable() [1/2]

static Variable* anna::comm::CompatCodec::variable ( iterator  ii)
inlinestatic

Devuelve la instancia de la variable sobre el que esta posicionado el iterador recibido como parametro.

Parameters
iiIterador que debera estar comprendido entre begin y end.
Returns
La instancia de la variable sobre el que esta posicionado el iterador recibido
357 { return container::data(ii); }

◆ variable() [2/2]

static const Variable* anna::comm::CompatCodec::variable ( const_iterator  ii)
inlinestatic

Devuelve la instancia de la variable sobre el que esta posicionado el iterador recibido como parametro.

Parameters
iiIterador que debera estar comprendido entre begin y end.
Returns
La instancia de la variable sobre el que esta posicionado el iterador recibido
365 { return container::data(ii); }
Here is the call graph for this function:

Member Data Documentation

◆ a_scramble

bool anna::comm::CompatCodec::a_scramble
protected

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