diff --git a/S2/DevWeb/Projet/pom.xml b/S2/DevWeb/Projet/pom.xml
index 5d5e03b..50e0cb9 100644
--- a/S2/DevWeb/Projet/pom.xml
+++ b/S2/DevWeb/Projet/pom.xml
@@ -91,7 +91,7 @@
org.apache.maven.plugins
maven-war-plugin
3.3.2
-
+ org.apache.maven.pluginsmaven-compiler-plugin1616
diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/json/websocket/Message.java b/S2/DevWeb/Projet/src/main/java/uppa/project/json/websocket/Message.java
index 6c7b6fa..6ecfcd6 100644
--- a/S2/DevWeb/Projet/src/main/java/uppa/project/json/websocket/Message.java
+++ b/S2/DevWeb/Projet/src/main/java/uppa/project/json/websocket/Message.java
@@ -1,6 +1,10 @@
package uppa.project.json.websocket;
+import com.google.gson.Gson;
+
public class Message {
+ private final static Gson gson = new Gson();
+
private final String type;
private final String data;
@@ -17,6 +21,10 @@ public class Message {
return data;
}
+ public String toJson() {
+ return gson.toJson(this);
+ }
+
@Override
public String toString() {
return "Message{" + "type=" + type + ", data=" + data + '}';
diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/ConnectedUsersWS.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/ConnectedUsersWS.java
index 311cb0f..af394cd 100644
--- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/ConnectedUsersWS.java
+++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/ConnectedUsersWS.java
@@ -5,45 +5,50 @@ 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.PathParam;
import jakarta.websocket.server.ServerEndpoint;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
+import uppa.project.database.dao.DAO;
+import uppa.project.database.dao.DAOException;
+import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory;
import uppa.project.database.pojo.User;
import uppa.project.json.websocket.Message;
-@ServerEndpoint(value = "/ws/connected-users")
+@ServerEndpoint(value = "/ws/users/{user_id}")
public class ConnectedUsersWS {
- public static final HashMap connections = new HashMap<>();
+ public static final HashMap users = new HashMap<>();
+ private static final Gson gson = new Gson();
@OnOpen
- public void onOpen(Session session) {}
+ public void onOpen(Session session, @PathParam("user_id") String userId) throws DAOException {
+ Message message;
+ final DAO userDAO = new Game_JPA_DAO_Factory().getDAOUser();
- private void broadcastConnectedUsers() {
- Gson gson = new Gson();
- User[] connectedUsers = connections.values().toArray(new User[0]);
+ int id = Integer.parseInt(userId);
+ User user = userDAO.findById(id);
- Message websocketObject = new Message("userList", gson.toJson(connectedUsers));
- String message = gson.toJson(websocketObject);
+ // Send the new user to all connected users
+ message = new Message("addUser", gson.toJson(new SimpleUser(user)));
+ broadcast(message.toJson());
- for (Session session : connections.keySet()) {
- RemoteEndpoint.Basic remote = session.getBasicRemote();
- try {
- remote.sendText(message);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
+ // Send all connected users to the new user
+ users.put(session, user);
+ ArrayList connectedUsers = new ArrayList<>();
+ for (User u : users.values()) connectedUsers.add(new SimpleUser(u));
+ message = new Message("init", gson.toJson(connectedUsers));
+ session.getAsyncRemote().sendText(message.toJson());
}
@OnClose
public void onClose(Session session) {
- connections.remove(session);
+ users.remove(session);
- // Update connected users list
- broadcastConnectedUsers();
+ Message message = new Message("removeUser", gson.toJson(new SimpleUser(users.get(session))));
+ broadcast(message.toJson());
}
@OnError
@@ -53,13 +58,26 @@ public class ConnectedUsersWS {
@OnMessage
public void onMessage(String message, Session session) {
- Gson gson = new Gson();
- Message websocketMessage = gson.fromJson(message, Message.class);
+ // Do nothing
+ }
- if (websocketMessage.getType().equals("linkUserSession")) {
- User user = gson.fromJson(websocketMessage.getData(), User.class);
- connections.put(session, user);
- broadcastConnectedUsers();
+ private static void broadcast(String message) {
+ for (Session session : users.keySet()) {
+ try {
+ session.getBasicRemote().sendText(message);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private static class SimpleUser {
+ public int id;
+ public String username;
+
+ public SimpleUser(User user) {
+ this.id = user.getId().intValue();
+ this.username = user.getUsername();
}
}
}
diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/connected-user-list.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/connected-user-list.tag
index b87e06f..5890710 100644
--- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/connected-user-list.tag
+++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/connected-user-list.tag
@@ -1,95 +1,63 @@
+
<%@tag description="component/connected-user-list" pageEncoding="UTF-8" %>
<%@tag import="com.google.gson.Gson" %>
-<%@tag import="uppa.project.database.pojo.User" %>
<%@taglib prefix="component" tagdir="/WEB-INF/tags/components" %>
+<%@attribute name="anonymous"%>
+
| Utilisateur |
-<%-- Nombre de parties | --%>
-<%-- Victoires (%) | --%>
-<%-- Clics corrects (%) | --%>
-<%-- Clics rapides (%) | --%>
-<%-- Action | --%>
diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/navbar.tag b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/navbar.tag
index 7effc30..d140130 100644
--- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/navbar.tag
+++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/tags/components/navbar.tag
@@ -6,13 +6,13 @@
<% if (session.getAttribute("user") != null) { %>
-
+
<% } else { %>
-
+
<% } %>
diff --git a/S2/DevWeb/Projet/src/main/webapp/static/js/Message.js b/S2/DevWeb/Projet/src/main/webapp/static/js/Message.js
new file mode 100644
index 0000000..805fe18
--- /dev/null
+++ b/S2/DevWeb/Projet/src/main/webapp/static/js/Message.js
@@ -0,0 +1,13 @@
+export default class Message {
+ constructor(rawMessage) {
+ // Parse the message
+ const message = JSON.parse(rawMessage);
+ message.data = JSON.parse(message.data);
+
+ console.log(message);
+
+ // Set the message properties
+ this.type = message.type;
+ this.data = message.data;
+ }
+}
diff --git a/S2/DevWeb/Projet/src/main/webapp/static/js/WebsocketToolkit.js b/S2/DevWeb/Projet/src/main/webapp/static/js/WebsocketToolkit.js
new file mode 100644
index 0000000..fc57175
--- /dev/null
+++ b/S2/DevWeb/Projet/src/main/webapp/static/js/WebsocketToolkit.js
@@ -0,0 +1,31 @@
+import Message from "./Message.js";
+
+export default class WebsocketToolkit {
+
+ action = {}
+
+ constructor(url) {
+ this.url = url;
+ this.ws = new WebSocket(url);
+ }
+
+ onOpen(callback) {
+ this.ws.onopen = callback;
+ }
+
+ onMessage(type, callback) {
+ this.action[type] = callback;
+ this.ws.onmessage = (event) => {
+ const message = new Message(event.data);
+ this.action[message.type](message.data)
+ };
+ }
+
+ onClose(callback) {
+ this.ws.onclose = callback;
+ }
+
+ onError(callback) {
+ this.ws.onerror = callback;
+ }
+}
\ No newline at end of file
diff --git a/S2/DevWeb/Projet/src/main/webapp/static/js/new-game.js b/S2/DevWeb/Projet/src/main/webapp/static/js/new-game.js
deleted file mode 100644
index 25e1bbb..0000000
--- a/S2/DevWeb/Projet/src/main/webapp/static/js/new-game.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const nbColorsElement = document.getElementById("nbColors");
-const nbValuesElement = document.getElementById("nbValues");
-const nbRoundsElement = document.getElementById("nbRounds")
-
-/**
- * Mise à jour du nombre de rounds max en fonction du nombre de couleurs et de valeurs séléctionnés
- */
-function updateOnChange() {
- nbRoundsElement.max = nbColorsElement.value * nbValuesElement.value;
-
- nbRoundsElement.value =
- (nbRoundsElement.value > nbRoundsElement.max)
- ? nbRoundsElement.max
- : nbRoundsElement.value
- ;
-}
-
-nbColorsElement.addEventListener("change", updateOnChange);
-nbValuesElement.addEventListener("change", updateOnChange);