1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
public ServerLaboulaisMartin() throws IOException
{
serveurSock = new ServerSocket(port); //initialisation du serveur sur le port indiqué
listAuditeur = new ArrayList(); //initialisation de la liste des auditeurs
SaisieSpeaker speaker = new SaisieSpeaker(); //initialisation de la classe saisieSpeaker
speaker.start();
}
public void go() throws IOException
{
for(;;)
{
Socket socket = serveurSock.accept(); //récupération du socket de l'auditeur
System.out.println("connection de : "+socket);
synchronized(listAuditeur)
{
listAuditeur.add(new Auditeur(socket));//ajoute l'auditeur à la liste auditeur
}
}
}
private class SaisieSpeaker extends Thread
{
public void run()
{
ArrayList<Auditeur> cloneList = null; // création d'une deuxieme liste
byte[] buffer = new byte[1024];
OutputStream sockOut = null;
while (true)
{
synchronized(listAuditeur)
{
cloneList=(ArrayList<Auditeur>)listAuditeur.clone();
}
Iterator<Auditeur> ite= cloneList.iterator();
int y=0;
while (ite.hasNext()&&y<2)
{
Auditeur audi2 = ite.next();
try
{
BufferedReader sockIn = new BufferedReader(new InputStreamReader(audi2.getSocket().getInputStream()));
if(sockIn.ready() == true) //si un client envoie un message
{
String recu = sockIn.readLine(); //lecture du message
System.out.println(recu);
recu =""+ audi2.getSocket()+"envoie : "+recu+"\n";
Iterator<Auditeur> auditeur2= cloneList.iterator();
int i =0;
while (auditeur2.hasNext()&&i<2) //parcours de l'ensemble de la liste des auditeurs
{
//envoie du message à tous les clients
Auditeur audi = auditeur2.next();
try
{
buffer = recu.getBytes();
sockOut = audi.getSockOut();
sockOut.write(buffer, 0, recu.length());
sockOut.flush();
}
catch (IOException e)
{
synchronized(listAuditeur)
{
System.out.println("voila l'info "+listAuditeur.indexOf(audi));
System.out.println(audi.getSocket() + "vient de quitter la conversation");
if (listAuditeur.indexOf(audi)==0)
{
System.out.println("rentré dans le if");
audi.getSocket().close();
listAuditeur.remove(listAuditeur.get(1));
}
else if (listAuditeur.indexOf(audi)==1)
{
System.out.println("rentré dans le if 2");
audi.getSocket().close();
listAuditeur.remove(listAuditeur.get(0));
}
listAuditeur.remove(audi); // suppression du client déconnecté
System.out.println("voila l'info "+listAuditeur.indexOf(audi));
}
}
i++;
}
}
}
catch (IOException e)
{
}y++;
}
}
}
}
} |
Partager