Made by @matbagnoletti
Docenti: prof.ssa @mciuchetti e prof.ssa Fioroni
Corso TPSIT a.s. 2023/2024, ITTS A. Volta (PG)
ChatterBox è un'applicazione di chat che sfrutta il protocollo UDP in modalità multicast per la comunicazione tra più utenti. Il programma permette, grazie a un'apposita API RESTful, la creazione di un gruppo chat e il loro accesso tramite credenziali di autenticazione. L'interfaccia grafica utilizzata è stata realizzata con JavaFX, mentre la gestione della comunicazione è affidata a Java e Kotlin.
È possibile visualizzare le versioni già presenti sul proprio dispositivo mediante i seguenti comandi:
java -version
mvn -v
Per poter utilizzare l'applicazione ChatterBox esegui le seguenti operazioni:
-
Effettua il clone della repository con il comando:
git clone https://www.github.com/matbagnoletti/ChatterBox.git
In alternativa, effettua il download del file compresso del progetto ed estrailo in una cartella locale del tuo computer.
-
Apri il progetto con un generico IDE come IntelliJ IDEA. Attraverso l'interfaccia
Maven
del progetto, nella sezionePlugins
, esegui:clean:clean
per ripulire il progetto;kotlin:compile
per compilare il codice kotlin;compiler:compile
per compilare il progetto;javafx:run
per eseguire il progetto.
In alternativa, da IDE IntelliJ IDEA, è possibile eseguire la configurazione
ChatterBox
storicizzata nel progetto.
Il progetto si compone da 3 packages principali:
- Package
chatterbox
: contiene le classi di gestione dell'interfaccia grafica JavaFX e la classe principaleChatterBox
. - Package
multicastudpsocketchat
: contiene le classi di gestione della chat, il cui progetto di riferimento è disponibile qui. - Package
security
: contiene la classe di gestione della sicurezza della comunicazione tramite crittografia End-to-End (AES).
-
All'avvio dell'applicazione, una schermata di setup permetterà all'utente la configurazione del proprio username e le impostazioni di connessione al gruppo chat.
Il nome utente deve essere composto da almeno 3 caratteri. Il nome del gruppo è univoco ed ha una lunghezza minima di 6 caratteri, così come la password. La gestione e amministrazione dei gruppi e realizzata mediante una API RESTful apposita che permette la creazione, la modifica e l'eliminazione di gruppi chat. La password del gruppo chat è necessaria per garantire la sicurezza e la privacy dei messaggi scambiati tra gli utenti. Viene memorizzata in forma crittografata e non è possibile recuperarla una volta impostata.
Il TTL (Time To Live) è un valore che determina il numero di router attraverso i quali il datagramma può passare. Un valore di 1 indica che il datagramma non può lasciare la sottorete locale, mentre un valore di 255 indica che il datagramma può attraversare un numero illimitato di router. Il valore di default è 128. Per quanto riguarda il loopback dei datagrammi, invece, è possibile disattivarlo per alleggerire il traffico di rete nel solo caso in cui multiple istanze dell'applicazione NON siano eseguite sullo stesso dispositivo.
-
Una volta configurato il gruppo, l'utente verrà reindirizzato alla schermata principale dell'applicazione. Qui sarà possibile visualizzare i messaggi inviati dagli altri utenti del gruppo chat e inviare messaggi propri.
Il pulsante "Termina" permette di chiudere la connessione al gruppo chat. Una volta terminata la chat, l'utente potrà riconnettersi al gruppo chat mediante il pulsante "Riconnetti". Ogni messaggio inviato o ricevuto è accompagnato dal nome utente, dall'orario di invio e da un'icona che indica se il messaggio è stato ricevuto correttamente da tutti gli utenti online in quell'instante. A partire versione v2.1.0 ogni conversazione è protetta da crittografia End-to-End (AES). La barra di navigazione in alto permette di visualizzare i dettagli del gruppo chat e di modificare le impostazioni di connessione.
In questo esempio gli indirizzi IP e i numeri di porta sono stati nascondi per motivi di privacy.
A partire dalla versione v2.1.1 è possibile modificare il tema dell'applicazione. Inoltre, tutti i cambiamenti al layout verranno storicizzati e ripristinati all'avvio successivo.
Questo progetto (e tutte le sue versioni) sono rilasciate sotto la MB General Copyleft License.