- Java
- Galantini Corrado
- Sanseverino Lorenzo
- Panichi Leonardo
- Donzelli Lorenzo
- Aprea Mario
I client si connettono ad un server mediante socket. Verra' quindi richiesto UserName identificativo.
- /UserName(/s): messaggio -> invia messaggio a tutti gli utenti ≧ω≦ specificati. Se uno o piu utenti non vengono trovati viene segnato UserName not fount, ed il messaggio viene inviato solo agli utenti trovati;
- /listaUtenti -> elenca tutti gli utenti online.
- /All: messaggio ->invia messaggio a tutti gli utenti online
- /Speed:-> puoi modificare la velocita di scrittura sul terminale in lenta, media o veloce.
- /EXIT -> chiude la connessione con il server
Il primo dedito a ricevere i comandi dello user. Stampa eventuali errori di sintassi del comando e in caso di utenti non trovati;
Il secondo si occupa solamente della stampa dei messaggi ricevuti.
La classe implementata ha varie funzioni predefinite quali:
la stampa del logo, il calcolo dei numeri primi in maniera random, la stampa bufferizzata ed altre <3.
Attende richieste di connessone da parte dei client.
Quando avviene la connessione con un client avvia un thread della classe ServerThread che gestira' i comandi degli utenti.
Classe adibita all'interfacciamento utente.
Gestisce la prima fase log in, la ricezione messaggi utente, la criptazione dei messaggi, l'invio dei messaggi criptati al ServerThread e l'invio della chiave pubblica al server.
Inoltre avvia e comunica con ClientReader.
Genera p,q,e casualmente tenendo conto del ultimo numero generato lastPrime e partendo da quello per calcolare i seguenti.
Una volta scelti i numeri calcola la chiave pubblica e privata.
Contiene tutte le informazioni che vanno a caratterizzare un messaggio:
- message -> testo criptato da inviare.
- time -> ora e minuto in cui e' stato inviato il messaggio.
- sender-> utente che ha inviato il messaggio.
La funzione getMessage ritorna il messaggio nel formato "[" + time + "] " + Sender + "@:" + message.
Classe che gestisce la mappa di ArrayList di Message. I metodi predisposti sono:
- addUser-> prende come parametro userName e controlla se il nome e' gia presente, se non lo e' verifica se rispetta il formato richiesto, nel caso aggiunge l'utente.
- remuveUser-> prende come parametro un userName e lo rimuove dalla mappa. Metodo usato alla disconnessione dei client.
- addMsg-> inserisce un messaggio(Message) nel ArrayList del utente specificato. returna not fount nel caso di utente non trovato.
- readBox-> se ci sono messaggi per l utente allora legge la prima cella dell ArrayList occupata e la rimuove.
Avviato da Server si occupa dell'interfacciamento tra client e MsgBox.
Memorizza, leggendoli da client, le chiavi publiche e associandoli ai rispettivi userName.
Smista i possibili comandi inseriti nel server e si occupa principalmente di inviare le chiavi richieste ai client e inserire i messaggi criptati
nella msgBox.
Avvia ServerThreadReader.
legge i messaggi in msgBox e li scrive al ClientReader.
Classe che si occupa di smistare tutti i messaggi inviati da server e o serverThread secondo protocollo. Si occupa inoltre di decriptare i messaggi ricevuti e di avviare il Terminal ed il relativo nuovo terminale.
Classe che gestisce il nuovo cmd.
La porta socket viene condivisa tramite file contenente un numero incrementale.
Gestisce tutti i messaggi che sono indirizzati al Client dal ServerThread. <( ̄3 ̄)y▂ξ
out.println("/@/Key/@/" + s);
Invia al ClientReader demarcandola con il messaggio di protocollo /@/Key/@/.
out.println("/@/Key/@/ STOP");
Dice al Client di uscire dalla sezione di attesa ricezione delle chiavi.
out.println(userToSend + "/@/Key/@/<-not found");
Specifica al Client quali utenti non sono stati trovati
Pattern.matches("^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$", userName))
Controlla se userName rispetta lo standard deciso: solo trattini alti o bassi interni al nome.
- Java version 17
- In caso di utente inesistente notificare il client dell'errore.
- Evitare la presenza di più client con lo stesso nome collegati contemporaneamente.
- Gestita fase di Exit dei client con annessa cancellazione userName dalla mappa.
- FORSE Programma funzionante su MacOs ( ̄▼ ̄)
Copyright (c) 22 Giugno anno 0, 2021, SafJNest and/or its affiliates. All rights reserved. SAFJNEST PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- [email protected]
- Git XOShu4
- Discord Mario Giordano#3698
- [email protected]
- Git NeutronSun
- Discord Sun#7606.
- [email protected]
- Git Leon412
- Discord Leon_#7949
- [email protected]
- Git Donz03
- Discord Donz_Lorenzo#2286