Added basic functionalities
This commit is contained in:
parent
1cab4cfc79
commit
67437407a8
37 changed files with 869 additions and 30 deletions
|
@ -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}")
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/libs/ServletJiggly.war
Normal file
BIN
build/libs/ServletJiggly.war
Normal file
Binary file not shown.
|
@ -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
|
||||
|
|
37
src/main/java/com/example/ServeurClavardage/GetAllUsers.java
Normal file
37
src/main/java/com/example/ServeurClavardage/GetAllUsers.java
Normal file
|
@ -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<Utilisateurs> 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() {
|
||||
}
|
||||
}
|
|
@ -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<Utilisateurs> outdoorArrayList = this.sh.getOutdoorUsersList();
|
||||
String param = gson.toJson(outdoorArrayList);
|
||||
PrintWriter out = response.getWriter();
|
||||
out.print(param);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
}
|
|
@ -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("<html><body>");
|
||||
out.println("<h1>" + message + "</h1>");
|
||||
out.println("</body></html>");
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
}
|
|
@ -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. </br>
|
||||
* 1 -> Demande de validation de pseudo (MessagePseudo) </br>
|
||||
* 2 -> Réponse validation pseudo ok (MessagePseudo) </br>
|
||||
* 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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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<Utilisateurs> outdoorUsersList;
|
||||
private ArrayList<Utilisateurs> 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<Utilisateurs> getOutdoorUsersList(){
|
||||
return outdoorUsersList;
|
||||
}
|
||||
|
||||
public synchronized ArrayList<Utilisateurs> 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);
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
}
|
||||
}
|
|
@ -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<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();
|
||||
}
|
||||
}
|
||||
this.sh.addOutdoorUser(newUser);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
}
|
||||
}
|
|
@ -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<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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
}
|
||||
}
|
103
src/main/java/com/example/ServeurClavardage/Utilisateurs.java
Normal file
103
src/main/java/com/example/ServeurClavardage/Utilisateurs.java
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@
|
|||
<h1><%= "Hello World!" %>
|
||||
</h1>
|
||||
<br/>
|
||||
<a href="hello-servlet">Hello Servlet</a>
|
||||
<a href="getOutdoorUsers">Get Outdoor Users</a>
|
||||
<a href="getAllUsers">Get All Users</a>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue