Mise en place de la création des sessions (en local)
This commit is contained in:
parent
5d762d1632
commit
735ae6cfb3
4 changed files with 118 additions and 24 deletions
|
@ -1,38 +1,83 @@
|
||||||
package clavardage;
|
package clavardage;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.SocketAddress;
|
import java.net.SocketAddress;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import reseau.*;
|
import reseau.*;
|
||||||
|
|
||||||
public class gestionnaireClavardage implements Runnable{
|
public class gestionnaireClavardage implements Runnable{
|
||||||
public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999;
|
public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999;
|
||||||
private sessionClavardage[] sessions;
|
private ArrayList<sessionClavardage> sessions = new ArrayList<sessionClavardage>();
|
||||||
private TCPServer requestServer;
|
private TCPServer requestServer;
|
||||||
private long id;
|
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() {
|
public void run() {
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
Socket ssocket = this.requestServer.accept();
|
Socket ssocket = this.requestServer.accept();
|
||||||
|
System.out.print("Données reçues sur le serveur de " + this.id + "\n");
|
||||||
TCPClient client = new TCPClient(ssocket);
|
TCPClient client = new TCPClient(ssocket);
|
||||||
long idClient = Long.parseLong(client.receive());
|
long idClient = Long.parseLong(client.receive());
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i<this.sessions.length && this.sessions[i].getIdDestination() != idClient) i+=1;
|
while (i<this.sessions.size() && this.sessions.get(i).getIdDestination() != idClient) {
|
||||||
|
i+=1;
|
||||||
if (i >= this.sessions.length) {
|
|
||||||
//Il n'existe pas encore de session entre les deux utilisateurs
|
|
||||||
TCPClient clientEnvoi = new TCPClient(client.getHost(), PORT_REQUETE_NOUVELLE_SESSION);
|
|
||||||
sessionClavardage session = new sessionClavardage(this.id, idClient, null, client);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (this.sessions[i].getClientReception() == null) {
|
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
|
//il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée
|
||||||
this.sessions[i].setClientReception(client);
|
this.sessions.get(i).setClientReception(client);
|
||||||
|
System.out.print("Fin de la configuration de " + this.id + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
//Il existe déjà une connexion établie entre les deux machines
|
//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();
|
client.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package clavardage;
|
package clavardage;
|
||||||
import reseau.*;
|
import reseau.*;
|
||||||
|
|
||||||
public class sessionClavardage implements Runnable{
|
public class sessionClavardage {
|
||||||
private long idSource = 0;
|
private long idSource = 0;
|
||||||
private long idDestination = 0;
|
private long idDestination = 0;
|
||||||
private TCPClient clientEmission = null;
|
private TCPClient clientEmission = null;
|
||||||
|
@ -39,7 +39,17 @@ public class sessionClavardage implements Runnable{
|
||||||
this.clientReception = client;
|
this.clientReception = client;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void stop() {
|
||||||
|
if (this.clientEmission != null) this.clientEmission.stop();
|
||||||
|
if (this.clientReception != null) this.clientReception.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "Session entre " + this.idSource + " à l'adresse " + this.clientEmission.getAdresseSource()
|
||||||
|
+ ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//public void run() {
|
||||||
|
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
28
Projet_POO/src/clavardage/test.java
Normal file
28
Projet_POO/src/clavardage/test.java
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
package clavardage;
|
||||||
|
|
||||||
|
public class test {
|
||||||
|
|
||||||
|
public test() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
gestionnaireClavardage gc1 = new gestionnaireClavardage(14, 5, "localhost");
|
||||||
|
gestionnaireClavardage gc2 = new gestionnaireClavardage(24, 5, "localhost");
|
||||||
|
gc2.createSession(14);
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.out.print("Nb de sessions de gc1: " + gc1.getSessions().size() + "\n");
|
||||||
|
gc1.printSessions();
|
||||||
|
System.out.print("Nb de sessions de gc2: " + gc2.getSessions().size() + "\n");
|
||||||
|
gc2.printSessions();
|
||||||
|
gc1.fermerSessions();
|
||||||
|
gc2.fermerSessions();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,51 +3,54 @@ import java.net.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
public class TCPClient {
|
public class TCPClient {
|
||||||
String host = null;
|
InetAddress adresseCible = null;
|
||||||
|
InetAddress adresseSource = null;
|
||||||
int port = 0;
|
int port = 0;
|
||||||
Socket socket = null;
|
Socket socket = null;
|
||||||
BufferedReader input = null;
|
BufferedReader input = null;
|
||||||
PrintWriter output = null;
|
PrintWriter output = null;
|
||||||
|
|
||||||
public TCPClient() {
|
public TCPClient() {
|
||||||
this.host = null;
|
|
||||||
this.port = 0;
|
this.port = 0;
|
||||||
this.socket = null;
|
this.socket = null;
|
||||||
this.input = null;
|
this.input = null;
|
||||||
this.output = null;
|
this.output = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TCPClient(String host, int port) {
|
public TCPClient(String host, int port) {
|
||||||
this.host = host;
|
|
||||||
this.port = port;
|
this.port = port;
|
||||||
try {
|
try {
|
||||||
this.socket = new Socket(host, port);
|
this.socket = new Socket(host, port);
|
||||||
}
|
}
|
||||||
catch (UnknownHostException e) {
|
catch (UnknownHostException e) {
|
||||||
System.out.print("Could not find host");
|
System.out.print("Could not find host\n");
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
System.out.print("Could not create socket");
|
System.out.print("Could not create socket\n");
|
||||||
}
|
}
|
||||||
|
this.adresseCible = socket.getInetAddress();
|
||||||
|
this.adresseSource = socket.getLocalAddress();
|
||||||
try {
|
try {
|
||||||
this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
System.out.print("Error while reading input stream");
|
System.out.print("Error while reading input stream\n");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.output = new PrintWriter(socket.getOutputStream(),true);
|
this.output = new PrintWriter(socket.getOutputStream(),true);
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
System.out.print("Error while reading output stream");
|
System.out.print("Error while reading output stream\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TCPClient(Socket socket) {
|
public TCPClient(Socket socket) {
|
||||||
this.host = socket.getInetAddress().getHostName();
|
|
||||||
this.port = socket.getPort();
|
this.port = socket.getPort();
|
||||||
this.socket = socket;
|
this.socket = socket;
|
||||||
|
this.adresseCible = socket.getInetAddress();
|
||||||
|
this.adresseSource = socket.getLocalAddress();
|
||||||
try {
|
try {
|
||||||
this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||||
}
|
}
|
||||||
|
@ -94,15 +97,23 @@ public class TCPClient {
|
||||||
this.stop();
|
this.stop();
|
||||||
this.port = port;
|
this.port = port;
|
||||||
try {
|
try {
|
||||||
this.socket = new Socket(host, port);
|
this.socket = new Socket(this.adresseCible.getHostName(), port);
|
||||||
}
|
}
|
||||||
catch (UnknownHostException e) {
|
catch (UnknownHostException e) {
|
||||||
System.out.print("Could not find host");
|
System.out.print("Could not find host");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getHost() {
|
public String getHostSource() {
|
||||||
return this.host;
|
return this.adresseSource.getHostName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAdresseSource() {
|
||||||
|
return this.adresseSource.getHostAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAdresseCible() {
|
||||||
|
return this.adresseCible.getHostAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
Loading…
Reference in a new issue