|
|
@ -2,6 +2,7 @@ package org.ros.chatto.logged; |
|
|
|
|
|
|
|
import java.time.Instant; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Optional; |
|
|
|
|
|
|
|
import javax.servlet.http.HttpSessionBindingEvent; |
|
|
|
import javax.servlet.http.HttpSessionBindingListener; |
|
|
@ -11,6 +12,7 @@ import org.ros.chatto.model.ChatUser; |
|
|
|
import org.ros.chatto.model.UserSession; |
|
|
|
import org.ros.chatto.repository.UserSessionRepository; |
|
|
|
import org.ros.chatto.service.UserService; |
|
|
|
import org.springframework.security.core.userdetails.UsernameNotFoundException; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
import org.springframework.web.context.WebApplicationContext; |
|
|
|
import org.springframework.web.context.support.WebApplicationContextUtils; |
|
|
@ -47,25 +49,31 @@ public class LoggedUser implements HttpSessionBindingListener { |
|
|
|
} |
|
|
|
|
|
|
|
Instant instant = Instant.now(); |
|
|
|
boolean found = activeUsers.stream().anyMatch(au -> au.getUserName().equals(user.getUsername())); |
|
|
|
if (!found) { |
|
|
|
System.out.println("Test found "); |
|
|
|
ActiveUser activeUser = new ActiveUser(); |
|
|
|
activeUser.setUserName(user.getUsername()); |
|
|
|
activeUser.setLastActive(instant); |
|
|
|
activeUsers.add(activeUser); |
|
|
|
} |
|
|
|
// Optional<ActiveUser> activeUserOptional = activeUsers.stream() |
|
|
|
// .filter(au -> au.getUserName().equals(user.getUsername())) |
|
|
|
// .findFirst(); |
|
|
|
// ActiveUser activeUser2 = activeUserOptional.get(); |
|
|
|
// activeUser2.setNumSessions(activeUser2.getNumSessions() + 1); |
|
|
|
// boolean found = activeUsers.stream().anyMatch(au -> au.getUserName().equals(user.getUsername())); |
|
|
|
// if (!found) { |
|
|
|
// System.out.println("Test found "); |
|
|
|
// ActiveUser activeUser = new ActiveUser(); |
|
|
|
// activeUser.setUserName(user.getUsername()); |
|
|
|
//// activeUser.setLastActive(instant); |
|
|
|
// activeUsers.add(activeUser); |
|
|
|
// } |
|
|
|
ChatUser chatUser = userService.findByUserName(user.getUsername()); |
|
|
|
|
|
|
|
UserSession userSession = userSessionRepository.findByUserName(user.getUsername()); |
|
|
|
|
|
|
|
if(userSession == null) |
|
|
|
{ |
|
|
|
|
|
|
|
if (userSession == null) { |
|
|
|
userSession = new UserSession(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
userSession.setUser(chatUser); |
|
|
|
userSession.setTimeStamp(instant); |
|
|
|
userSession.setOnline(true); |
|
|
|
userSession.setNumSessions(userSession.getNumSessions() + 1); |
|
|
|
userSessionRepository.save(userSession); |
|
|
|
} |
|
|
|
|
|
|
@ -74,12 +82,46 @@ public class LoggedUser implements HttpSessionBindingListener { |
|
|
|
List<String> users = activeUserStore.getUsers(); |
|
|
|
LoggedUser user = (LoggedUser) event.getValue(); |
|
|
|
List<ActiveUser> activeUsers = activeUserStore.getActiveUsers(); |
|
|
|
|
|
|
|
UserService userService = getUserService(event); |
|
|
|
UserSessionRepository userSessionRepository = getUserSessionRepository(event); |
|
|
|
Instant instant = Instant.now(); |
|
|
|
|
|
|
|
if (users.contains(user.getUsername())) { |
|
|
|
users.remove(user.getUsername()); |
|
|
|
} |
|
|
|
|
|
|
|
activeUsers.removeIf(au -> au.getUserName().equals(user.getUsername())); |
|
|
|
activeUsers.removeIf(au -> { |
|
|
|
int numSessions = au.getNumSessions(); |
|
|
|
if (au.getUserName().equals(user.getUsername()) && --numSessions == 0) { |
|
|
|
au.setNumSessions(numSessions); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
ChatUser chatUser = userService.findByUserName(user.getUsername()); |
|
|
|
|
|
|
|
UserSession userSession = userSessionRepository.findByUserName(user.getUsername()); |
|
|
|
|
|
|
|
if (userSession == null) { |
|
|
|
// userSession = new UserSession(); |
|
|
|
throw new UsernameNotFoundException("User session not found"); |
|
|
|
} |
|
|
|
|
|
|
|
int numSessions = userSession.getNumSessions(); |
|
|
|
|
|
|
|
if(--numSessions == 0) |
|
|
|
{ |
|
|
|
userSession.setOnline(false); |
|
|
|
} |
|
|
|
|
|
|
|
userSession.setUser(chatUser); |
|
|
|
userSession.setTimeStamp(instant); |
|
|
|
userSession.setNumSessions(numSessions); |
|
|
|
userSessionRepository.save(userSession); |
|
|
|
} |
|
|
|
|
|
|
|
private UserService getUserService(HttpSessionEvent se) { |
|
|
|