Menu

Documentacion Connection

Tomas Kelly
Attachments
Connection.png (23702 bytes)

Procesos de Connection:

*Proceso Accepter: Encargado de registrar los host que iniciaron la conexion y crear los procesos necesarios para atender la nueva conexion. Se crea un nuevo par Receiver y Sender y se agrega una entrada a la tabla de envio.

*Proceso Hander: Encargado de asignar nombres univocos a los host que lo solicitan. Todos los nombres asignados son firmados con el nombre del host asociado a este Hander.

*Proceso Listener: Encargado de esperar nuevas conexiones y transferirlas a un nuevo proceso Accepter.

*Proceso Query: Encargado de registrar nuevo host en la tabla de hosts o resolver el pedido por la direcion en la cual se encuentra un host con nombre determinado.

*Proceso Resolver: Encargado de esperar nuevos pedidos por registro o resolucion de hosts y lanzar un nuevo proceso Query que los atienda.

*Proceso Receiver: Encargado de recibir los mensajes originados por el otro extremo del canal y colocarlos en una cola, identificados por numero de envio.

*Proceso Sender: Encargado de enviar los mensajes colocados en la cola por el canal establecido con el otro host.


Utilizacion de Connection:

Para utilizar esta capa de comunicacion se presenta el objeto Connection que a su vez brinda los siguentes metodos:

*Creacion de Connection:
int create(const std::string& configFile);

Se pasa el archivo de configuracion adecuado para el host que se esta creando. Se devuelve 0 en caso de no haber habido errores.

*Destruccion:
int destroy();

Se llama a este metodo en todas las Connections creadas, y es la ultima llamada a este metodo que realmente destruye las conexiones creadas.

*Nombre de Host:
std::string getHostName();

Devuelve el nombre del host, el cual puede haber sido estatico o asignado dinamicamente.

*Nombre del Host Padres:
std::string getParentHostName();

Devuelve el nombre del padre, el cual se encuentra en la firma del host. En caso de no tener padre, se devuelve un string vacio.

*Sesion restaurada:
bool isRestored(){ return restored; }

Indica si se trata de una sesion existente, que por algun motivo debio ser restaurada.

*Enviar mensaje:
int send(const std::string& destination, const Packet& data);

Se envia el mensaje contenido en Packet al destinatario corresponidente. Si es necesario se establece una nueva conexion con el destinatario.

*Recibir mensaje:
int receive(Packet& data, std::string& origin);

Se recibe el proximo mensaje presente en la cola de recepcion y se completa el nombre del emisor en la variable origin.


Memoria compartida:

Se utilizara memoria compartida para guardar los datos compartidos entre los procesos:

  • La tabla de Hosts, que contiene los host conocidos
  • La tabla de Dispatch, que contiene identificadores de las conexiones establecidas
  • Lista de procesos de Receivers y Senders
  • Contador de instancias de Connection en uso

-------------------------------------------------------------------------------

Semaforos:

Se utilizara un semaforo para el acceso a la memoria compartida para garantizar la exclusion mutua entre los procesos

-------------------------------------------------------------------------------

Seniales
Se utilizaran seniales para indicarle a los procesos Accepter, Hander, Listener, Query, Receiver, Resolver y Sender que deben finalizar sus actividades.


Archivo de configuracion

Connection configuration file
Definicion de variables para configurar

HOST_NAME = Nombre del Host sobre el cual solicitar nombre unico (Cadena de caracteres)
HOST_ADDR = Direccion para contactar a este host (Hostname o IP):Puerto

REQUEST_NAME = Contactar al Hander para solicitar nombre univoco (Y/N)

HANDS_NAMES = Devuelve el nombre apropiado para distinguir univocamente a un host (Y/N)
HANDS_PORT = Puerto en el que atiende conexiones

RESOLVES_NAMES = Determina si resuleve pedido de hosts desconocidos (Y/N)
RESOLVES_PORT = Puerto en el que atiende conexiones

HANDER_ADDR = Direccion a la cual solicitar el nombre para este host (Hostname o IP):Puerto
RESOLVER_ADDR = Direccion a la cual solicitar resolver nombres (Hostname o IP):Puerto