Copie de udpunicastclient
This commit is contained in:
parent
d3b512b620
commit
3ebb86ea89
5 changed files with 88 additions and 35 deletions
|
@ -7,41 +7,41 @@ import java.net.Socket;
|
|||
import java.net.SocketAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import nom.GestionnaireNom;
|
||||
import reseau.*;
|
||||
import ui.DiscussionUI;
|
||||
|
||||
public class gestionnaireClavardage implements Runnable{
|
||||
public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999;
|
||||
public static final int BACKLOG = 10;
|
||||
private static gestionnaireClavardage uniqueInstance = null;
|
||||
private ArrayList<sessionClavardage> sessions = new ArrayList<sessionClavardage>();
|
||||
private TCPServer requestServer;
|
||||
private long id;
|
||||
private String host;
|
||||
private Thread thread;
|
||||
|
||||
public static gestionnaireClavardage instance(long id, int backlog, String host) {
|
||||
public static gestionnaireClavardage instance() {
|
||||
if (uniqueInstance == null) {
|
||||
uniqueInstance = new gestionnaireClavardage(id, backlog, host);
|
||||
uniqueInstance = new gestionnaireClavardage(BACKLOG);
|
||||
}
|
||||
return gestionnaireClavardage.uniqueInstance;
|
||||
}
|
||||
|
||||
//Ajouter la supppression des sessions de la liste après déconnexion
|
||||
//Remplacer par un singleton
|
||||
private 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);
|
||||
private gestionnaireClavardage(int backlog) {
|
||||
GestionnaireNom gn = GestionnaireNom.instance();
|
||||
this.requestServer = new TCPServer(gn.getIp(), backlog, PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.getId()));
|
||||
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);
|
||||
public void createSession(String name) {
|
||||
GestionnaireNom gn = GestionnaireNom.instance();
|
||||
TCPClient client = new TCPClient(gn.ipFromNom(name), PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.idFromNom(name))) ;
|
||||
sessionClavardage session = new sessionClavardage(gn.getId(), gn.idFromNom(name), client, null);
|
||||
this.sessions.add(session);
|
||||
client.send(Long.toString(this.id)+"\n");
|
||||
System.out.print("Paramètres de session envoyée à " + id + "\n");
|
||||
client.send(gn.getId()+"\n");
|
||||
System.out.print("Paramètres de session envoyée à " + gn.idFromNom(name) + "\n");
|
||||
|
||||
//Lancement de la fenêtre de session
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
|
@ -74,14 +74,15 @@ public class gestionnaireClavardage implements Runnable{
|
|||
|
||||
public void run() {
|
||||
|
||||
GestionnaireNom gn = GestionnaireNom.instance();
|
||||
while (true) {
|
||||
Socket ssocket = this.requestServer.accept();
|
||||
System.out.print("Données reçues sur le serveur de " + this.id + "\n");
|
||||
System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n");
|
||||
TCPServerThread client = new TCPServerThread(ssocket,false);
|
||||
long idClient = -1;
|
||||
String idClient = null;
|
||||
|
||||
try {
|
||||
idClient = Long.parseLong(client.receive());
|
||||
idClient = client.receive();
|
||||
}
|
||||
catch (IOException e) {
|
||||
client.stop();
|
||||
|
@ -90,18 +91,18 @@ public class gestionnaireClavardage implements Runnable{
|
|||
Thread t = new Thread(client);
|
||||
t.start();
|
||||
int i = 0;
|
||||
while (idClient>0 && i<this.sessions.size() && this.sessions.get(i).getIdDestination() != idClient) {
|
||||
while (idClient != null && i<this.sessions.size() && this.sessions.get(i).getIdDestination() != idClient) {
|
||||
i+=1;
|
||||
}
|
||||
if (idClient == -1);
|
||||
if (idClient == null);
|
||||
else 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);
|
||||
System.out.print("Nouvelle session sur le serveur de " + gn.getId() + "\n");
|
||||
TCPClient clientEnvoi = new TCPClient(client.getAdresseCible(), PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(idClient));
|
||||
sessionClavardage session = new sessionClavardage(gn.getId(), idClient, clientEnvoi, client);
|
||||
this.sessions.add(session);
|
||||
clientEnvoi.send(Long.toString(id)+"\n");
|
||||
System.out.print("Fin de la configuration de " + this.id + "\n");
|
||||
clientEnvoi.send(gn.getId()+"\n");
|
||||
System.out.print("Fin de la configuration de " + gn.getId() + "\n");
|
||||
|
||||
//Lancement de la fenêtre de session
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
|
@ -116,15 +117,15 @@ public class gestionnaireClavardage implements Runnable{
|
|||
});
|
||||
}
|
||||
else if (this.sessions.get(i).getClientReception() == null) {
|
||||
System.out.print("Suite de la configuration sur le serveur de " + this.id + "\n");
|
||||
System.out.print("Suite de la configuration sur le serveur de " + gn.getId() + "\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");
|
||||
System.out.print("Fin de la configuration de " + gn.getId() + "\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");
|
||||
System.out.print("Tentative de session multiple sur le serveur de " + gn.getId() + "\n");
|
||||
client.stop();
|
||||
}
|
||||
|
||||
|
|
|
@ -2,19 +2,19 @@ package clavardage;
|
|||
import reseau.*;
|
||||
|
||||
public class sessionClavardage {
|
||||
private long idSource = 0;
|
||||
private long idDestination = 0;
|
||||
private String idSource = null;
|
||||
private String idDestination = null;
|
||||
private TCPClient clientEmission = null;
|
||||
private TCPClient clientReception = null;
|
||||
|
||||
public sessionClavardage(long idSource, long idDestination, TCPClient clientEmission, TCPClient clientReception) {
|
||||
public sessionClavardage(String idSource, String idDestination, TCPClient clientEmission, TCPClient clientReception) {
|
||||
this.idSource = idSource;
|
||||
this.idDestination = idDestination;
|
||||
this.clientEmission = clientEmission;
|
||||
this.clientReception = clientReception;
|
||||
}
|
||||
|
||||
public sessionClavardage(long idSource, long idDestination, TCPClient clientReception) {
|
||||
public sessionClavardage(String idSource, String idDestination, TCPClient clientReception) {
|
||||
this.idSource = idSource;
|
||||
this.idDestination = idDestination;
|
||||
this.clientReception = clientReception;
|
||||
|
@ -35,11 +35,11 @@ public class sessionClavardage {
|
|||
+ ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + "\n";
|
||||
}
|
||||
|
||||
public long getIdSource() {
|
||||
public String getIdSource() {
|
||||
return this.idSource;
|
||||
}
|
||||
|
||||
public long getIdDestination() {
|
||||
public String getIdDestination() {
|
||||
return this.idDestination;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package clavardage;
|
|||
import java.awt.EventQueue;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import nom.GestionnaireNom;
|
||||
import ui.DiscussionUI;
|
||||
|
||||
public class test {
|
||||
|
@ -46,9 +47,12 @@ public class test {
|
|||
}
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
|
||||
gestionnaireClavardage gc = gestionnaireClavardage.instance(11, 5, "localhost");
|
||||
gc.createSession(10);
|
||||
GestionnaireNom gn = GestionnaireNom.instance();
|
||||
gn.setId("11");
|
||||
gn.setIp("localhost");
|
||||
gn.setNom("User2");
|
||||
gestionnaireClavardage gc = gestionnaireClavardage.instance();
|
||||
gc.createSession("User1");
|
||||
|
||||
|
||||
}
|
||||
|
|
47
Projet_POO/src/liste/UdpUnicastClient2.java
Normal file
47
Projet_POO/src/liste/UdpUnicastClient2.java
Normal file
|
@ -0,0 +1,47 @@
|
|||
package liste;
|
||||
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.net.SocketException;
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
public class UdpUnicastClient2 implements Runnable{
|
||||
|
||||
private final int serverPort;
|
||||
private final String serverIP;
|
||||
|
||||
public UdpUnicastClient2(int serverPort, String serverIP) {
|
||||
this.serverPort = serverPort;
|
||||
this.serverIP = serverIP;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void run() {
|
||||
try(DatagramSocket serverSocket = new DatagramSocket()){
|
||||
//for (int i = 0; i<3; i++) {
|
||||
String message = "add$$$" + 77 + "$$$Roger$$$LocalHost"; //ordre$$$id$$$nom$$$ip
|
||||
DatagramPacket datagramPacket = new DatagramPacket(
|
||||
message.getBytes(),
|
||||
message.length(),
|
||||
InetAddress.getByName(serverIP),
|
||||
serverPort
|
||||
);
|
||||
serverSocket.send(datagramPacket);
|
||||
//}
|
||||
|
||||
} catch (SocketException e) {
|
||||
e.printStackTrace();
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -31,6 +31,7 @@ public class TCPClient {
|
|||
System.out.print("Could not find host\n");
|
||||
}
|
||||
catch (IOException e) {
|
||||
System.out.print("port= "+port+" host= "+host+"\n");
|
||||
System.out.print("Could not create socket\n");
|
||||
}
|
||||
this.adresseCible = socket.getInetAddress();
|
||||
|
|
Loading…
Reference in a new issue