import java.awt.List; import java.io.IOException; import java.net.*; import java.time.Duration; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.Scanner; // Import the Scanner class public class User{ protected InetAddress addIP; protected String pseudo; protected int nport; protected boolean actif; protected User[] remoteUserList; public User(int nport) throws IOException{ try { this.addIP = InetAddress.getLocalHost(); } catch(UnknownHostException e) { System.out.println("Could not find local address!"); } this.nport = nport; this.setPseudo(); this.actif = true; } public User(int nport,String pseudo) { try { this.addIP = InetAddress.getLocalHost(); } catch(UnknownHostException e) { System.out.println("Could not find local address!"); } this.pseudo = pseudo; this.nport = nport; this.actif = true; UserListeningThread th = new UserListeningThread("UDP Listening thread",this); th.start(); } public InetAddress getAddIP() { return addIP; } public void setAddIP(InetAddress addIP) { this.addIP = addIP; } public String getPseudo() { return pseudo; } public void setPseudo() throws IOException { Scanner myObj = new Scanner(System.in); // Create a Scanner object System.out.println("Enter pseudo :"); String tmpPseudo = myObj.nextLine(); // Read user input while(!(this.validatePseudo(tmpPseudo))) { System.out.println("Already taken, choose another one :"); tmpPseudo = myObj.nextLine(); // Read user input } this.pseudo = tmpPseudo; } public Boolean validatePseudo(String tmpPseudo) throws IOException { // Call broadcast InetAddress broadcastIP = InetAddress.getLocalHost(); // change to broadcast DatagramSocket dgramSocket = new DatagramSocket(5001,this.addIP); byte[] buffer = new byte[256]; DatagramPacket outPacket= new DatagramPacket(tmpPseudo.getBytes(), tmpPseudo.length(),broadcastIP, 5002); dgramSocket.send(outPacket); Boolean valid = true; Date oldDate = new Date(); Date newDate = new Date(); while( (newDate.getTime()-oldDate.getTime()) < 5000 && valid) { System.out.println("Wait for pseudo validation ..."); DatagramPacket inPacket= new DatagramPacket(buffer, buffer.length); dgramSocket.receive(inPacket); buffer = inPacket.getData(); String response = new String(buffer); System.out.println(response); String[] lstresponse = response.split(":"); ArrayList stringList = new ArrayList(Arrays.asList(lstresponse)); valid=stringList.contains(tmpPseudo); newDate = new Date(); } System.out.println("Fin"); dgramSocket.close(); return valid; } public int getNport() { return nport; } public void setNport(int nport) { this.nport = nport; } public boolean isActif() { return actif; } public void setActif(boolean actif) { this.actif = actif; } public static void main(String[] args) throws IOException { User activeUsr1 = new User(5002,"Mike"); User usr1 = new User(3); usr1.setPseudo(); } }