Version OK serveur prend en compte crash et présence

This commit is contained in:
Faure Paul 2021-02-11 18:45:52 +01:00
parent 67437407a8
commit 6470451686
38 changed files with 106 additions and 405 deletions

View file

@ -23,6 +23,7 @@ dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
//implementation files('build/libs/Clavardage-1.0.jar')
}
test {

Binary file not shown.

Binary file not shown.

View file

@ -1,30 +1,20 @@
com/example/ServeurClavardage/Messages/MessageInit.java
com.example.ServeurClavardage.Messages.MessageInit
com/example/ServeurClavardage/Messages/MessageDisplayFile.java
com.example.ServeurClavardage.Messages.MessageDisplayFile
com/example/ServeurClavardage/Messages/MessageDisplay.java
com.example.ServeurClavardage.Messages.MessageDisplay
com/example/ServeurClavardage/Messages/MessagePseudo.java
com.example.ServeurClavardage.Messages.MessagePseudo
com/example/ServeurClavardage/Messages/MessageChatFile.java
com.example.ServeurClavardage.Messages.MessageChatFile
com/example/ServeurClavardage/Utilisateurs.java
com.example.ServeurClavardage.Utilisateurs
com/example/ServeurClavardage/Messages/Message.java
com.example.ServeurClavardage.Messages.Message
com/example/ServeurClavardage/GetOutdoorUsers.java
com.example.ServeurClavardage.GetOutdoorUsers
com/example/ServeurClavardage/SharedInformation.java
com.example.ServeurClavardage.SharedInformation
com/example/ServeurClavardage/Messages/MessageChatTxt.java
com.example.ServeurClavardage.Messages.MessageChatTxt
app/insa/clav/Messages/MessagePseudo.java
app.insa.clav.Messages.MessagePseudo
app/insa/clav/Messages/Message.java
app.insa.clav.Messages.Message
com/example/ServeurClavardage/GetAllUsers.java
com.example.ServeurClavardage.GetAllUsers
com/example/ServeurClavardage/SubmitConnectionOutdoor.java
com.example.ServeurClavardage.SubmitConnectionOutdoor
com/example/ServeurClavardage/SubmitConnectionIndoor.java
com.example.ServeurClavardage.SubmitConnectionIndoor
com/example/ServeurClavardage/GetOutdoorUsers.java
com.example.ServeurClavardage.GetOutdoorUsers
com/example/ServeurClavardage/SubmitDeconnectionIndoor.java
com.example.ServeurClavardage.SubmitDeconnectionIndoor
com/example/ServeurClavardage/SubmitConnectionOutdoor.java
com.example.ServeurClavardage.SubmitConnectionOutdoor
com/example/ServeurClavardage/SubmitDeconnectionOutdoor.java
com.example.ServeurClavardage.SubmitDeconnectionOutdoor
com/example/ServeurClavardage/SharedInformation.java
com.example.ServeurClavardage.SharedInformation
com/example/ServeurClavardage/SubmitConnectionIndoor.java
com.example.ServeurClavardage.SubmitConnectionIndoor
app/insa/clav/Core/Utilisateurs.java
app.insa.clav.Core.Utilisateurs

View file

@ -1,7 +1,6 @@
package com.example.ServeurClavardage;
package app.insa.clav.Core;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.*;
import java.util.Date;
@ -11,26 +10,20 @@ public class Utilisateurs implements Comparable{
private String pseudo;
private InetAddress inetAddress;
private int id;
private int port;
private String login;
private boolean isOutdoor;
private Date lastUpdate;
private int tcpListeningPort;
public Date getLatestUpdate() {
return latestUpdate;
}
public void setLatestUpdate(Date latestUpdate) {
this.latestUpdate = latestUpdate;
}
private Date latestUpdate;
public Utilisateurs(String pseudo, InetAddress inetAddress, int id, int port, boolean isOutdoor) {
public Utilisateurs(String pseudo, InetAddress inetAddress, int id, int tcpListeningPort) {
this.pseudo = pseudo;
this.inetAddress = inetAddress;
this.id = id;
this.port = port;
this.isOutdoor = isOutdoor;
this.tcpListeningPort = tcpListeningPort;
this.isOutdoor = true;
this.lastUpdate = new Date();
System.out.println("Date du jour " + this.lastUpdate.toString());
}
public void setPseudo(String pseudo) {
@ -45,8 +38,8 @@ public class Utilisateurs implements Comparable{
this.id = id;
}
public void setPort(int port) {
this.port = port;
public void setTcpListeningPort(int tcpListeningPort) {
this.tcpListeningPort = tcpListeningPort;
}
public String getPseudo() {
@ -61,11 +54,10 @@ public class Utilisateurs implements Comparable{
return id;
}
public int getPort() {
return port;
public String getLogin() {
return login;
}
public boolean isOutdoor() {
return isOutdoor;
}
@ -74,12 +66,38 @@ public class Utilisateurs implements Comparable{
isOutdoor = outdoor;
}
@Override
public String toString(){
return Integer.toString(this.id) + "|" + this.pseudo + "|" + this.inetAddress.toString() + "|" + Integer.toString(this.port);
public void setLogin(String login) {
this.login = login;
}
public int getTcpListeningPort() {
return tcpListeningPort;
}
public void update() {
this.lastUpdate = new Date();
}
public boolean userToOld(Date date) {
System.out.println("Local Date : " + this.lastUpdate.toString());
System.out.println("Local time : " + this.lastUpdate.getTime());
System.out.println("Remote Date : " + date.toString());
System.out.println("Remote Time : " + date.getTime());
return (date.getTime() - this.lastUpdate.getTime() > 4000);
}
@Override
public String toString() {
return "Utilisateurs{" +
"pseudo='" + pseudo + '\'' +
", inetAddress=" + inetAddress +
", id=" + id +
", login='" + login + '\'' +
", isOutdoor=" + isOutdoor +
", lastUpdate=" + lastUpdate +
", tcpListeningPort=" + tcpListeningPort +
'}';
}
@Override
public boolean equals(Object obj) {
@ -92,12 +110,4 @@ public class Utilisateurs implements Comparable{
Utilisateurs u = (Utilisateurs) o;
return this.pseudo.compareTo(u.pseudo);
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
}

View file

@ -1,4 +1,4 @@
package com.example.ServeurClavardage.Messages;
package app.insa.clav.Messages;
import java.io.Serializable;
import java.net.InetAddress;
@ -32,9 +32,6 @@ public class Message implements Serializable {
*/
public int typeMessage;
public InetAddress srcIP;
public int srcResponsePort; //Seulement besoin car on teste en localHost
public InetAddress destIP; //Seulement pour UDP ou ouverture CO TCP
public int destPort; //Seulement pour UDP ou l'ouverture connexion TCP, sinon à 0.
/**
* Constructeur d'un message depuis un autre
@ -43,9 +40,6 @@ public class Message implements Serializable {
public Message(Message msg){
this.typeMessage = msg.typeMessage;
this.srcIP = msg.srcIP;
this.srcResponsePort = msg.srcResponsePort;
this.destIP = msg.destIP;
this.destPort = msg.destPort;
}
/**
@ -56,18 +50,9 @@ public class Message implements Serializable {
*
* @param srcIP
* IP depuis laquelle le msg à été envoyé
* @param srcResponsePort
* Port à utiliser pour répondre à ce message
* @param destIP
* Ip de la machine destinataire
* @param destPort
* Port de la machine destinataire
*/
public Message(int typeMessage,InetAddress srcIP, int srcResponsePort,InetAddress destIP,int destPort){
public Message(int typeMessage,InetAddress srcIP){
this.typeMessage = typeMessage;
this.srcIP = srcIP;
this.srcResponsePort = srcResponsePort;
this.destIP = destIP;
this.destPort = destPort;
}
}

View file

@ -1,4 +1,4 @@
package com.example.ServeurClavardage.Messages;
package app.insa.clav.Messages;
import java.net.InetAddress;
@ -18,36 +18,37 @@ public class MessagePseudo extends Message {
* id de l'utilidateur source du message
*/
public int id;
/**
* nport d'ecoute TCP
*/
public int portEcouteTCP;
/**
* Créé un message à partir des info.
* @see Message
* @param typeMessage
* @param srcIP
* @param srcPort
* @param destIP
* @param destPort
* @param pseudo
* @param portEcouteTCP
* @param id
*/
public MessagePseudo(int typeMessage, InetAddress srcIP, int srcPort, InetAddress destIP, int destPort, String pseudo, int id) {
super(typeMessage, srcIP, srcPort, destIP, destPort);
public MessagePseudo(int typeMessage, InetAddress srcIP, String pseudo, int portEcouteTCP, int id) {
super(typeMessage, srcIP);
this.pseudo = pseudo;
this.portEcouteTCP = portEcouteTCP;
this.id = id;
}
/**
* Crée un message à partir d'un message de base
* @see Message
* @param msg
* @param id
* @param pseudo
*/
//Create Messages.MessagePseudo from Messages.Message
public MessagePseudo(Message msg, int id, String pseudo){
super(msg);
this.pseudo = pseudo;
this.id = id;
@Override
public String toString() {
return "MessagePseudo{" +
"typeMessage=" + typeMessage +
", srcIP=" + srcIP +
", pseudo='" + pseudo + '\'' +
", id=" + id +
", portEcouteTCP=" + portEcouteTCP +
"} " + super.toString();
}
/**

View file

@ -1,15 +1,16 @@
package com.example.ServeurClavardage;
import java.io.*;
import java.net.InetAddress;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import com.example.ServeurClavardage.Messages.MessagePseudo;
import app.insa.clav.Core.Utilisateurs;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
@WebServlet(name = "getAllUsers", value = "/getAllUsers")
public class GetAllUsers extends HttpServlet {

View file

@ -6,6 +6,7 @@ import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import app.insa.clav.Core.Utilisateurs;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

View file

@ -1,21 +0,0 @@
package com.example.ServeurClavardage.Messages;
import java.net.InetAddress;
public class MessageChatFile extends MessageChatTxt{
public long fileSize;
public String ext;
public MessageChatFile(Message msg, String payload, String date, long fileSize, String ext) {
super(msg, payload, date);
this.fileSize = fileSize;
this.ext = ext;
}
public MessageChatFile(int typeMessage, InetAddress srcIP, int srcResponsePort, InetAddress destIP, int destPort, String payload, String date, long fileSize, String ext) {
super(typeMessage, srcIP, srcResponsePort, destIP, destPort, payload, date);
this.fileSize = fileSize;
this.ext = ext;
}
}

View file

@ -1,27 +0,0 @@
package com.example.ServeurClavardage.Messages;
import java.net.InetAddress;
/**
* Messages texte dans un chat
*/
//Message de type 6
public class MessageChatTxt extends Message{
public String payload;
public String date;
public MessageChatTxt(Message msg, String payload, String date) {
super(msg);
this.payload = payload;
this.date = date;
}
public MessageChatTxt(int typeMessage, InetAddress srcIP, int srcResponsePort, InetAddress destIP, int destPort, String payload, String date) {
super(typeMessage, srcIP, srcResponsePort, destIP, destPort);
this.payload = payload;
this.date = date;
}
}

View file

@ -1,61 +0,0 @@
package com.example.ServeurClavardage.Messages;
/**
* Element of the list that contains the history of messages returned by the DB
*/
public class MessageDisplay {
private int sourceId;
private String date;
private String payload;
/**
* Type 1 --> Normal text message
* Type 2 --> File message not image
* Type 3 --> Image file (png, jpg, gif, jpeg, svg)
*/
private int type;
public MessageDisplay(int sourceId, String date, String payload,int type) {
this.sourceId = sourceId;
this.date = date;
this.payload = payload;
this.type = type;
}
public MessageDisplay(){}
public int getSourceId() {
return sourceId;
}
public void setSourceId(int sourceId) {
this.sourceId = sourceId;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPayload() {
return payload;
}
public void setPayload(String payload) {
this.payload = payload;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}

View file

@ -1,48 +0,0 @@
package com.example.ServeurClavardage.Messages;
import java.io.File;
public class MessageDisplayFile extends MessageDisplay{
private File file;
private String ext;
private int DBId;
public MessageDisplayFile(int sourceId, String date, String payload, int type, File file, String ext, int DBid) {
super(sourceId, date, payload, type);
this.file = file;
this.ext = ext;
this.DBId = DBid;
}
public MessageDisplayFile() {
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getExt() {
return ext;
}
public void setExt(String ext) {
this.ext = ext;
}
public int getDBId() {
return DBId;
}
public void setDBId(int DBId) {
this.DBId = DBId;
}
}

View file

@ -1,17 +0,0 @@
package com.example.ServeurClavardage.Messages;
import java.net.InetAddress;
/**
* Messaged sent when a user creates a chat room to identifies itself
*/
public class MessageInit extends Message{
public int id;
public MessageInit(int typeMessage, InetAddress srcIP, int srcResponsePort, InetAddress destIP, int destPort, int localId) {
super(typeMessage, srcIP, srcResponsePort, destIP, destPort);
this.id = localId;
}
}

View file

@ -1,5 +1,7 @@
package com.example.ServeurClavardage;
import app.insa.clav.Core.Utilisateurs;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

View file

@ -3,12 +3,11 @@ package com.example.ServeurClavardage;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import com.example.ServeurClavardage.Messages.Message;
import com.example.ServeurClavardage.Messages.MessagePseudo;
import app.insa.clav.Core.Utilisateurs;
import app.insa.clav.Messages.MessagePseudo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -35,36 +34,8 @@ public class SubmitConnectionIndoor extends HttpServlet {
}
System.out.println(resp.toString());
}
Utilisateurs newUser = gson.fromJson(resp.toString(),Utilisateurs.class);
System.out.println(newUser);
for (Utilisateurs user : this.sh.getOutdoorUsersList()){
DatagramSocket socket = new DatagramSocket();
MessagePseudo msg = new MessagePseudo(4, newUser.getInetAddress(), newUser.getPort(), user.getInetAddress(), user.getPort(), user.getPseudo(),user.getId());
try {
//Envoi du pseudo sur le reseau local à l'adresse IP dest sur le port dest
byte[] buffer = "".getBytes();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
objectOutStream.writeObject(msg);
objectOutStream.close();
buffer = byteOutStream.toByteArray();
} catch (IOException e1) {
System.out.println("Exception serialisation de l'objet envoi message");
}
//InetAddress broadcastAdress = InetAddress.getByAddress("255.255.255.255".getBytes());
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.destIP,msg.destPort);
socket.send(packet);
}
catch (UnknownHostException e){
System.out.println("Unknown host dans broadcast address");
e.printStackTrace();
}
catch (IOException e){
System.out.println("IOException send pseudo");
e.printStackTrace();
}
}
Utilisateurs newUser = gson.fromJson(resp.toString(), Utilisateurs.class);
newUser.update();
this.sh.addIndoorUser(newUser);
}

View file

@ -3,14 +3,14 @@ package com.example.ServeurClavardage;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import com.example.ServeurClavardage.Messages.MessagePseudo;
import app.insa.clav.Core.Utilisateurs;
import app.insa.clav.Messages.MessagePseudo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -37,38 +37,10 @@ public class SubmitConnectionOutdoor extends HttpServlet {
}
System.out.println(resp.toString());
}
Utilisateurs newUser = gson.fromJson(resp.toString(),Utilisateurs.class);
ArrayList<Utilisateurs> allUsers = new ArrayList<>(this.sh.getOutdoorUsersList());
allUsers.addAll(this.sh.getIndoorUsersList());
for (Utilisateurs user : allUsers){
DatagramSocket socket = new DatagramSocket();
MessagePseudo msg = new MessagePseudo(4, newUser.getInetAddress(), newUser.getPort(), user.getInetAddress(), user.getPort(), user.getPseudo(),user.getId());
try {
//Envoi du pseudo sur le reseau local à l'adresse IP dest sur le port dest
byte[] buffer = "".getBytes();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
objectOutStream.writeObject(msg);
objectOutStream.close();
buffer = byteOutStream.toByteArray();
} catch (IOException e1) {
System.out.println("Exception serialisation de l'objet envoi message");
}
//InetAddress broadcastAdress = InetAddress.getByAddress("255.255.255.255".getBytes());
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.destIP,msg.destPort);
socket.send(packet);
}
catch (UnknownHostException e){
System.out.println("Unknown host dans broadcast address");
e.printStackTrace();
}
catch (IOException e){
System.out.println("IOException send pseudo");
e.printStackTrace();
}
}
Utilisateurs newUser = gson.fromJson(resp.toString(), Utilisateurs.class);
newUser.update();
this.sh.addOutdoorUser(newUser);
}
public void destroy() {

View file

@ -3,12 +3,11 @@ package com.example.ServeurClavardage;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import com.example.ServeurClavardage.Messages.Message;
import com.example.ServeurClavardage.Messages.MessagePseudo;
import app.insa.clav.Core.Utilisateurs;
import app.insa.clav.Messages.MessagePseudo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -35,37 +34,9 @@ public class SubmitDeconnectionIndoor extends HttpServlet {
}
System.out.println(resp.toString());
}
Utilisateurs disconnectedUser = gson.fromJson(resp.toString(),Utilisateurs.class);
Utilisateurs disconnectedUser = gson.fromJson(resp.toString(), Utilisateurs.class);
this.sh.removeIndoorUser(disconnectedUser);
System.out.println(disconnectedUser);
for (Utilisateurs user : this.sh.getOutdoorUsersList()){
DatagramSocket socket = new DatagramSocket();
MessagePseudo msg = new MessagePseudo(7, disconnectedUser.getInetAddress(), disconnectedUser.getPort(), user.getInetAddress(), user.getPort(), user.getPseudo(),user.getId());
try {
//Envoi du pseudo sur le reseau local à l'adresse IP dest sur le port dest
byte[] buffer = "".getBytes();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
objectOutStream.writeObject(msg);
objectOutStream.close();
buffer = byteOutStream.toByteArray();
} catch (IOException e1) {
System.out.println("Exception serialisation de l'objet envoi message");
}
//InetAddress broadcastAdress = InetAddress.getByAddress("255.255.255.255".getBytes());
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.destIP,msg.destPort);
socket.send(packet);
}
catch (UnknownHostException e){
System.out.println("Unknown host dans broadcast address");
e.printStackTrace();
}
catch (IOException e){
System.out.println("IOException send pseudo");
e.printStackTrace();
}
}
}
public void destroy() {

View file

@ -3,14 +3,14 @@ package com.example.ServeurClavardage;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import com.example.ServeurClavardage.Messages.MessagePseudo;
import app.insa.clav.Core.Utilisateurs;
import app.insa.clav.Messages.MessagePseudo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -37,38 +37,8 @@ public class SubmitDeconnectionOutdoor extends HttpServlet {
}
System.out.println(resp.toString());
}
Utilisateurs disconnectedUser = gson.fromJson(resp.toString(),Utilisateurs.class);
this.sh.addOutdoorUser(disconnectedUser);
ArrayList<Utilisateurs> allUsers = new ArrayList<>(this.sh.getOutdoorUsersList());
allUsers.addAll(this.sh.getIndoorUsersList());
for (Utilisateurs user : allUsers){
DatagramSocket socket = new DatagramSocket();
MessagePseudo msg = new MessagePseudo(7, disconnectedUser.getInetAddress(), disconnectedUser.getPort(), user.getInetAddress(), user.getPort(), user.getPseudo(),user.getId());
try {
//Envoi du pseudo sur le reseau local à l'adresse IP dest sur le port dest
byte[] buffer = "".getBytes();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
objectOutStream.writeObject(msg);
objectOutStream.close();
buffer = byteOutStream.toByteArray();
} catch (IOException e1) {
System.out.println("Exception serialisation de l'objet envoi message");
}
//InetAddress broadcastAdress = InetAddress.getByAddress("255.255.255.255".getBytes());
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.destIP,msg.destPort);
socket.send(packet);
}
catch (UnknownHostException e){
System.out.println("Unknown host dans broadcast address");
e.printStackTrace();
}
catch (IOException e){
System.out.println("IOException send pseudo");
e.printStackTrace();
}
}
Utilisateurs disconnectedUser = gson.fromJson(resp.toString(), Utilisateurs.class);
this.sh.removeOutdoorUser(disconnectedUser);
}
public void destroy() {