diff --git a/build.gradle b/build.gradle index 341b272..36100f0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,7 @@ targetCompatibility = 1.8 dependencies { compileOnly('javax.servlet:javax.servlet-api:4.0.1') + implementation 'com.google.code.gson:gson:2.8.6' testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}") diff --git a/build/classes/java/main/com/example/ServeurClavardage/GetAllUsers.class b/build/classes/java/main/com/example/ServeurClavardage/GetAllUsers.class new file mode 100644 index 0000000..f141d13 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/GetAllUsers.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/GetOutdoorUsers.class b/build/classes/java/main/com/example/ServeurClavardage/GetOutdoorUsers.class new file mode 100644 index 0000000..93530f7 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/GetOutdoorUsers.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/HelloServlet.class b/build/classes/java/main/com/example/ServeurClavardage/HelloServlet.class deleted file mode 100644 index 304f6fe..0000000 Binary files a/build/classes/java/main/com/example/ServeurClavardage/HelloServlet.class and /dev/null differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/Message.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/Message.class new file mode 100644 index 0000000..dcef62f Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/Message.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageChatFile.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageChatFile.class new file mode 100644 index 0000000..cfdcd0e Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageChatFile.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageChatTxt.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageChatTxt.class new file mode 100644 index 0000000..3b56fcd Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageChatTxt.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageDisplay.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageDisplay.class new file mode 100644 index 0000000..5e1b55a Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageDisplay.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageDisplayFile.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageDisplayFile.class new file mode 100644 index 0000000..f738c3e Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageDisplayFile.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageInit.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageInit.class new file mode 100644 index 0000000..9b390e4 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessageInit.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Messages/MessagePseudo.class b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessagePseudo.class new file mode 100644 index 0000000..6ff48a7 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Messages/MessagePseudo.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/SharedInformation.class b/build/classes/java/main/com/example/ServeurClavardage/SharedInformation.class new file mode 100644 index 0000000..5807f6c Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/SharedInformation.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/SubmitConnectionIndoor.class b/build/classes/java/main/com/example/ServeurClavardage/SubmitConnectionIndoor.class new file mode 100644 index 0000000..c49d4a8 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/SubmitConnectionIndoor.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/SubmitConnectionOutdoor.class b/build/classes/java/main/com/example/ServeurClavardage/SubmitConnectionOutdoor.class new file mode 100644 index 0000000..55acf49 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/SubmitConnectionOutdoor.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/SubmitDeconnectionIndoor.class b/build/classes/java/main/com/example/ServeurClavardage/SubmitDeconnectionIndoor.class new file mode 100644 index 0000000..073de43 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/SubmitDeconnectionIndoor.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/SubmitDeconnectionOutdoor.class b/build/classes/java/main/com/example/ServeurClavardage/SubmitDeconnectionOutdoor.class new file mode 100644 index 0000000..9f3a247 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/SubmitDeconnectionOutdoor.class differ diff --git a/build/classes/java/main/com/example/ServeurClavardage/Utilisateurs.class b/build/classes/java/main/com/example/ServeurClavardage/Utilisateurs.class new file mode 100644 index 0000000..8c4c107 Binary files /dev/null and b/build/classes/java/main/com/example/ServeurClavardage/Utilisateurs.class differ diff --git a/build/libs/ServeurClavardage-1.0-SNAPSHOT.war b/build/libs/ServeurClavardage-1.0-SNAPSHOT.war index 5d8c03c..4790fc0 100644 Binary files a/build/libs/ServeurClavardage-1.0-SNAPSHOT.war and b/build/libs/ServeurClavardage-1.0-SNAPSHOT.war differ diff --git a/build/libs/ServletJiggly.war b/build/libs/ServletJiggly.war new file mode 100644 index 0000000..473bff0 Binary files /dev/null and b/build/libs/ServletJiggly.war differ diff --git a/build/tmp/compileJava/source-classes-mapping.txt b/build/tmp/compileJava/source-classes-mapping.txt index b9eec95..1319966 100644 --- a/build/tmp/compileJava/source-classes-mapping.txt +++ b/build/tmp/compileJava/source-classes-mapping.txt @@ -1,2 +1,30 @@ -com/example/ServeurClavardage/HelloServlet.java - com.example.ServeurClavardage.HelloServlet +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 +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/SubmitDeconnectionIndoor.java + com.example.ServeurClavardage.SubmitDeconnectionIndoor +com/example/ServeurClavardage/SubmitDeconnectionOutdoor.java + com.example.ServeurClavardage.SubmitDeconnectionOutdoor diff --git a/src/main/java/com/example/ServeurClavardage/GetAllUsers.java b/src/main/java/com/example/ServeurClavardage/GetAllUsers.java new file mode 100644 index 0000000..9476a0a --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/GetAllUsers.java @@ -0,0 +1,37 @@ +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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; + + +@WebServlet(name = "getAllUsers", value = "/getAllUsers") +public class GetAllUsers extends HttpServlet { + private String message; + private SharedInformation sh; + + public void init() { + message = "Hello World!"; + this.sh = SharedInformation.getInstance(); + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("application/json"); + final GsonBuilder builder = new GsonBuilder(); + final Gson gson = builder.create(); + ArrayList users = new ArrayList<>(this.sh.getOutdoorUsersList()); + users.addAll(this.sh.getIndoorUsersList()); + String param = gson.toJson(users); + PrintWriter out = response.getWriter(); + out.print(param); + } + + public void destroy() { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/GetOutdoorUsers.java b/src/main/java/com/example/ServeurClavardage/GetOutdoorUsers.java new file mode 100644 index 0000000..35f8c43 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/GetOutdoorUsers.java @@ -0,0 +1,35 @@ +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.google.gson.Gson; +import com.google.gson.GsonBuilder; + + +@WebServlet(name = "getOutdoorUsers", value = "/getOutdoorUsers") +public class GetOutdoorUsers extends HttpServlet { + private String message; + private SharedInformation sh; + + public void init() { + message = "Hello World!"; + this.sh = SharedInformation.getInstance(); + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.setContentType("application/json"); + final GsonBuilder builder = new GsonBuilder(); + final Gson gson = builder.create(); + ArrayList outdoorArrayList = this.sh.getOutdoorUsersList(); + String param = gson.toJson(outdoorArrayList); + PrintWriter out = response.getWriter(); + out.print(param); + } + + public void destroy() { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/HelloServlet.java b/src/main/java/com/example/ServeurClavardage/HelloServlet.java deleted file mode 100644 index 914ab86..0000000 --- a/src/main/java/com/example/ServeurClavardage/HelloServlet.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.ServeurClavardage; - -import java.io.*; -import javax.servlet.http.*; -import javax.servlet.annotation.*; - -@WebServlet(name = "helloServlet", value = "/hello-servlet") -public class HelloServlet extends HttpServlet { - private String message; - - public void init() { - message = "Hello World!"; - } - - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.setContentType("text/html"); - - // Hello - PrintWriter out = response.getWriter(); - out.println(""); - out.println("

" + message + "

"); - out.println(""); - } - - public void destroy() { - } -} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/Messages/Message.java b/src/main/java/com/example/ServeurClavardage/Messages/Message.java new file mode 100644 index 0000000..de68667 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/Message.java @@ -0,0 +1,73 @@ +package com.example.ServeurClavardage.Messages; + +import java.io.Serializable; +import java.net.InetAddress; + +//Classe de base de tout les messages. Les payloads seront précisés dans les classes filles + +/* typeMessage Number : + 1 ---> Messages.MessagePseudo envoi en 1er + 2 ---> Messages.MessagePseudo réponse à type 1 pseudo ok + 3 ---> Messages.MessagePseudo réponse à type 1 pseudo pas ok + 4 ---> Messages.MessagePseudo si après type 1 aucun type 2 pour un delai, envoi confirmation pseudo + 5 ---> Message Init envoyé quand on se connecte en TCP à un user distant + 6 ---> MessageChatTxt pour le chat + 7 ---> Message.MessagePseudo de deconnexion + 8 ---> Message fermeture fenetre chat + 9 ---> MessageChatFile to say a file is going to be sent + */ + +/** + * Message de base, classe mère dont les message plus spécifiques héritent. + */ +public class Message implements Serializable { + + //private static final long serialVersionUID = 7526472295622776147L; + + /** + * Type de message.
+ * 1 -> Demande de validation de pseudo (MessagePseudo)
+ * 2 -> Réponse validation pseudo ok (MessagePseudo)
+ * 3 -> Réponse validation pseudo pas ok (MessagePseudo) + */ + 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 + * @param msg + */ + public Message(Message msg){ + this.typeMessage = msg.typeMessage; + this.srcIP = msg.srcIP; + this.srcResponsePort = msg.srcResponsePort; + this.destIP = msg.destIP; + this.destPort = msg.destPort; + } + + /** + * Construit un message depuis les infos en paramètre + * @param typeMessage + * Type du message. + * Voir autres messages pour précisions + * + * @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){ + this.typeMessage = typeMessage; + this.srcIP = srcIP; + this.srcResponsePort = srcResponsePort; + this.destIP = destIP; + this.destPort = destPort; + } +} diff --git a/src/main/java/com/example/ServeurClavardage/Messages/MessageChatFile.java b/src/main/java/com/example/ServeurClavardage/Messages/MessageChatFile.java new file mode 100644 index 0000000..e145e51 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/MessageChatFile.java @@ -0,0 +1,21 @@ +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; + } +} diff --git a/src/main/java/com/example/ServeurClavardage/Messages/MessageChatTxt.java b/src/main/java/com/example/ServeurClavardage/Messages/MessageChatTxt.java new file mode 100644 index 0000000..6ee706e --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/MessageChatTxt.java @@ -0,0 +1,27 @@ +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; + } +} diff --git a/src/main/java/com/example/ServeurClavardage/Messages/MessageDisplay.java b/src/main/java/com/example/ServeurClavardage/Messages/MessageDisplay.java new file mode 100644 index 0000000..f990872 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/MessageDisplay.java @@ -0,0 +1,61 @@ +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; + } +} + diff --git a/src/main/java/com/example/ServeurClavardage/Messages/MessageDisplayFile.java b/src/main/java/com/example/ServeurClavardage/Messages/MessageDisplayFile.java new file mode 100644 index 0000000..23cf7ae --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/MessageDisplayFile.java @@ -0,0 +1,48 @@ +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; + } + + +} diff --git a/src/main/java/com/example/ServeurClavardage/Messages/MessageInit.java b/src/main/java/com/example/ServeurClavardage/Messages/MessageInit.java new file mode 100644 index 0000000..a93c7c5 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/MessageInit.java @@ -0,0 +1,17 @@ +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; + } +} diff --git a/src/main/java/com/example/ServeurClavardage/Messages/MessagePseudo.java b/src/main/java/com/example/ServeurClavardage/Messages/MessagePseudo.java new file mode 100644 index 0000000..6a1cf1c --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Messages/MessagePseudo.java @@ -0,0 +1,63 @@ +package com.example.ServeurClavardage.Messages; + +import java.net.InetAddress; + +//Messages.Message qui permet d'envoyer un pseudo. typeMessage = 1 + + +/** + * Classe de message pour envoyer des truc concernant les Pseudo/ les utilisateurs connéctés + */ +public class MessagePseudo extends Message { + + /** + * Pseudo soit en demande de validation (type 1) ou alors pseudo effectif de la source du message + */ + public String pseudo; + /** + * id de l'utilidateur source du message + */ + public int id; + + /** + * Créé un message à partir des info. + * @see Message + * @param typeMessage + * @param srcIP + * @param srcPort + * @param destIP + * @param destPort + * @param pseudo + * @param id + */ + public MessagePseudo(int typeMessage, InetAddress srcIP, int srcPort, InetAddress destIP, int destPort, String pseudo, int id) { + super(typeMessage, srcIP, srcPort, destIP, destPort); + this.pseudo = pseudo; + 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; + } + + /** + * permet de renvoyer un string représtant ce message (surout pour les tests) + * @param id + * @param pseudo + * @return + */ + //Returns payload for a pseudo message + public static String pseudoPayload(int id, String pseudo){ + return Integer.toString(id) + "|" + pseudo; + } +} diff --git a/src/main/java/com/example/ServeurClavardage/SharedInformation.java b/src/main/java/com/example/ServeurClavardage/SharedInformation.java new file mode 100644 index 0000000..265193c --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/SharedInformation.java @@ -0,0 +1,53 @@ +package com.example.ServeurClavardage; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +public class SharedInformation { + private ArrayList outdoorUsersList; + private ArrayList indoorUsersList; + private static SharedInformation instance = null; + + public SharedInformation(){ + this.outdoorUsersList = new ArrayList<>(); + this.indoorUsersList = new ArrayList<>(); + } + + public static SharedInformation getInstance(){ + synchronized(SharedInformation.class){ + if (instance == null) { + instance = new SharedInformation(); + } + } + return instance; + } + + public synchronized ArrayList getOutdoorUsersList(){ + return outdoorUsersList; + } + + public synchronized ArrayList getIndoorUsersList(){ + return indoorUsersList; + } + + public synchronized void addIndoorUser(Utilisateurs newUser){ + this.indoorUsersList.remove(newUser); + this.indoorUsersList.add(newUser); + Collections.sort(this.indoorUsersList); + } + + public synchronized void addOutdoorUser(Utilisateurs newUser){ + this.outdoorUsersList.remove(newUser); + this.outdoorUsersList.add(newUser); + Collections.sort(this.outdoorUsersList); + } + + public synchronized void removeIndoorUser(Utilisateurs user){ + this.indoorUsersList.remove(user); + } + + public synchronized void removeOutdoorUser(Utilisateurs user){ + this.outdoorUsersList.remove(user); + } +} diff --git a/src/main/java/com/example/ServeurClavardage/SubmitConnectionIndoor.java b/src/main/java/com/example/ServeurClavardage/SubmitConnectionIndoor.java new file mode 100644 index 0000000..78ba901 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/SubmitConnectionIndoor.java @@ -0,0 +1,73 @@ +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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; + + +@WebServlet(name = "submitConnectionIndoor", value = "/submitConnectionIndoor") +public class SubmitConnectionIndoor extends HttpServlet { + private String message; + private SharedInformation sh; + + public void init() { + message = "Hello World!"; + this.sh = SharedInformation.getInstance(); + } + + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + final GsonBuilder builder = new GsonBuilder(); + final Gson gson = builder.create(); + StringBuilder resp = new StringBuilder(); + try(BufferedReader br = new BufferedReader( + new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) { + String responseLine = null; + while ((responseLine = br.readLine()) != null) { + resp.append(responseLine.trim()); + } + 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(); + } + } + this.sh.addIndoorUser(newUser); + } + + public void destroy() { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/SubmitConnectionOutdoor.java b/src/main/java/com/example/ServeurClavardage/SubmitConnectionOutdoor.java new file mode 100644 index 0000000..47c9f45 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/SubmitConnectionOutdoor.java @@ -0,0 +1,76 @@ +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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; + + +@WebServlet(name = "submitConnectionOutdoor", value = "/submitConnectionOutdoor") +public class SubmitConnectionOutdoor extends HttpServlet { + private String message; + private SharedInformation sh; + + public void init() { + message = "Hello World!"; + this.sh = SharedInformation.getInstance(); + } + + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + final GsonBuilder builder = new GsonBuilder(); + final Gson gson = builder.create(); + StringBuilder resp = new StringBuilder(); + try(BufferedReader br = new BufferedReader( + new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) { + String responseLine = null; + while ((responseLine = br.readLine()) != null) { + resp.append(responseLine.trim()); + } + System.out.println(resp.toString()); + } + Utilisateurs newUser = gson.fromJson(resp.toString(),Utilisateurs.class); + ArrayList 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(); + } + } + this.sh.addOutdoorUser(newUser); + } + + public void destroy() { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/SubmitDeconnectionIndoor.java b/src/main/java/com/example/ServeurClavardage/SubmitDeconnectionIndoor.java new file mode 100644 index 0000000..5eee6c1 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/SubmitDeconnectionIndoor.java @@ -0,0 +1,73 @@ +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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; + + +@WebServlet(name = "submitDeconnectionIndoor", value = "/submitDeconnectionIndoor") +public class SubmitDeconnectionIndoor extends HttpServlet { + private String message; + private SharedInformation sh; + + public void init() { + message = "Hello World!"; + this.sh = SharedInformation.getInstance(); + } + + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + final GsonBuilder builder = new GsonBuilder(); + final Gson gson = builder.create(); + StringBuilder resp = new StringBuilder(); + try(BufferedReader br = new BufferedReader( + new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) { + String responseLine = null; + while ((responseLine = br.readLine()) != null) { + resp.append(responseLine.trim()); + } + System.out.println(resp.toString()); + } + 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() { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/SubmitDeconnectionOutdoor.java b/src/main/java/com/example/ServeurClavardage/SubmitDeconnectionOutdoor.java new file mode 100644 index 0000000..6729dcd --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/SubmitDeconnectionOutdoor.java @@ -0,0 +1,76 @@ +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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; + + +@WebServlet(name = "submitDeconnectionOutdoor", value = "/submitDeconnectionOutdoor") +public class SubmitDeconnectionOutdoor extends HttpServlet { + private String message; + private SharedInformation sh; + + public void init() { + message = "Hello World!"; + this.sh = SharedInformation.getInstance(); + } + + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + final GsonBuilder builder = new GsonBuilder(); + final Gson gson = builder.create(); + StringBuilder resp = new StringBuilder(); + try(BufferedReader br = new BufferedReader( + new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) { + String responseLine = null; + while ((responseLine = br.readLine()) != null) { + resp.append(responseLine.trim()); + } + System.out.println(resp.toString()); + } + Utilisateurs disconnectedUser = gson.fromJson(resp.toString(),Utilisateurs.class); + this.sh.addOutdoorUser(disconnectedUser); + ArrayList 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(); + } + } + } + + public void destroy() { + } +} \ No newline at end of file diff --git a/src/main/java/com/example/ServeurClavardage/Utilisateurs.java b/src/main/java/com/example/ServeurClavardage/Utilisateurs.java new file mode 100644 index 0000000..feed895 --- /dev/null +++ b/src/main/java/com/example/ServeurClavardage/Utilisateurs.java @@ -0,0 +1,103 @@ +package com.example.ServeurClavardage; + +import java.io.Serializable; +import java.net.InetAddress; +import java.util.Date; + + +//Classe qui permet d'identifier un utilisateur + +public class Utilisateurs implements Comparable{ + private String pseudo; + private InetAddress inetAddress; + private int id; + private int port; + private String login; + private boolean isOutdoor; + + 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) { + this.pseudo = pseudo; + this.inetAddress = inetAddress; + this.id = id; + this.port = port; + this.isOutdoor = isOutdoor; + } + + public void setPseudo(String pseudo) { + this.pseudo = pseudo; + } + + public void setInetAddress(InetAddress inetAddress) { + this.inetAddress = inetAddress; + } + + public void setId(int id) { + this.id = id; + } + + public void setPort(int port) { + this.port = port; + } + + public String getPseudo() { + return pseudo; + } + + public InetAddress getInetAddress() { + return inetAddress; + } + + public int getId() { + return id; + } + + public int getPort() { + return port; + } + + + public boolean isOutdoor() { + return isOutdoor; + } + + public void setOutdoor(boolean outdoor) { + isOutdoor = outdoor; + } + + + @Override + public String toString(){ + return Integer.toString(this.id) + "|" + this.pseudo + "|" + this.inetAddress.toString() + "|" + Integer.toString(this.port); + } + + + @Override + public boolean equals(Object obj) { + Utilisateurs aux = (Utilisateurs) obj; + return this.id == aux.id; + } + + @Override + public int compareTo(Object o) { + Utilisateurs u = (Utilisateurs) o; + return this.pseudo.compareTo(u.pseudo); + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } +} diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index dd88878..b4a9a98 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -8,6 +8,7 @@

<%= "Hello World!" %>


-Hello Servlet +Get Outdoor Users +Get All Users \ No newline at end of file