package communication; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import main.Observer; import main.Utilisateur; import messages.*; public class CommunicationUDP extends Thread { // public enum Mode {PREMIERE_CONNEXION, CHANGEMENT_PSEUDO, DECONNEXION}; private UDPClient client; private int portServer; private ArrayList portOthers; private ArrayList users = new ArrayList(); private Observer observer; public CommunicationUDP(int portClient, int portServer, int[] portsOther) throws IOException { this.portServer = portServer; this.portOthers = this.getArrayListFromArray(portsOther); new UDPServer(portServer, this).start(); this.client = new UDPClient(portClient); } private ArrayList getArrayListFromArray(int ports[]) { ArrayList tmp = new ArrayList(); for (int port : ports) { tmp.add(port); } tmp.remove(Integer.valueOf(portServer)); return tmp; } public void setObserver (Observer obs) { this.observer=obs; } protected boolean containsUserFromID(String id) { for(Utilisateur u : users) { if(u.getId().equals(id) ) { return true; } } return false; } public boolean containsUserFromPseudo(String pseudo) { for(Utilisateur u : users) { if(u.getPseudo().equals(pseudo) ) { return true; } } return false; } public int getPortFromPseudo(String pseudo) { for(int i=0; i < users.size() ; i++) { if(users.get(i).getPseudo().equals(pseudo) ) { return users.get(i).getPort(); } } return -1; } private int getIndexFromID(String id) { for(int i=0; i < users.size() ; i++) { if(users.get(i).getId().equals(id) ) { return i; } } return -1; } private int getIndexFromIP(InetAddress ip) { for(int i=0; i < users.size() ; i++) { if(users.get(i).getIp().equals(ip)) { return i; } } return -1; } protected synchronized void addUser(String idClient, String pseudoClient, InetAddress ipClient, int port) throws IOException { users.add(new Utilisateur(idClient, pseudoClient, ipClient, port)); observer.update(this, users); } protected synchronized void changePseudoUser(String idClient, String pseudoClient, InetAddress ipClient, int port) { int index = getIndexFromID(idClient); users.get(index).setPseudo(pseudoClient); observer.update(this, users); } protected synchronized void removeUser(String idClient, String pseudoClient,InetAddress ipClient, int port) { int index = getIndexFromID(idClient); if( index != -1) { users.remove(index); } observer.update(this, users); } public void removeAll(){ int oSize = users.size(); for(int i=0; i