package communication; import java.io.IOException; import java.io.PrintWriter; 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 { 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; } public Observer getObserver () { return this.observer; } 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; } public Utilisateur getUserFromID(String id) { for(Utilisateur u : users) { if(u.getId().equals(id) ) { return u; } } return null; } private int getIndexFromIP(InetAddress ip) { for(int i=0; i < users.size() ; i++) { if(users.get(i).getIp().equals(ip)) { return i; } } return -1; } public void printActiveUsersUDP(PrintWriter out) { for (Utilisateur uIn : users) { out.println(" " + uIn.getPseudo() + ","); } } protected synchronized void addUser(String idClient, String pseudoClient, InetAddress ipClient, int port) throws IOException { users.add(new Utilisateur(idClient, pseudoClient, ipClient, port)); try { Message message = new MessageSysteme(Message.TypeMessage.INFO_PSEUDO, idClient, pseudoClient, port); observer.update(this, message); } catch (MauvaisTypeMessageException e) { e.printStackTrace(); } } protected synchronized void changePseudoUser(String idClient, String pseudoClient, InetAddress ipClient, int port) { int index = getIndexFromID(idClient); users.get(index).setPseudo(pseudoClient); try { Message message = new MessageSysteme(Message.TypeMessage.INFO_PSEUDO, idClient, pseudoClient, port); observer.update(this, message); } catch (MauvaisTypeMessageException e) { e.printStackTrace(); } } protected synchronized void removeUser(String idClient, String pseudoClient,InetAddress ipClient, int port) { int index = getIndexFromID(idClient); if( index != -1) { users.remove(index); } try { Message message = new MessageSysteme(Message.TypeMessage.JE_SUIS_DECONNECTE, idClient); observer.update(this, message); } catch (MauvaisTypeMessageException e) { e.printStackTrace(); } } public void removeAll(){ int oSize = users.size(); for(int i=0; i