ELO-329 Diseño y Programación Orientada a Objetos.
Proyecto: "Sincronizador de directorios para múltiples computadores sobre internet"

Por:
Benjamín Ginouvès S.
Diego Martinez

Correo electrónico: benjamin DOT ginouves AT gmail DOT com
Fecha: 05/12/2011

 

Descripción del Problema

El uso de diversos equipos computacionales, fijos y móviles, o el trabajo conjunto entre varias personas conlleva siempre a tener una gran cantidad de versiones de los mismos archivos, a enviar numerosos correos electrónicos con estas diferentes versiones, el que luego se transforma en un problema a la hora de definir el archivo final y distribuirlo a quienes lo requieren. O simplemente poder replicar de modo permanente los archivos esenciales de trabajo, sin la necesidad de utilizar pendrives o similares distrayendo a las personas de sus actividades normales.

Análisis del problema

NO contar con una distribución actualizada y permanente de los archivos de registros de proyectos tanto contables como técnicos en múltiples computadores, ya sea como respaldo, o para trabajo en diferentes equipos sin la necesidad de utilizar discos externos o recurrir a transferencias por correo electrónico a sí mismo o dedicar tiempo a respaldar gran cantidad de datos, es parte esencial del motivo del desarrollo del este software.

Definición de la solución

La implementación de la solución se basa en un software persistente que identifique cualquier cambio en los archivos dentro de una carpeta definida (y subcarpetas) y lo replique en otro equipo al cual esté conectado. Inicialmente el programa calcula una matriz con los archivos de forma de obtener la información de:

[Comando][Ruta  relativa][Nombre del archivo][Tamaño][Ffecha][Hora][Atributos][SHA256][Permisos]

Una vez obtenida la matriz, se comunica con los equipos remotos previamente configurados y transmite la solicitud de sus listas con el hash de la última lista recibida, en proceso separado se envía la lista propia, separando el sistema en Cliente-Servidor. El programa evalúa quien tiene la versión más actualizada de cada uno de los archivos, e inicia un subproceso para cada conexión con las solicitudes, las que son solicitas de forma distribuida, es decir, el programa rechaza* solicitudes en caso de estar bajo una conexión limitada o de baja velocidad.
[*implementación en una versión posterior]

Para el caso de la modificación de uno de los archivos o adhesión de alguno a la carpeta monitoreada, éste programa advierte del cambio y anota en el archivo de lista de cambios el evento ocurrido, el cual es leído por el procesos de envío de datos, el cual envía el comendo y luego el archivo, en el caso de haber sufrido un cambio en su contenido, esto hace que en el caso de eliminar o mover un archivo no se genere una transferencia de datos que se consideraría como repetidos en el destino.

 

Casos de Uso

Diagrama UML del sistema final.

A continuación se indica el diagrama de clases que se espera obtener una vez el sistema está totalmente desarrollado o en una iteración avanzada con funcionalidades de sincronización en funcionamiento.

Diagrama UML del estado en desarrollo.

Debido a que el desarrollo del sistema está aún en la fase de programación, se incluye un diagrama de lo que se tiene a la fecha desarrollado, y es posible probar en el código.

Estado de la implementación

El sistema se encuentra aún en desarrollo, por falta de tiempo no se pudo disponer el desarrollo completo del programa, sólo se implementó la interfaz gráfica del sistema, configuración, la clase de detección de cambios en el directorio monitoreado y parte de la clase de control de cambios a disco o escritura de archivos.

No se incorporó los procesos de control de servidor y cliente para las solicitudes de archivos y listas en el momento de generar este documento, debido a que se tiene un problema lógico, el cual se debe solucionar y se trabaja en ello. Este problema lógico se basa en que se genera un loop en la modificación de un archivo recibido desde otro PC, generando una alerta al sistema y por ello un evento más en la lista. La solución que se implementará es la revisión del la lista generada contrastándola con la lista de archivos recibidos para eliminar ese evento, cosa que requiere de modificación de las clases e interactuación entre ellas.

Las etapas restantes para una primera iteración funcional son:
- Cálculo de sha256 y despliegue de la lista en el archivo de lista de archivos.
- Manejo del protocolo para errores en la conexión y transmisiones.
- Funciones de conexión y entrega de punteros a estas conexiones en el inicio de los subprocesos encargados de la transmisión y solicitud de datos. (Inicio de subprocesos incorporados en el código)
- Funciones de verificación de archivos. (Completar librería de funciones)
- Protocolo para la solicitud de archivos.
- Protocolo para la recepción de solicitudes por archivos.
- Control por eventos en el cierre de la aplicación y terminación de las conexiones de inesperada o por errores.

Código y compilación

La solución se encuentra desarrollada en Visual C++ 2010 (VC++), el cual puede ser compilado directamente en el ambiente (F7 compilación). Se han omitido archivos de la MFC pre-compilados para la solución estática a éstas, lo que puede mostrar un error al no encontrar tales archivos, los que serán generados por el sistema sin problemas.

A continuación se indican los archivos que se encuentran disponibles, cabe señalar que el software aún está en desarrollo, por lo que es una versión no totalmente funcional.

Código para descarga

(archivos .cpp con sus respectivos archivos de encabezamiento .h)