mirror of
https://github.com/kmitresse/Cards-Rush.git
synced 2026-07-09 21:37:46 +00:00
feat(DevWeb): Add WebSocket in MainMenu to display user list dynamically
This commit is contained in:
@@ -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 + '}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,7 +49,6 @@ public class MainMenuServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
for(HttpSession session : loginsSessions) {
|
for(HttpSession session : loginsSessions) {
|
||||||
User connectedUser = (User) session.getAttribute("user");
|
User connectedUser = (User) session.getAttribute("user");
|
||||||
System.out.println(connectedUser.toString());
|
|
||||||
if(session.getServletContext().getContextPath().equals(request.getServletContext().getContextPath()) && connectedUser != null && !connectedUser.equals(sessionUser)) {
|
if(session.getServletContext().getContextPath().equals(request.getServletContext().getContextPath()) && connectedUser != null && !connectedUser.equals(sessionUser)) {
|
||||||
connectedUsers.add(connectedUser);
|
connectedUsers.add(connectedUser);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,14 +6,12 @@
|
|||||||
|
|
||||||
package uppa.project.servlet;
|
package uppa.project.servlet;
|
||||||
|
|
||||||
import jakarta.persistence.EntityManager;
|
|
||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
import jakarta.servlet.annotation.WebServlet;
|
import jakarta.servlet.annotation.WebServlet;
|
||||||
import jakarta.servlet.http.HttpServlet;
|
import jakarta.servlet.http.HttpServlet;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import uppa.project.provider.EntityManagerProvider;
|
|
||||||
|
|
||||||
@WebServlet(name = "registerServlet", value = "/register")
|
@WebServlet(name = "registerServlet", value = "/register")
|
||||||
public class RegisterServlet extends HttpServlet {
|
public class RegisterServlet extends HttpServlet {
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import java.io.PrintWriter;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Locale;
|
|
||||||
import uppa.project.dao.DAO;
|
import uppa.project.dao.DAO;
|
||||||
import uppa.project.dao.DAOException;
|
import uppa.project.dao.DAOException;
|
||||||
import uppa.project.pojo.User;
|
import uppa.project.pojo.User;
|
||||||
|
|||||||
@@ -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<Session, User> 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
<script src="${pageContext.request.contextPath}/static/js/modal.js" defer></script>
|
<script src="${pageContext.request.contextPath}/static/js/modal.js" defer></script>
|
||||||
<script src="${pageContext.request.contextPath}/static/js/new-game.js" defer></script>
|
<script src="${pageContext.request.contextPath}/static/js/new-game.js" defer></script>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<script defer src="${pageContext.request.contextPath}/static/js/main-menu.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%@include file="../components/navbar.jsp"%>
|
<%@include file="../components/navbar.jsp"%>
|
||||||
|
|||||||
@@ -10,14 +10,9 @@ loginForm.addEventListener("submit", (event) => {
|
|||||||
fetch(loginForm.getAttribute("action"), {
|
fetch(loginForm.getAttribute("action"), {
|
||||||
headers: {"Content-Type": "application/json"}, body: JSON.stringify(data), method: loginForm.getAttribute("method"),
|
headers: {"Content-Type": "application/json"}, body: JSON.stringify(data), method: loginForm.getAttribute("method"),
|
||||||
})
|
})
|
||||||
.then(res => {
|
.then(res => res.json())
|
||||||
if (res.ok) {
|
.then(user => sessionStorage.setItem("user", JSON.stringify(user)))
|
||||||
window.location.href = "./main-menu";
|
.then(() => window.location.href = "./main-menu")
|
||||||
}
|
|
||||||
else {
|
|
||||||
// TODO Display red inputs
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => console.error("Error:", error));
|
.catch(error => console.error("Error:", error));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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) => {}
|
||||||
Reference in New Issue
Block a user