Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MailApp - Backend Server (JavaFX)

Java JavaFX Maven TCP/Sockets

🎓 Contesto

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

🏗 Architettura & Stack Tecnologico

  • Rete e Protocollo (Socket TCP): Il server espone un ServerSocket nativo sulla porta 5555. La comunicazione avviene scambiando payload JSON (costruiti tramite la libreria Gson) mappati sui modelli ClientRequest e ClientResponse.
  • Gestione Concorrenza (Thread Pools): L'architettura prevede un SingleThreadExecutor deamonizzato dedicato esclusivamente all'accettazione dei socket in ingresso. Una volta accettata, la richiesta viene instradata a un FixedThreadPool (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 ReentrantReadWriteLock e tracciati all'interno di una ConcurrentHashMap. L'assegnazione univoca degli ID delle email è thread-safe grazie all'uso di AtomicLong.

    ⚠️ 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.

✨ Funzionalità Server

  • 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.

🚀 Installazione e Avvio

Prerequisiti di Sistema

  • Java Development Kit (JDK): Versione 22.
  • Build Tool: Maven.

Setup dell'Ambiente

  1. Clonare il repository in locale e posizionarsi nella cartella radice:
    git clone https://github.com/AleMal03/EmailAppProj-backend
    cd EmailAppProj-backend
  2. 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.

About

Progetto universitario (backend): applicazione client-server JavaFX che simula una casella postale

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages