87 行
2.9 KiB
Java
87 行
2.9 KiB
Java
package clavardage;
|
|
import java.net.InetSocketAddress;
|
|
import java.net.ServerSocket;
|
|
import java.net.Socket;
|
|
import java.net.SocketAddress;
|
|
import java.util.ArrayList;
|
|
|
|
import reseau.*;
|
|
|
|
public class gestionnaireClavardage implements Runnable{
|
|
public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999;
|
|
private ArrayList<sessionClavardage> sessions = new ArrayList<sessionClavardage>();
|
|
private TCPServer requestServer;
|
|
private long id;
|
|
private String host;
|
|
private Thread thread;
|
|
|
|
//Remplacer par un singleton
|
|
public gestionnaireClavardage(long id, int backlog, String host) {
|
|
this.id = id;
|
|
this.host = host;
|
|
this.requestServer = new TCPServer(this.host, backlog, PORT_REQUETE_NOUVELLE_SESSION + (int) id);
|
|
this.thread = new Thread(this);
|
|
this.thread.start();
|
|
}
|
|
|
|
public void createSession(long id) {
|
|
TCPClient client = new TCPClient("localhost", PORT_REQUETE_NOUVELLE_SESSION + (int) id);
|
|
sessionClavardage session = new sessionClavardage(this.id, id, client, null);
|
|
this.sessions.add(session);
|
|
client.send(Long.toString(this.id)+"\n");
|
|
System.out.print("Paramètres de session envoyée à " + id + "\n");
|
|
}
|
|
|
|
public ArrayList<sessionClavardage> getSessions() {
|
|
return this.sessions;
|
|
}
|
|
|
|
public void fermerSessions() {
|
|
for (sessionClavardage s : this.sessions) {
|
|
s.stop();
|
|
}
|
|
}
|
|
|
|
public void printSessions() {
|
|
for (sessionClavardage s : sessions) {
|
|
System.out.print(s);
|
|
}
|
|
}
|
|
|
|
public void run() {
|
|
|
|
while (true) {
|
|
Socket ssocket = this.requestServer.accept();
|
|
System.out.print("Données reçues sur le serveur de " + this.id + "\n");
|
|
TCPClient client = new TCPClient(ssocket);
|
|
long idClient = Long.parseLong(client.receive());
|
|
int i = 0;
|
|
while (i<this.sessions.size() && this.sessions.get(i).getIdDestination() != idClient) {
|
|
i+=1;
|
|
}
|
|
if (i >= this.sessions.size()) {
|
|
//Il n'existe pas encore de session entre les deux utilisateurs
|
|
System.out.print("Nouvelle session sur le serveur de " + this.id + "\n");
|
|
TCPClient clientEnvoi = new TCPClient(client.getAdresseCible(), PORT_REQUETE_NOUVELLE_SESSION + (int) idClient);
|
|
sessionClavardage session = new sessionClavardage(this.id, idClient, clientEnvoi, client);
|
|
this.sessions.add(session);
|
|
clientEnvoi.send(Long.toString(id)+"\n");
|
|
System.out.print("Fin de la configuration de " + this.id + "\n");
|
|
}
|
|
else if (this.sessions.get(i).getClientReception() == null) {
|
|
System.out.print("Suite de la configuration sur le serveur de " + this.id + "\n");
|
|
//il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée
|
|
this.sessions.get(i).setClientReception(client);
|
|
System.out.print("Fin de la configuration de " + this.id + "\n");
|
|
}
|
|
|
|
else {
|
|
//Il existe déjà une connexion établie entre les deux machines
|
|
System.out.print("Tentative de session multiple sur le serveur de " + this.id + "\n");
|
|
client.stop();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|