ConwayLife Sprint3

Introduction

Realizzazione in Java del GAME OF LIFE DI CONWAY, con GUI del gioco mediante pagina Web.

Requirements

  1. Realizzare una versione in Java del gioco Life di Conway, come gioco zero-player. Il gioco consiste nell’introdurre una Griglia di Celle il cui stato (cella ‘viva’ o cella ‘morta’) evolve come stabilito dallle regole di ConwayLife.
  2. L’utente umano deve poter:
    • specificare la configurazione iniziale della griglia del gioco
    • vedere l’evoluzione del gioco in forma opportuna (si veda Problema della vista del gioco)
    • fermare e far ripartire l’evoluzione del gioco
    • pulire (a gioco fermo) la configurazione della griglia del gioco
  3. In particolare, il committente desidera che la vista del gioco (e la configurazione iniziale) sia realizzata mediante una pagina HTML, precisando che:
    • la pagina deve costituire un componente che si relaziona con l’applicazione secondo l'architettura riportata in IoJavalin integrato
    • il gestore del gioco sarà l’utente che ha aperto per primo (owner) una pagina HTML collegata al gioco. In altre parole, solo la pagina dell’owner avrà pulsanti di comando START/STOP/CLEAN/EXIT attivi
    • la pagina HTML deve essere aggiornata in modo automatico man mano il gioco procede
    • un utente non owner che si collega mentre il gioco è in corso, dovrebbe vedere lo stato attuale della griglia in modo corretto
    • il deployment del gioco deve avvenire mediante Docker

Requirement analysis

E’ opportuno riportare qui lo scenario architetturale menzionato nei requisiti:
Architettura Integrata
E’ necessario avvalersi di un server che deve svolgere due ruoli diversi. Il componente che utilizza il server viene indicato col nome iojavalin.
Nel caso di Javalin integrato, iojavalin è parte di un oggetto (OutInWs) che implementa IOutDev e riceve da questo un riferimento all’oggetto locale LifeController.
iojavalin funge da abilitatore delle comunicazioni da LifeController alla pagina e da attivatore di metodi di LifeController quando riceve (via WS) comandi dalla pagina.
Il lancio della applicazione su un computer:
  1. ermette di attivare un browser sullo stesso computer e digitare localhost:8080 (puntando il browser verso l’indirizzo di loopback)
  2. oppure attiva in modo automatico anche un browser locale così che la pagina HTML possa comparire in modo automatico sullo schermo
Il committente indica il primo comportamento, almeno per il primo prototipo del sistema. In seguito si potrà discutere sulla seconda possibilità.
Come da requisito, la pagina mostra in ogni caso i pulsanti, ma un click su questi provoca effetti solo nel caso in cui la pagina sia owner del gioco.
Per quanto riguarda i piani di test, al momento, sulla base dei requisiti, possiamo limitarci a dire quanto segue:

Problem analysis

A differenza della versione esterna, qui non realizziamo un sistema distribuito su rete, ma un sistema monolitico in cui:
  1. l'erogazione della pagina HTML (GUI) e la logica applicativa risiedono nello stesso nodo computazionale (stessa JVM)
  2. il framework Javalin non è un servizio separato, ma costituisce il cuore di un nuovo dispositivo di I/O interno all'applicazione
Le interazioni tra i componenti non avvengono tramite messaggi inviati su rete tra due processi diversi, ma tramite interazioni locali (chiamate a metodi) mediate dal componente iojavalin.

Test plans

Il piano di test prevede la verifica della corretta interazione tra i componenti tramite:

Project

  1. Si utilizza una rappresentazione granulare basata sul DOM gestita in wscontrol.js:
    • la griglia viene costruita dinamicamente tramite iomap.js. Ogni cella è un elemento div che può essere aggiornato singolarmente tramite messaggi cell(x,y)
    • il file wscontrol.js gestisce la logica di rete WebSocket puntando a localhost:8080/eval
  2. Il file OutInWs.java costituisce il cuore dell'integrazione:
    • implementa IOutDev e gestisce direttamente l'istanza del server Javalin
    • non necessita di un protocollo di registrazione esterno (come setcontroller via rete), poiché riceve il riferimento al LifeController locale durante la fase di inizializzazione nel main
  3. La configurazione del sistema avviene nel MainConwayGui.java:
    • il Main crea l'oggetto Life, l'oggetto OutInWs e il LifeController, iniettando il controller nel server tramite un metodo setController locale
    • garantisce che il server sia immediatamente pronto a inoltrare i comandi START/STOP della pagina Web alla logica sottostante
  4. La gestione della multi-utenza è incapsulata in OutInWs.java:
    • il server memorizza la prima connessione WebSocket come owner
    • ogni cambiamento di stato della griglia viene notificato a tutti i client connessi tramite una scansione della lista delle sessioni attive, garantendo la sincronizzazione della vista per ogni utente collegato.

Testing

Deployment

La procedura seguita è basata su Docker e prevede:
  1. Generazione dell'archivio distribuibile tramite il comando gradlew distTar.
  2. Creazione dell'immagine Docker personalizzata: docker build -t gui26html:1.0 ..
  3. Esecuzione del container con mappatura della porta 8080: docker run -p 8080:8080 gui26html:1.0.

Maintenance



By Desirée Pellegrini email: desiree.pellegrini@studio.unibo.it, emiglio GIT repo: https://github.com/desypellegrini/IngegneriaSistemiSoftware2026.git