Progetto sviluppato per il corso di Programmazione III presso il Corso di Laurea in Informatica dell'Università degli Studi di Torino. Questo repository contiene il server dell'ecosistema MailApp: un applicativo multi-thread dotato di interfaccia grafica per il log degli eventi, progettato per gestire in modo concorrente e sicuro il traffico di posta elettronica di molteplici client.
⚠️ Architettura Client-Server: Questo repository contiene esclusivamente l'applicativo Server. Il Client JavaFX associato a questo progetto è disponibile qui: EmailApp Frontend
- Rete e Protocollo (Socket TCP): Il server espone un
ServerSocketnativo sulla porta5555. La comunicazione avviene scambiando payload JSON (costruiti tramite la libreria Gson) mappati sui modelliClientRequesteClientResponse. - Gestione Concorrenza (Thread Pools): L'architettura prevede un
SingleThreadExecutordeamonizzato dedicato esclusivamente all'accettazione dei socket in ingresso. Una volta accettata, la richiesta viene instradata a unFixedThreadPool(dimensione fissa per evitare memory leaks) per l'elaborazione concorrente (ThreadedRequestHandler). - Sincronizzazione e Lock Manuali: La gestione dell'I/O su file JSON per le diverse caselle postali previene attivamente data corruption e race conditions. I file sono protetti tramite
ReentrantReadWriteLocke tracciati all'interno di unaConcurrentHashMap. L'assegnazione univoca degli ID delle email è thread-safe grazie all'uso diAtomicLong.⚠️ Nota: La gestione della persistenza tramite file (invece di un DBMS relazionale) è stata espressamente richiesta dalle specifiche di progetto per valutare le competenze di gestione manuale dei lock concorrenti. - Pannello di Controllo UI: L'interfaccia server, sviluppata con JavaFX e pattern MVC, permette il controllo del ciclo di vita del server (avvio/spegnimento dei thread e rilascio delle risorse) separando la logica di business (
DataModel) dal controller visivo tramite Data Binding.
- Routing e Smistamento: Risoluzione delle richieste client tramite parsing dell'enumeratore custom
ReqType. - Persistenza Dati: Salvataggio, recupero e cancellazione sicura delle email smistate in file locali (strutturati nella cartella
data/). - Live Logging System: Console visiva a colori per monitorare le operazioni del server in tempo reale. Include uno svuotamento automatico (max 1000 eventi) per evitare rallentamenti dell'applicazione grafica.
- Gestione Risorse: Chiusura pulita (
shutdownNow()) dei pool di thread ed eliminazione dei riferimenti in memoria alle inbox durante lo stop del server, evitando leak delle porte TCP e liberando Heap Space.
Prerequisiti di Sistema
- Java Development Kit (JDK): Versione 22.
- Build Tool: Maven.
Setup dell'Ambiente
- Clonare il repository in locale e posizionarsi nella cartella radice:
git clone https://github.com/AleMal03/EmailAppProj-backend cd EmailAppProj-backend - Avviare l'applicazione tramite il plugin JavaFX Maven preconfigurato:
mvn clean javafx:run
Una volta avviata l'interfaccia, utilizzare lo switch grafico per accendere il server e porlo in ascolto sulla porta TCP 5555.