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

#include <Communicator.hpp>

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

Classes

struct  WorkMode
 

Public Types

typedef SortedVector< Handler, SortByFileDescriptor > Handlers
 
typedef Handlers::const_iterator const_handler_iterator
 
typedef Handlers::iterator handler_iterator
 
typedef std::vector< const Service * > Services
 
typedef Services::const_iterator const_service_iterator
 

Public Member Functions

 Communicator (const WorkMode::_v acceptMode=WorkMode::Single)
 
virtual ~Communicator ()
 
const MillisecondgetRecoveryTime () const
 
const StatusgetStatus () const
 
const MillisecondgetTimeout () const
 
WorkMode::_v getWorkMode () const
 
bool isServing () const
 
bool hasRequestedStop () const
 
void notifyPendingClose ()
 
void setRecoveryTime (const Millisecond &recoveryTime) noexcept(false)
 
void setTryingConnectionTime (const Millisecond &tryingConnectionTime) noexcept(false)
 
const MillisecondgetTryingConnectionTime () const
 
void setTimeout (const Millisecond &timeout)
 
void setLevelOfDenialService (const int levelOfDenialService) noexcept(false)
 
int getLevelOfDenialService () const
 
void attach (ServerSocket *serverSocket) noexcept(false)
 
void attach (LocalConnection *localConnection) noexcept(false)
 
void attach (ClientSocket *clientSocket) noexcept(false)
 
void attach (DatagramSocket *datagramSocket) noexcept(false)
 
void attach (Handler *handler) noexcept(false)
 
void attach (Service *service) noexcept(false)
 
void detach (ServerSocket *serverSocket)
 
void detach (ClientSocket *clientSocket)
 
void detach (Handler *handler)
 
const HandlergetHandler (const ClientSocket &clientSocket) noexcept(false)
 
void accept () noexcept(false)
 
void requestStop ()
 
bool isUsable (const ClientSocket *clientSocket)
 
int handler_size () const
 
handler_iterator handler_begin ()
 
handler_iterator handler_end ()
 
const_handler_iterator handler_begin () const
 
const_handler_iterator handler_end () const
 
const_service_iterator service_begin () const
 
const_service_iterator service_end () const
 
virtual void eventUser (const char *id, const void *context)
 
virtual void eventBreakAddress (const in_addr_t &address)
 
virtual void eventRecoverAddress (const in_addr_t &address)
 
virtual bool eventAcceptConnection (const ClientSocket &clientSocket) noexcept(false)
 
virtual void eventCreateConnection (const Server *server)
 
virtual void eventCreateConnection (const Service *service)
 
virtual void eventReceiveMessage (ClientSocket &clientSocket, const Message &message) noexcept(false)
 
virtual void eventOverQuota (const ClientSocket &clientSocket)
 
virtual void eventDiscardConnection (const ClientSocket &clientSocket)
 
virtual void eventIgnoreBurst (const ClientSocket &clientSocket, const DataBlock &burst)
 
std::string asString () const
 
virtual xml::NodeasXML (xml::Node *parent) const
 
- Public Member Functions inherited from anna::app::Component
virtual ~Component ()
 
void attach () noexcept(false)
 
- Public Member Functions inherited from anna::Component
const char * getClassName () const
 
- Public Member Functions inherited from anna::Mutex
 Mutex (const Mode::_v mode=Mode::Recursive)
 
virtual ~Mutex ()
 
virtual void lock () noexcept(false)
 
virtual void unlock ()
 
bool trylock () noexcept(false)
 
 operator const pthread_mutex_t * () const
 

Static Public Member Functions

static void setReceivingChunkSize (const int receivingChunkSize) noexcept(false)
 
static int getReceivingChunkSize ()
 
static Handlerhandler (handler_iterator &ii)
 
static const Handlerhandler (const_handler_iterator &ii)
 
static const Serviceservice (const_service_iterator &ii)
 
static const char * getClassName ()
 

Static Public Attributes

static const Millisecond MinRecoveryTime
 
static const Millisecond DefaultRecoveryTime
 
static const Millisecond MaxRecoveryTime
 
static const Millisecond MinTryingConnectionTime
 
static const Millisecond DefaultTryingConnectionTime
 
static const Millisecond MaxTryingConnectionTime
 
static const int MinReceivingChunkSize = 2 * 1024
 
static const int MaxReceivingChunkSize = 64 * 1024
 
static const Millisecond DefaultTimeout
 
static const int DefaultChunkSize = 16 * 1024
 

Protected Member Functions

virtual void eventBreakConnection (const ClientSocket &clientSocket)
 
virtual void eventBreakLocalConnection (const ClientSocket &clientSocket)
 
virtual void eventBreakConnection (const Server *server)
 
virtual void eventBreakConnection (const Service *service)
 
virtual void do_initialize () noexcept(false)
 
void do_stop ()
 
virtual void setStatus (const Status &status)
 
void attach (BinderSocket *binderSocket) noexcept(false)
 
void detach (BinderSocket *binderSocket)
 
virtual void eventStartup () noexcept(false)
 
virtual void eventShutdown ()
 
- Protected Member Functions inherited from anna::app::Component
 Component (const char *className)
 
State::_v getState () const
 
void addPredecessor (const char *componentName)
 
void initialize () noexcept(false)
 
void stop ()
 
virtual void kill ()
 
- Protected Member Functions inherited from anna::Component
 Component (const char *className)
 
 Component (const Component &other)
 
- Protected Member Functions inherited from anna::Safe
 Safe ()
 

Friends

class Handler
 
class Server
 
class handler::RemoteConnection
 
class handler::ClientSocket
 
class handler::LocalConnection
 

Additional Inherited Members

- Protected Attributes inherited from anna::Component
const std::string a_className
 

Detailed Description

Clase que integra todos los elementos implicados en la recepcin y/o envio y tratamiento de mensajes de red.

Los mensajes recibidos y/o enviados a la capa de transporte seran tratados por el protocolo asociado al socket cliente. Normalmente todos los socket clientes asociados a un comunicador tendran asociado un mismo tipo de protocolo. Ver Transport.

Normalmente, y una vez que recibimos un mensaje (ver eventReceiveMessage) aplicaremos algun codec (ver Codec) para interpretar el contenido del mensaje, de forma analoga, para enviar un mensaje a la capa de transporte usando cualquier protocolo lo normal sera haber codificado cierta informacion usando algun codec.

Warning
Siempre que usemos un Communicator debemos establecer una clase Application heredada de comm::Application.

Member Typedef Documentation

◆ const_handler_iterator

Definicion para el iterador de controladores

◆ const_service_iterator

typedef Services::const_iterator anna::comm::Communicator::const_service_iterator

Definicion para el iterador de servicios

◆ handler_iterator

Definicion para el iterador de controladores

◆ Handlers

Definicion para gestionar los controladores asociados a este comunicador

◆ Services

typedef std::vector<const Service*> anna::comm::Communicator::Services

Definicion para gestionar los servicios asociados a este comunicador

Constructor & Destructor Documentation

◆ Communicator()

anna::comm::Communicator::Communicator ( const WorkMode::_v  acceptMode = WorkMode::Single)

Constructor.

Parameters
acceptModeModo en que se trata las peticiones.

◆ ~Communicator()

virtual anna::comm::Communicator::~Communicator ( )
virtual

Destructor

Member Function Documentation

◆ accept()

void anna::comm::Communicator::accept ( )
noexcept

El thread que invoca a este Metodo entra en un proceso continuo de comprobacin/recepcin de mensajes, todos los eventos que pueden afectar al comportamiento de nuestro comunicador como son aceptacin y cierre de conexiones, caidas, recepcin de mensajes, etc, etc se notifican a traves de los Metodos manejadores de eventos de esta misma clase. El thread saldra de este bucle tras la invocacion del Metodo requestStop.

◆ asString()

std::string anna::comm::Communicator::asString ( ) const
virtual

Devuelve una cadena con la informacion mas relevante de esta instancia.

Returns
Una cadena con la informacion mas relevante de esta instancia.

Reimplemented from anna::app::Component.

◆ asXML()

virtual xml::Node* anna::comm::Communicator::asXML ( xml::Node parent) const
virtual

Devuelve un documento XML con la informacion mas relevante de esta instancia.

Parameters
parentNodo XML del que colgar la informacion referente a esta instancia.
Returns
Un documento XML con la informacion mas relevante de esta instancia.

Reimplemented from anna::app::Component.

◆ attach() [1/7]

void anna::comm::Communicator::attach ( ServerSocket serverSocket)
noexcept

Registra un servidor de socket a la lista de peticiones por las que atiende peticiones este Communicator. Un Communicator puede atender peticiones por un numero indeterminado de direcciones lo que nos permite disear facilmente sistemas tolerantes a fallos.

Parameters
serverSocketServidor de socket por el que vamos a atender el establecimiento de conexiones una vez que invoquemos al Metodo accept.

◆ attach() [2/7]

void anna::comm::Communicator::attach ( LocalConnection localConnection)
noexcept

Registra una conexion Local entre alguno de los ServerSocket definidos en nuestra aplicacion y algun cliente remoto que solicita la conexion.

Antes de pasar a gestionar esta conexion debera de haber sido acceptada en el metodo eventAcceptConnection (a no ser que re-escribamos su comportamiento aceptara conexiones de cualquier cliente).

Parameters
localConnectionInstancia de la conexion local que vamos a controlar.
Warning
Exclusivamente uso interno

◆ attach() [3/7]

void anna::comm::Communicator::attach ( ClientSocket clientSocket)
noexcept

Establece la conexion entre el comunicador y un ClientSocket recibido como parametro. El socket recibido se inicializa se fuera necesario.

Parameters
clientSocketInstancia del socket que vamos a controlar.

◆ attach() [4/7]

void anna::comm::Communicator::attach ( DatagramSocket datagramSocket)
noexcept

Establece la conexion entre el comunicador y un DatagramSocket recibido como parametro. El socket recibido se inicializa se fuera necesario.

Parameters
datagramSocketInstancia del socket que vamos a controlar.

◆ attach() [5/7]

void anna::comm::Communicator::attach ( Handler handler)
noexcept

Conecta un conector externo a este comunicador.

Parameters
handlerControlador de comunicaciones externas.
Warning
Debe de haber sido creado como de tipo Handler::Type::Custom.

◆ attach() [6/7]

void anna::comm::Communicator::attach ( Service service)
noexcept

Conecta un servicio de reparto de comunicaciones con este comunicador. El estado de disponibilidad/indisponibilidad de este comunicador estara definido en base a la disponibilidad de todos los servicios definidos como criticos.

Parameters
serviceInstancia del servicio.
Warning
Todos los servicios registrados como criticos deberian estar asociados al comunicador.

◆ attach() [7/7]

void anna::comm::Communicator::attach ( BinderSocket binderSocket)
protectednoexcept

Establece la conexion entre el comunicador y un socket dedicado a la comparticion de una determinada direccion IP:puerto.

Parameters
binderSocketDefine un socket por el que tratar las peticiones de comparticion de una determinada direccion IP:puerto.

◆ detach() [1/4]

void anna::comm::Communicator::detach ( ServerSocket serverSocket)

Desconecta el ServerSocket que fue previamente conectado con attach

Parameters
serverSocketInstancia del socket que vamos a desconectar.
Warning
Este metodo es invocado automaticamente desde el nucleo de anna.comm y no deberia ser usado por el programador final.

◆ detach() [2/4]

void anna::comm::Communicator::detach ( ClientSocket clientSocket)

Desconecta el ClientSocket que fue previamente conectado con attach

Parameters
clientSocketInstancia del socket que vamos a desconectar.
Warning
Este metodo es invocado automaticamente desde el nucleo de ANNA.comm y no deberia ser usado por el programador final.

◆ detach() [3/4]

void anna::comm::Communicator::detach ( Handler handler)

Desconecta el conector externo de este comunicador. Supone que todas las operaciones adicionales necesarias para liberar los recursos de este fichero seran realizadas externamente.

Parameters
handlerControlador de comunicaciones externas.
Warning
Exclusivamente uso interno

◆ detach() [4/4]

void anna::comm::Communicator::detach ( BinderSocket binderSocket)
protected

Desconecta el BinderSocket que fue previamente conectado con attach(BinderSocket*).

Parameters
binderSocketInstancia del BinderSocket a desconectar.
Warning
Exclusivamente uso interno

◆ do_initialize()

virtual void anna::comm::Communicator::do_initialize ( )
inlineprotectedvirtualnoexcept

Establecer la configuracin de este comunicador. El cargador de configuracin se encarga de establecer los ServerSocket por los que este comunicador va a atender peticiones y/o los procesos servidores remotos con los que tenemos que establecer el canal de comunicaciones.

Warning
Este Metodo debe invocarse desde las clases heredadas.

Implements anna::app::Component.

721 {;}

◆ do_stop()

void anna::comm::Communicator::do_stop ( )
inlineprotectedvirtual

Solicita la parada de este comunicador. Se reimplementa para mantener el interfaz de la clase Component de la que hereda este Communicator.

Implements anna::app::Component.

727 { requestStop(); }

◆ eventAcceptConnection()

virtual bool anna::comm::Communicator::eventAcceptConnection ( const ClientSocket clientSocket)
virtualnoexcept

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica que ha detectado una peticion de conexion desde un proceso remoto a un ServerSocket asociado a este comunicador. Cualquier re-implementacion de este metodo debe invocar al metodo de la clase base y devolver false en caso de que este lo devuelva.

Parameters
clientSocketSocket cliente que solicita acceso.
Returns
true si la conexion es acceptada a false en otro caso, en cuyo caso se liberaran automaticamente todos los recursos asociados a la peticion de conexion.
Warning
Desde ANNA.comm 1.11.18 se mide el nivel de carga del proceso y si se evalúa como congestionado no permitirá aceptar la nueva conexión.

◆ eventBreakAddress()

virtual void anna::comm::Communicator::eventBreakAddress ( const in_addr_t &  address)
virtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la perdida de conexion con la direccion IP indicada.

Parameters
addressInterfaz de red que ha dejado de estar disponible.
Warning
  • La forma en que detectara la caida del interfaz de red no esta dentro del ambito del problema de ANNA.comm debera haber una capa superior que se encargue de comprobar las interfaces.
  • El nucleo de ANNA.comm necesita conocer este evento por lo que cualquier implementacin debera invocar al Metodo eventBreakAddress de su clase base.

◆ eventBreakConnection() [1/3]

virtual void anna::comm::Communicator::eventBreakConnection ( const ClientSocket clientSocket)
inlineprotectedvirtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la perdida de conexion con un servidor remoto.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

Parameters
clientSocketSocket cliente asociado a esta rotura de conexion.
Warning
despues de llamar a este Metodo el clientSocket pasado como parametro se liberara por lo que despues de este Metodo esta instancia no debera utilizarse.
Estado MT:
[Tx] -> Communicator
665 {;}

◆ eventBreakConnection() [2/3]

virtual void anna::comm::Communicator::eventBreakConnection ( const Server server)
protectedvirtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la perdida de conexion con el proceso servidor recibido como parametro.

Se invocara desde #accept(ServerSocket&) cuando no se detecta la rotura de conexion con un socket asociado a uno de nuestros servidores.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

Las acciones realizadas por este metodo incluyen:

  • Cierre del socket asociado al proceso servidor cuya conexion ha caido.
  • Reorganizacion del sistema de reparto de carga para que marque el proceso servidor como no disponible.
  • Activar los sistemas de recuperacion de conexion en el caso de que el servidor que ha caido vuelva a estar disponible.
Warning
Cualquier reimplementacion de este metodo debe comenzar invocando al metodo original de la clase Communicator de la que herede nuestra clase.
Estado MT:
[Tx] -> Communicator
Parameters
serverProceso servidor con el que hemos perdido la conexion.

◆ eventBreakConnection() [3/3]

virtual void anna::comm::Communicator::eventBreakConnection ( const Service service)
protectedvirtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de anna.comm notifica la perdida de conexion con todos los procesos asociados al servicio recibido como parametro.

Parameters
serviceServicio que ha dejado de estar disponible.
Warning
Estado MT:
[Tx] -> Communicator

◆ eventBreakLocalConnection()

virtual void anna::comm::Communicator::eventBreakLocalConnection ( const ClientSocket clientSocket)
inlineprotectedvirtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la perdida de conexion de una conexion generada por un server socket.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

Parameters
clientSocketSocket cliente asociado a esta rotura de conexion.
676 {;}

◆ eventCreateConnection() [1/2]

virtual void anna::comm::Communicator::eventCreateConnection ( const Server server)
virtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la creacion de una nueva conexion con el proceso servidor recibido como parametro.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

Warning
Cualquier reimplementacion de este metodo debe comenzar invocando al metodo original de la clase Communicator de la que herede nuestra clase.
Parameters
serverProceso servidor con el que hemos establecido la conexion.
See also
Host::createServer

◆ eventCreateConnection() [2/2]

virtual void anna::comm::Communicator::eventCreateConnection ( const Service service)
virtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la creacion de una nueva conexion con el servicio de reparto recibido como parametro.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

Warning
Cualquier reimplementacion de este metodo debe comenzar invocando al metodo original de la clase Communicator de la que herede nuestra clase.
Parameters
serviceServicio con el que hemos establecido la conexion.
See also
Host::createServer

◆ eventDiscardConnection()

virtual void anna::comm::Communicator::eventDiscardConnection ( const ClientSocket clientSocket)
inlinevirtual

Establece las acciones a realizar cuando el núcleo de ANNA.comm notifica que ha cerrado un anna::comm::ClientSocket debido a que ha recibido un mensaje que no ha sido analizado correctamente.

Parameters
clientSocketSocket cliente que va a ser cerrado por el nucleo de ANNA.comm.
600 {;}

◆ eventIgnoreBurst()

virtual void anna::comm::Communicator::eventIgnoreBurst ( const ClientSocket clientSocket,
const DataBlock burst 
)
inlinevirtual

Método manejador invocado cuando un client socket que tiene activado el indicador de ignorar los mensajes entrantes recibe un mensaje.

Parameters
clientSocketClientSocket por el que se recibe el mensaje.
burstBloque de datos que contiene la trama recibida.
608 {;}

◆ eventOverQuota()

virtual void anna::comm::Communicator::eventOverQuota ( const ClientSocket clientSocket)
inlinevirtual

Establece las acciones a realizar cuando el nucleo de ANNA.comm notifica que ha cerrado un anna::comm::ClientSocket debido a un consumo excesivo de memoria.

Parameters
clientSocketSocket cliente que va a ser cerrado por el nucleo de ANNA.comm.
592 {;}

◆ eventReceiveMessage()

virtual void anna::comm::Communicator::eventReceiveMessage ( ClientSocket clientSocket,
const Message message 
)
inlinevirtualnoexcept

Establece las acciones a realizar cuando la clase Communicator detecta la llegada de un mensaje completo analizado con el protocolo indicado.

Se invocara desde el Metodo accept cuando se detecta la llegada de un mensaje.

En entorno MT todos los threads actuaran sobre la unica instancia del comm::Communicator lo que restara eficacia debido al bajo nivel de paralelismo.

Parameters
clientSocketSocket cliente por el que ha llegado el mensaje.
messageUltimo mensaje recibido. El bloque de datos recibido ya ha sido decodificado aplicando las reglas establecidas por la capa de transporte asociado al ClientSocket por el que llega el mensaje.
Warning
Para ANNA.comm version 1.5.2 y posteriores se deberian usar el sistema de receiveres (anna::comm::Receiver) que ofrece mayor rendimiento y facilita la programacion en entorno MT.
585  { ; }

◆ eventRecoverAddress()

virtual void anna::comm::Communicator::eventRecoverAddress ( const in_addr_t &  address)
virtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica la recuperacin de conexion con la direccion IP indicada.

Parameters
addressInterfaz de red que ha vuelto a estar disponible.
Warning
  • La forma en que detectara la recuperacin del interfaz de red no esta dentro del ambito del problema de ANNA.comm debera haber una capa superior que se encargue de comprobar las interfaces.
  • El nucleo de ANNA.comm necesita conocer este evento por lo que cualquier implementacin debera invocar al Metodo eventRecoverAddress de su clase base.

◆ eventShutdown()

virtual void anna::comm::Communicator::eventShutdown ( )
protectedvirtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica que este va a dejar de atender peticiones.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

◆ eventStartup()

virtual void anna::comm::Communicator::eventStartup ( )
inlineprotectedvirtualnoexcept

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador cuando el nucleo de ANNA.comm notifica que este comunicador esta preparado para comenzar a aceptar y/o enviar mensajes.

Se invocara desde el metodo accept inmediatamente antes de comenzar a comprobar la llegada de mensajes.

En la mayoria de los casos no sera necesario indicar ninguna accion ya que ANNA.comm realiza todas las operaciones necesarias.

764 {;}
Here is the call graph for this function:

◆ eventUser()

virtual void anna::comm::Communicator::eventUser ( const char *  id,
const void *  context 
)
inlinevirtual

Metodo manejador de evento que permite ajustar el funcionamiento de nuestro comunicador ante un evento generado por el propio programador.

Sera invocado por algun Metodo del programador con el objetivo de actuar sobre su comunicador en una situacin indeterminada.

La interpretacin del identificador y el contenido de este contexto sera problema exclusivo del programador ya que ANNA.comm no impone ninguna regla ni realiza ningn tipo de proceso adicional con estos datos.

Parameters
idIdentifica el evento generado.
contextContexto asociado al evento que ha generado el usuario.
Warning
Este Metodo no debera generar ningn tipo de excepcin.
483 {;}

◆ getClassName()

static const char* anna::comm::Communicator::getClassName ( )
inlinestatic

Devuelve la cadena por la que podemos buscar el componente.

Returns
La cadena por la que podemos buscar el componente.
See also
Application::find
649 { return "anna::comm::Communicator"; }

◆ getHandler()

const Handler* anna::comm::Communicator::getHandler ( const ClientSocket clientSocket)
noexcept

Devuelve el manejador asociado al ClientSocket recibido como parametro.

Parameters
clientSocketSocket cliente del que queremos obtener en handler.
Returns
El manejador asociado al socket recibido como parametro. Puede ser NULL.

◆ getLevelOfDenialService()

int anna::comm::Communicator::getLevelOfDenialService ( ) const
inline

Devuelve el nivel de congestión a partir del cual un servidor no aceptará nuevas conexiones.

Returns
el nivel de congestión a partir del cual un servidor no aceptará nuevas conexiones.
308 { return a_levelOfDenialService; }

◆ getReceivingChunkSize()

static int anna::comm::Communicator::getReceivingChunkSize ( )
inlinestatic

Obtiene el tamaño máximo del bloque de memoria a procesar de forma ininterrumpida.

Returns
el tamaño máximo del bloque de memoria a procesar de forma ininterrumpida.
285 { return st_ReceivingChunkSize; }

◆ getRecoveryTime()

const Millisecond& anna::comm::Communicator::getRecoveryTime ( ) const
inline

Devuelve el numero de segundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.

Returns
El numero de segundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.
201 { return a_recoveryTime; }

◆ getStatus()

const Status& anna::comm::Communicator::getStatus ( ) const
inline

Devuelve el estado de este proceso con respecto al sistema de comunicaciones.

Returns
El estado de este proceso con respecto al sistema de comunicaciones.
207 { return a_status; }

◆ getTimeout()

const Millisecond& anna::comm::Communicator::getTimeout ( ) const
inline

Devuelve el numero de milisegundos maximo que puede estar un manejador de conexion local sin recibir mensajes antes de ser cerrado por el nucleo.

Returns
el numero de milisegundos maximo que puede estar un manejador de conexion local sin recibir mensajes antes de ser cerrado por el nucleo.
215 { return a_timeout; }

◆ getTryingConnectionTime()

const Millisecond& anna::comm::Communicator::getTryingConnectionTime ( ) const
inline

Devuelve el numero de milisegundos empleados en intentar conectar con los servidores caídos.

266 { return a_tryingConnectionTime; }

◆ getWorkMode()

WorkMode::_v anna::comm::Communicator::getWorkMode ( ) const
inline

Devuelve el modo de tratamiento de conexiones establecido en el constructor.

220 { return a_workMode; }

◆ handler() [1/2]

static Handler* anna::comm::Communicator::handler ( handler_iterator ii)
inlinestatic

Devuelve el controlador apuntado por el iterador recibido.

Parameters
iiIterador con el que estamos recorriendo los controladores.
Returns
el controlador apuntado por el iterador recibido.
628 { return Handlers::data(ii); }
static Handler * data(iterator ii)
Definition: SortedVector.hpp:132

◆ handler() [2/2]

static const Handler* anna::comm::Communicator::handler ( const_handler_iterator ii)
inlinestatic

Devuelve el controlador apuntado por el iterador recibido.

Parameters
iiIterador con el que estamos recorriendo los controladores.
Returns
el controlador apuntado por el iterador recibido.
635 { return Handlers::data(ii); }
static Handler * data(iterator ii)
Definition: SortedVector.hpp:132

◆ handler_begin() [1/2]

handler_iterator anna::comm::Communicator::handler_begin ( )
inline

Devuelve un iterador que apunta el primer controlador.

Returns
un iterador que apunta el primer controlador.
435 { return a_handlers.begin(); }

◆ handler_begin() [2/2]

const_handler_iterator anna::comm::Communicator::handler_begin ( ) const
inline

Devuelve un iterador que apunta el primer controlador.

Returns
un iterador que apunta el primer controlador.
447 { return a_handlers.begin(); }

◆ handler_end() [1/2]

handler_iterator anna::comm::Communicator::handler_end ( )
inline

Devuelve un iterador que apunta al final de la lista de controladores.

Returns
un iterador que apunta al final de la lista de controladores.
441 { return a_handlers.end(); }

◆ handler_end() [2/2]

const_handler_iterator anna::comm::Communicator::handler_end ( ) const
inline

Devuelve un iterador que apunta al final de la lista de controladores.

Returns
un iterador que apunta al final de la lista de controladores.
453 { return a_handlers.end(); }

◆ handler_size()

int anna::comm::Communicator::handler_size ( ) const
inline

Devuelve el numero handlers activos.

Returns
el numero handlers activos.
429 { return a_handlers.size(); }

◆ hasRequestedStop()

bool anna::comm::Communicator::hasRequestedStop ( ) const
inline

Devuelve el estado del indicador de peticion de parada.

Returns
el estado del indicador de peticion de parada.
234 { return a_requestedStop; }

◆ isServing()

bool anna::comm::Communicator::isServing ( ) const
inline

Devuelve true si este comunicador esta atendiendo peticiones como servidor o false en otro caso.

Returns
true si este comunicador esta atendiendo peticiones como servidor o false en otro caso.
228 { return a_isServing; }

◆ isUsable()

bool anna::comm::Communicator::isUsable ( const ClientSocket clientSocket)

Devuelve true si el ClientSocket recibido como parametro sigue siendo valido o false en caso de que haya dejado de ser valido debido al cierre del extremo remoto, por ejemplo.

Si el ClientSocket recibido es NULL siempre devolvera false.

Returns
true si el ClientSocket recibido como parametro sigue siendo valido o false en caso de que haya dejado de ser valido debido al cierre del extremo remoto, por ejemplo.

◆ notifyPendingClose()

void anna::comm::Communicator::notifyPendingClose ( )
inline

Informa al comunicador de que hay algún socket que ha solicitado el cierre de la conexión.

239 { a_pendingClose = true; }

◆ requestStop()

void anna::comm::Communicator::requestStop ( )

Solicita la parada de este comunicador.

◆ service()

static const Service* anna::comm::Communicator::service ( const_service_iterator ii)
inlinestatic

Devuelve el servicio apuntado por el iterador recibido.

Parameters
iiIterador con el que estamos recorriendo los servicios.
Returns
el servicio apuntado por el iterador recibido.
642 { return *ii; }

◆ service_begin()

const_service_iterator anna::comm::Communicator::service_begin ( ) const
inline

Devuelve un iterador que apunta el primer servicio.

Returns
un iterador que apunta el primer service.
459 { return a_services.begin(); }

◆ service_end()

const_service_iterator anna::comm::Communicator::service_end ( ) const
inline

Devuelve un iterador que apunta al final de la lista de servicios.

Returns
un iterador que apunta al final de la lista de servicios.
465 { return a_services.end(); }

◆ setLevelOfDenialService()

void anna::comm::Communicator::setLevelOfDenialService ( const int  levelOfDenialService)
noexcept

Establece el nivel de congestión global a partir del cual un servidor no aceptará nuevas conexiones. Su valor por defecto será comm::CongestionController::MaxLevel.

Parameters
levelOfDenialServiceNivel de congestión global a partir del cual no se permitirán nuevas conexiones.
Warning
Debe estar entre [comm::CongestionController::MaxLevel - 2, comm::CongestionController::MaxLevel].

◆ setReceivingChunkSize()

static void anna::comm::Communicator::setReceivingChunkSize ( const int  receivingChunkSize)
staticnoexcept

Establece el tamaño del bloque de memoria usado para procesar los mensajes entrantes. Todos los mensajes completos contenidos en el chunk se procesarán de forma ininterrumpida.

Parameters
receivingChunkSizeNúmero de bytes a leer/procesar de forma ininterrumpida.
Warning
el valor indicado deberá estar entre MinReceivingChunkSize y MaxReceivingChunkSize
Experimentalmente se ha comprobado que los mejores rendimientos se obtiene cuando este valor y el MaxPendingBytes del control de congestión tiene valores cercanos, así que cuando se cambia este valor también se invocará a CongestionController::setMaxPendingBytes para establecer este mismo valor.

◆ setRecoveryTime()

void anna::comm::Communicator::setRecoveryTime ( const Millisecond recoveryTime)
noexcept

Establece el numero de milisegundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.

Parameters
recoveryTimenumero de milisegundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.
Warning
el valor indicado deberá estar entre MinRecoveryTime y MaxRecoveryTime

◆ setStatus()

virtual void anna::comm::Communicator::setStatus ( const Status status)
protectedvirtual

Establece el estado de este proceso con respecto al sistema de comunicaciones

Parameters
statusEstado del sistema de comunicaciones que deseamos establecer.

◆ setTimeout()

void anna::comm::Communicator::setTimeout ( const Millisecond timeout)
inline

Establece el numero de milisegundos maximo que puede estar un manejador de conexion local sin recibir mensajes antes de ser cerrado por el nucleo.

Parameters
timeoutNumero de milisegundos maximo sin recibir mensajes.
292 { a_timeout = timeout; }

◆ setTryingConnectionTime()

void anna::comm::Communicator::setTryingConnectionTime ( const Millisecond tryingConnectionTime)
noexcept

Establece el numero de milisegundos empleados en intentar conectar con los servidores caídos cada vez que se cumple el periodo de recuperación y hay servidores caídos.

Parameters
tryingConnectionTimenumero de milisegundos empleados en intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.
Warning
el valor indicado deberá estar entre MinTryingConnectionTime y MaxTryingConnectionTime

Friends And Related Function Documentation

◆ Handler

friend class Handler
friend

◆ handler::ClientSocket

friend class handler::ClientSocket
friend

◆ handler::LocalConnection

friend class handler::LocalConnection
friend

◆ handler::RemoteConnection

friend class handler::RemoteConnection
friend

◆ Server

friend class Server
friend

Member Data Documentation

◆ DefaultChunkSize

const int anna::comm::Communicator::DefaultChunkSize = 16 * 1024
static

Tamaño máximo del búfer a tratar de forma ininterrumpida.

◆ DefaultRecoveryTime

const Millisecond anna::comm::Communicator::DefaultRecoveryTime
static

Numero de milisegundos esperados para intentar la recuperacion de la conexion con los servidores en caso de detectar algun error.

◆ DefaultTimeout

const Millisecond anna::comm::Communicator::DefaultTimeout
static

Numero de milisegundos esperados para considerar que un cliente remoto ha abandonado la conexion.

◆ DefaultTryingConnectionTime

const Millisecond anna::comm::Communicator::DefaultTryingConnectionTime
static

Periodo de tiempo usado por defectoque estará intentando conectar con servidores cada vez que se cumpla el periodo de comprobación de conexiones.

◆ MaxReceivingChunkSize

const int anna::comm::Communicator::MaxReceivingChunkSize = 64 * 1024
static

Tamaño máximo de la cola de entrada de mensajes que se puede establecer.

◆ MaxRecoveryTime

const Millisecond anna::comm::Communicator::MaxRecoveryTime
static

Numero de mínimo milisegundos esperados para intentar la recuperacion de la conexion con los servidores en caso de detectar algun error.

◆ MaxTryingConnectionTime

const Millisecond anna::comm::Communicator::MaxTryingConnectionTime
static

Periodo de tiempo máximo que estará intentando conectar con servidores cada vez que se cumpla el periodo de comprobación de conexiones.

◆ MinReceivingChunkSize

const int anna::comm::Communicator::MinReceivingChunkSize = 2 * 1024
static

Tamaño mínimo de la cola de entrada de mensajes que se puede establecer.

◆ MinRecoveryTime

const Millisecond anna::comm::Communicator::MinRecoveryTime
static

Numero de mínimo milisegundos esperados para intentar la recuperacion de la conexion con los servidores en caso de detectar algun error.

◆ MinTryingConnectionTime

const Millisecond anna::comm::Communicator::MinTryingConnectionTime
static

Periodo de tiempo mínimo que estará intentando conectar con servidores cada vez que se cumpla el periodo de comprobación de conexiones.


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