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.

Correo electrónico: benjamin DOT ginouves AT gmail DOT com
Fecha: 18/7/2010

 

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 pendiente a cualquier cambio en los archivos dentro de una carpeta definida (y subcarpetas).Inicialmente el programa calcula una matriz con los archivos de forma de obtener la información de:

[ruta  relativa][Nombre del archivo][tamaño][fecha][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)

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 debido a que por el tiempo que se pudo disponer para el desarrollo del programa, sólo se pudo implementar la interfaz gráfica del sistema, configuración y la clase de detección de cambios en el directorio monitoreado.

No se avanzó en el desarrollo desde la última presentación debido al empleo de este tiempo en la preparación de otro Curso, debido al resultado por el cálculo de la nota final. Pese a que ya no será resultado del ramo, se espera tener una versión funcional el 2 de Julio (2 semanas de dedicación 4 horas diarias), ya que se aplicará esta solución en el corto tiempo en un ambiente real de trabajo diario.

Las funcionalidades restantes para una primera iteración funcional son:
- Entrega del nombre y ruta de los archivos cambiados por la detección del cambio en los archivos.
- Cálculo de sha256 y generación del archivo de lista de archivos.
- Programación del manejo del protocolo para errores en la conexión y transmisiones.
- Funciones de conexión y entrega de punteros a éstas conexiones en el inicio de los subprocesos encargados de la transmisión y solicitud de datos.
- Funciones de verificación de archivos. (librería de funciones)
- Proceso paralelo para la solicitud de archivos.
- Proceso paralelo para la recepción de solicitudes por los archivos.
- Control por eventos en el cierre de la aplicación y/o terminación de las conexiones de forma 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 de trabajo Visual (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)