feat: dev-web - add listener to stock all connected users

This commit is contained in:
kmitresse
2024-04-03 07:50:27 +02:00
parent fac6f87c66
commit 79cbad9d80
6 changed files with 48 additions and 45 deletions
@@ -0,0 +1,27 @@
package uppa.project.listener;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.http.HttpSession;
import java.util.HashSet;
import java.util.Set;
public class SessionServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event){
Set<HttpSession> logins = new HashSet<HttpSession>();
event.getServletContext().setAttribute("loginSession", logins);
}
public static void addSession(HttpSession session){
Set<HttpSession> logins = (Set<HttpSession>) session.getServletContext().getAttribute("loginSession");
logins.add(session);
}
public static void removeSession(HttpSession session){
Set<HttpSession> logins = (Set<HttpSession>) session.getServletContext().getAttribute("loginSession");
logins.remove(session);
}
public void contextDestroyed(ServletContextEvent event){}
}
@@ -31,4 +31,4 @@ public class LoginServlet extends HttpServlet {
public void destroy() {
}
}
}
@@ -11,9 +11,11 @@ import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import uppa.project.pojo.Game;
import uppa.project.pojo.Player;
import uppa.project.pojo.User;
@@ -32,23 +34,26 @@ public class MainMenuServlet extends HttpServlet {
}
manageNewGame(request, response, user);
manageStatistiques(request, response, user);
response.sendRedirect(request.getContextPath() + "/main-menu");
request.getRequestDispatcher("/WEB-INF/views/main-menu.jsp").forward(request, response);
}
public void destroy() {
}
private void manageMainMenu(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
}
private void manageNewGame(HttpServletRequest request, HttpServletResponse response, User sessionUser) throws IOException, ServletException {
List<User> connectedUsers = new ArrayList<User>();
/*TODO: récuperer la liste des joueurs connectés
penser à retirer l'utilisateur principal de la liste*/
Set<HttpSession> loginsSessions = (Set<HttpSession>) request.getServletContext().getAttribute("loginSession");
if (loginsSessions == null) {
throw new RuntimeException("No login sessions found");
}
for(HttpSession session : loginsSessions) {
User connectedUser = (User) session.getAttribute("user");
if(session.getServletContext().getContextPath().equals(request.getServletContext().getContextPath()) && connectedUser != null && !connectedUser.equals(sessionUser)) {
connectedUsers.add(connectedUser);
}
}
connectedUsers.remove(sessionUser);
request.setAttribute("connectedUsers", connectedUsers);
request.getRequestDispatcher("/WEB-INF/views/new-game.jsp").forward(request, response);
}
private void manageStatistiques(HttpServletRequest request, HttpServletResponse response, User sessionUser) throws IOException, ServletException {
@@ -1,33 +0,0 @@
/*
* NewGameServlet.java, 20/03/2024
* UPPA M1 TI 2023-2024
* Pas de copyright, aucun droits
*/
package uppa.project.servlet;
import jakarta.servlet.ServletContext;
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 jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import uppa.project.pojo.User;
@WebServlet(name = "newGameServlet", value = "/new-game")
public class NewGameServlet extends HttpServlet {
public void init() {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
}
public void destroy() {
}
}
@@ -56,7 +56,6 @@ public class AuthLoginServlet extends HttpServlet {
JsonElement password = jsonBody.get("password");
if (username == null || password == null) {
int STATUS = 400;
ErrorResponse error = new ErrorResponse(STATUS, "Bad Request", "Username and password are required");
response.setStatus(STATUS);
out.println(gson.toJson(error));
@@ -101,4 +100,4 @@ public class AuthLoginServlet extends HttpServlet {
public void destroy() {
}
}
}
@@ -3,4 +3,9 @@
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
</web-app>
<listener>
<listener-class>
uppa.project.listener.SessionServletContextListener
</listener-class>
</listener>
</web-app>