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:
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