Added basic functionalities

This commit is contained in:
EyeXion 2021-02-06 10:54:39 +01:00
parent 1cab4cfc79
commit 67437407a8
37 changed files with 869 additions and 30 deletions

View file

@ -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.

View file

@ -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

View 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() {
}
}

View file

@ -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() {
}
}

View file

@ -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() {
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}

View file

@ -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() {
}
}

View file

@ -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() {
}
}

View file

@ -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() {
}
}

View file

@ -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() {
}
}

View 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;
}
}

View file

@ -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>