ANNA Suite
2020b
Multipurpose development suite for Telco applications
|
#include <Communicator.hpp>
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 Millisecond & | getRecoveryTime () const |
const Status & | getStatus () const |
const Millisecond & | getTimeout () 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 Millisecond & | getTryingConnectionTime () 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 Handler * | getHandler (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::Node * | asXML (xml::Node *parent) const |
![]() | |
virtual | ~Component () |
void | attach () noexcept(false) |
![]() | |
const char * | getClassName () const |
![]() | |
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 Handler * | handler (handler_iterator &ii) |
static const Handler * | handler (const_handler_iterator &ii) |
static const Service * | service (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 () |
![]() | |
Component (const char *className) | |
State::_v | getState () const |
void | addPredecessor (const char *componentName) |
void | initialize () noexcept(false) |
void | stop () |
virtual void | kill () |
![]() | |
Component (const char *className) | |
Component (const Component &other) | |
![]() | |
Safe () | |
Friends | |
class | Handler |
class | Server |
class | handler::RemoteConnection |
class | handler::ClientSocket |
class | handler::LocalConnection |
Additional Inherited Members | |
![]() | |
const std::string | a_className |
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.
Definicion para el iterador de controladores
typedef Services::const_iterator anna::comm::Communicator::const_service_iterator |
Definicion para el iterador de servicios
Definicion para el iterador de controladores
typedef SortedVector<Handler, SortByFileDescriptor> anna::comm::Communicator::Handlers |
Definicion para gestionar los controladores asociados a este comunicador
typedef std::vector<const Service*> anna::comm::Communicator::Services |
Definicion para gestionar los servicios asociados a este comunicador
anna::comm::Communicator::Communicator | ( | const WorkMode::_v | acceptMode = WorkMode::Single | ) |
Constructor.
acceptMode | Modo en que se trata las peticiones. |
|
virtual |
Destructor
|
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.
|
virtual |
Devuelve una cadena con la informacion mas relevante de esta instancia.
Reimplemented from anna::app::Component.
Devuelve un documento XML con la informacion mas relevante de esta instancia.
parent | Nodo XML del que colgar la informacion referente a esta instancia. |
Reimplemented from anna::app::Component.
|
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.
serverSocket | Servidor de socket por el que vamos a atender el establecimiento de conexiones una vez que invoquemos al Metodo accept. |
|
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).
localConnection | Instancia de la conexion local que vamos a controlar. |
|
noexcept |
Establece la conexion entre el comunicador y un ClientSocket recibido como parametro. El socket recibido se inicializa se fuera necesario.
clientSocket | Instancia del socket que vamos a controlar. |
|
noexcept |
Establece la conexion entre el comunicador y un DatagramSocket recibido como parametro. El socket recibido se inicializa se fuera necesario.
datagramSocket | Instancia del socket que vamos a controlar. |
|
noexcept |
Conecta un conector externo a este comunicador.
handler | Controlador de comunicaciones externas. |
|
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.
service | Instancia del servicio. |
|
protectednoexcept |
Establece la conexion entre el comunicador y un socket dedicado a la comparticion de una determinada direccion IP:puerto.
binderSocket | Define un socket por el que tratar las peticiones de comparticion de una determinada direccion IP:puerto. |
void anna::comm::Communicator::detach | ( | ServerSocket * | serverSocket | ) |
Desconecta el ServerSocket que fue previamente conectado con attach
serverSocket | Instancia del socket que vamos a desconectar. |
void anna::comm::Communicator::detach | ( | ClientSocket * | clientSocket | ) |
Desconecta el ClientSocket que fue previamente conectado con attach
clientSocket | Instancia del socket que vamos a desconectar. |
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.
handler | Controlador de comunicaciones externas. |
|
protected |
Desconecta el BinderSocket que fue previamente conectado con attach(BinderSocket*).
binderSocket | Instancia del BinderSocket a desconectar. |
|
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.
Implements anna::app::Component.
|
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.
|
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.
clientSocket | Socket cliente que solicita acceso. |
|
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.
address | Interfaz de red que ha dejado de estar disponible. |
|
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.
clientSocket | Socket cliente asociado a esta rotura de conexion. |
|
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:
server | Proceso servidor con el que hemos perdido la conexion. |
|
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.
service | Servicio que ha dejado de estar disponible. |
|
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.
clientSocket | Socket cliente asociado a esta rotura de conexion. |
|
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.
server | Proceso servidor con el que hemos establecido la conexion. |
|
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.
service | Servicio con el que hemos establecido la conexion. |
|
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.
clientSocket | Socket cliente que va a ser cerrado por el nucleo de ANNA.comm. |
|
inlinevirtual |
Método manejador invocado cuando un client socket que tiene activado el indicador de ignorar los mensajes entrantes recibe un mensaje.
clientSocket | ClientSocket por el que se recibe el mensaje. |
burst | Bloque de datos que contiene la trama recibida. |
|
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.
clientSocket | Socket cliente que va a ser cerrado por el nucleo de ANNA.comm. |
|
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.
clientSocket | Socket cliente por el que ha llegado el mensaje. |
message | Ultimo 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. |
|
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.
address | Interfaz de red que ha vuelto a estar disponible. |
|
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.
|
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.
|
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.
id | Identifica el evento generado. |
context | Contexto asociado al evento que ha generado el usuario. |
|
inlinestatic |
Devuelve la cadena por la que podemos buscar el componente.
|
noexcept |
Devuelve el manejador asociado al ClientSocket recibido como parametro.
clientSocket | Socket cliente del que queremos obtener en handler. |
|
inline |
|
inlinestatic |
|
inline |
Devuelve el numero de segundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.
|
inline |
|
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.
|
inline |
|
inline |
|
inlinestatic |
Devuelve el controlador apuntado por el iterador recibido.
ii | Iterador con el que estamos recorriendo los controladores. |
|
inlinestatic |
Devuelve el controlador apuntado por el iterador recibido.
ii | Iterador con el que estamos recorriendo los controladores. |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
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.
|
inline |
void anna::comm::Communicator::requestStop | ( | ) |
Solicita la parada de este comunicador.
|
inlinestatic |
|
inline |
|
inline |
|
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.
levelOfDenialService | Nivel de congestión global a partir del cual no se permitirán nuevas conexiones. |
|
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.
receivingChunkSize | Número de bytes a leer/procesar de forma ininterrumpida. |
|
noexcept |
Establece el numero de milisegundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion.
recoveryTime | numero de milisegundos esperado para intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion. |
|
protectedvirtual |
Establece el estado de este proceso con respecto al sistema de comunicaciones
status | Estado del sistema de comunicaciones que deseamos establecer. |
|
inline |
|
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.
tryingConnectionTime | numero de milisegundos empleados en intentar recuperar las conexiones de los servidores con los que se han detectado errores de conexion. |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
static |
Tamaño máximo del búfer a tratar de forma ininterrumpida.
|
static |
Numero de milisegundos esperados para intentar la recuperacion de la conexion con los servidores en caso de detectar algun error.
|
static |
Numero de milisegundos esperados para considerar que un cliente remoto ha abandonado la conexion.
|
static |
Periodo de tiempo usado por defectoque estará intentando conectar con servidores cada vez que se cumpla el periodo de comprobación de conexiones.
|
static |
Tamaño máximo de la cola de entrada de mensajes que se puede establecer.
|
static |
Numero de mínimo milisegundos esperados para intentar la recuperacion de la conexion con los servidores en caso de detectar algun error.
|
static |
Periodo de tiempo máximo que estará intentando conectar con servidores cada vez que se cumpla el periodo de comprobación de conexiones.
|
static |
Tamaño mínimo de la cola de entrada de mensajes que se puede establecer.
|
static |
Numero de mínimo milisegundos esperados para intentar la recuperacion de la conexion con los servidores en caso de detectar algun error.
|
static |
Periodo de tiempo mínimo que estará intentando conectar con servidores cada vez que se cumpla el periodo de comprobación de conexiones.