diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/json/websocket/Message.java b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/json/websocket/Message.java new file mode 100644 index 0000000..9bf16c4 --- /dev/null +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/pojo/json/websocket/Message.java @@ -0,0 +1,24 @@ +package uppa.project.pojo.json.websocket; + +public class Message { + private final String type; + private final String data; + + public Message(String type, String data) { + this.type = type; + this.data = data; + } + + public String getType() { + return type; + } + + public String getData() { + return data; + } + + @Override + public String toString() { + return "Message{" + "type=" + type + ", data=" + data + '}'; + } +} diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/MainMenuServlet.java b/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/MainMenuServlet.java index 7339375..8f36411 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/MainMenuServlet.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/MainMenuServlet.java @@ -49,7 +49,6 @@ public class MainMenuServlet extends HttpServlet { } for(HttpSession session : loginsSessions) { User connectedUser = (User) session.getAttribute("user"); - System.out.println(connectedUser.toString()); if(session.getServletContext().getContextPath().equals(request.getServletContext().getContextPath()) && connectedUser != null && !connectedUser.equals(sessionUser)) { connectedUsers.add(connectedUser); } diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/RegisterServlet.java b/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/RegisterServlet.java index d93c4da..564574a 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/RegisterServlet.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/RegisterServlet.java @@ -6,14 +6,12 @@ package uppa.project.servlet; -import jakarta.persistence.EntityManager; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import uppa.project.provider.EntityManagerProvider; @WebServlet(name = "registerServlet", value = "/register") public class RegisterServlet extends HttpServlet { diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/api/auth/AuthRegisterServlet.java b/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/api/auth/AuthRegisterServlet.java index 03d6d3c..7d3b8f1 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/api/auth/AuthRegisterServlet.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/servlet/api/auth/AuthRegisterServlet.java @@ -18,7 +18,6 @@ import java.io.PrintWriter; import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; -import java.util.Locale; import uppa.project.dao.DAO; import uppa.project.dao.DAOException; import uppa.project.pojo.User; diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/websocket/MainMenuWS.java b/S2/DevWeb/Projet/src/main/java/uppa/project/websocket/MainMenuWS.java new file mode 100644 index 0000000..ad95150 --- /dev/null +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/websocket/MainMenuWS.java @@ -0,0 +1,72 @@ +package uppa.project.websocket; + +import com.google.gson.Gson; +import jakarta.websocket.OnClose; +import jakarta.websocket.OnError; +import jakarta.websocket.OnMessage; +import jakarta.websocket.OnOpen; +import jakarta.websocket.RemoteEndpoint; +import jakarta.websocket.Session; +import jakarta.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.HashMap; +import uppa.project.pojo.User; +import uppa.project.pojo.json.websocket.Message; + +@ServerEndpoint(value = "/main-menu") +public class MainMenuWS { + + private static final HashMap connections = new HashMap<>(); + + @OnOpen + public void onOpen(Session session) { + System.out.println("Connexion WebSocket ouverte : " + session.getId()); + } + + private void broadcastConnectedUsers() { + Gson gson = new Gson(); + User[] connectedUsers = connections.values().toArray(new User[0]); + + Message websocketObject = new Message("userList", gson.toJson(connectedUsers)); + String message = gson.toJson(websocketObject); + + System.out.println("Broadcasting connected users : " + message); + + for (Session session : connections.keySet()) { + RemoteEndpoint.Basic remote = session.getBasicRemote(); + try { + remote.sendText(message); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @OnClose + public void onClose(Session session) { + System.out.println("Connexion WebSocket fermée : " + session.getId()); + connections.remove(session); + } + + @OnError + public void onError(Throwable throwable) { + System.out.println("Erreur WebSocket : " + throwable.getMessage()); + throwable.printStackTrace(); + } + + @OnMessage + public void onMessage(String message, Session session) { + Gson gson = new Gson(); + Message websocketMessage = gson.fromJson(message, Message.class); + + System.out.println("Message reçu : " + websocketMessage); + + if (websocketMessage.getType().equals("linkUserSession")) { + User user = gson.fromJson(websocketMessage.getData(), User.class); + System.out.println(user); + + connections.put(session, user); + broadcastConnectedUsers(); + } + } +} diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/views/main-menu.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/views/main-menu.jsp index fc4d83b..cf647f9 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/views/main-menu.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/views/main-menu.jsp @@ -13,6 +13,7 @@ + <%@include file="../components/navbar.jsp"%> diff --git a/S2/DevWeb/Projet/src/main/webapp/static/js/login.js b/S2/DevWeb/Projet/src/main/webapp/static/js/login.js index e6fd2f4..a4d1e8e 100644 --- a/S2/DevWeb/Projet/src/main/webapp/static/js/login.js +++ b/S2/DevWeb/Projet/src/main/webapp/static/js/login.js @@ -10,14 +10,9 @@ loginForm.addEventListener("submit", (event) => { fetch(loginForm.getAttribute("action"), { headers: {"Content-Type": "application/json"}, body: JSON.stringify(data), method: loginForm.getAttribute("method"), }) - .then(res => { - if (res.ok) { - window.location.href = "./main-menu"; - } - else { - // TODO Display red inputs - } - }) + .then(res => res.json()) + .then(user => sessionStorage.setItem("user", JSON.stringify(user))) + .then(() => window.location.href = "./main-menu") .catch(error => console.error("Error:", error)); }); diff --git a/S2/DevWeb/Projet/src/main/webapp/static/js/main-menu.js b/S2/DevWeb/Projet/src/main/webapp/static/js/main-menu.js new file mode 100644 index 0000000..29cb19c --- /dev/null +++ b/S2/DevWeb/Projet/src/main/webapp/static/js/main-menu.js @@ -0,0 +1,25 @@ +const session = JSON.parse(sessionStorage.getItem('session')); + +url = new URL(window.location.href); +url.protocol = 'ws:'; + +const websocket = new WebSocket(url); + +websocket.onopen = () => { + const linkUserSession = { + type: 'linkUserSession', + data: sessionStorage.getItem('user') + } + websocket.send(JSON.stringify(linkUserSession)); +} + +websocket.onmessage = (event) => { + const data = JSON.parse(event.data); + + if (data.type === 'userList') { + console.log(JSON.parse(data.data)); + } +} + +websocket.onclose = () => {} +websocket.onerror = (error) => {} \ No newline at end of file