ConwayLife Sprint 3: Web GUI e Architettura Distribuita

Introduction

Goal: Evolvere il GAME OF LIFE DI CONWAY passando da un'interfaccia locale (Swing) a un'interfaccia Web multi-utente basata su architettura distribuita, soddisfacendo i requisiti di deployment e di separazione dei compiti.

Requirements

  1. Dotare il gioco Life di una pagina HTML come dispositivo di I/O.
  2. La pagina deve costituire un componente esterno alla applicazione, seguendo l'architettura riportata in IoJavalinExt.
  3. Il gestore del gioco sarà l’utente che ha aperto per primo (Owner) la pagina HTML collegata. Solo la pagina dell’Owner avrà i pulsanti di comando START / STOP / CLEAN / EXIT attivi.
  4. La pagina HTML deve essere aggiornata in modo automatico man mano che il gioco procede.
  5. Un utente non-owner che si collega mentre il gioco è in corso deve poter visualizzare correttamente lo stato attuale della griglia.
  6. Il deployment del gioco deve avvenire mediante Docker.

Requirement analysis

Per le classi ed i test della logica core del gioco Life, si fa riferimento allo Sprint 2.

L'interfaccia di Input/Output con il browser è la seguente:


        public interface IOutDev {
            public void display(String msg); // For HMI
            public void displayCell(IGrid grid, int x, int y);
            public void close();
            public void displayGrid(IGrid grid);
        }
        
Il requisito impone una netta separazione tra il frontend ed il backend, il server Javalin viene portato all'esterno dell'applicazione, non andando piu ad estendere la libreria di output del gioco Life (IoutDev), permettendo cosi di scollegarlo dall'app. Per il collegamento con l'app viene utilizzata una classe intermedia che implementa IOutDev e collega il server Javalin al core di gioco.

Problem analysis

Architettura IoJavalin Esterno

Project

Test plans

Testing

Deployment

Per soddisfare il requisito di isolamento e portabilità (R6), l'intero ecosistema è configurato per il rilascio tramite container.

Passi di esecuzione:

  1. Creazione dell'immagine Docker (che include JRE e le due classi Main):
    docker build -t conway-web-gui:1.0 .
  2. Avvio del container esponendo la porta di comunicazione WebSocket e HTTP:
    docker run -p 8080:8080 --rm conway-web-gui:1.0
  3. Accesso al servizio distribuito tramite browser all'indirizzo: http://localhost:8080.

Maintenance

La scomposizione tra View, Server di Routing e Motore di Calcolo garantisce una altissima manutenibilità. Sostituire l'interfaccia HTML con un'App Mobile o sostituire Javalin con Spring Boot non richiederà la ricompilazione del Core matematico del gioco.



By Luca Zanarini | email: luca.zanarini2@studio.unibo.it
GIT repo: https://github.com/LZanaaa/ISS26