Cliente IceFlix#

A continuación, se especificarán las características que debe implementar el cliente.

Conexión y autenticación#

El cliente debe permitir especificar el proxy del servicio Main que va a utilizar. En caso de capturar un error TemporaryUnavailable, podría informar al usuario, pero debe reintentar automáticamente la conexión hasta un máximo determinado de veces que podrá definir el usuario y que por defecto serán 3 intentos, con una pausa de 5.0 segundos entre ellos.

Cuando la conexión esté establecida (se haya comprobado que el proxy es válido) se debe permitir al usuario autenticarse en el sistema. Esta autenticación no debe ser obligatoria puesto que se permite realizar búsquedas en el catálogo de forma anónima (únicamente por nombre).

En ningún caso el cliente debe mandar la contraseña introducida por el usuario (que tampoco se debe mostrar nunca en el cliente) sino que mandará la representación hexadecimal de la suma SHA256 del password.

También debe permitir cerrar la sesión del usuario para poder cambiar las credenciales si el usuario lo desea.

Por último, el cliente mantendrá informado al usuario en todo momento de que la conexión está establecida y de si existe una sesión iniciada.

Reproducción de medios#

Si el cliente dispone de conexión, autorización y título seleccionado, debe permitir al usuario iniciar la descarga del archivo. Si el cliente recibe durante la descarga la excepción Unautheorized, deberá solicitar al servicio de autenticación un nuevo token y continuar la descarga.

Operaciones administrativas#

Las diferentes operaciones administrativas que están definidas para los servicios deben poder ser utilizadas, bien en el mismo cliente a través de un menú específico, bien en un cliente específico aparte. En ambos casos, el token administrativo se tratará como una contraseña, no debiéndose mostrar en pantalla. Puede ser suministrado como parámetro de configuración.

Para la operación FileService.uploadMedia() será necesario implementar un sirviente de la interfaz FileUploader:

  • receive(): el servicio de stream provider llamará a esta operación para recibir un bloque de bytes, de como máximo, el tamaño indicado.

  • close(): el servicio de stream provider llamará a esta operación para cancelar la subida o cuando el número de bytes recibido en el último receive sea 0, para indicar que ya se ha terminado la transferencia.