Skip to content

Commit 1bcab38

Browse files
authored
Merge pull request #3 from Magmusacy/messages
Add live displaying of logged in users
2 parents ebe6235 + 2963a27 commit 1bcab38

7 files changed

Lines changed: 54 additions & 23 deletions

File tree

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/auth/AuthService.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ public class AuthService {
2323
private final JwtService jwtService;
2424
private final AuthenticationManager authenticationManager;
2525
private final PasswordEncoder passwordEncoder;
26-
private final SimpMessagingTemplate messagingTemplate;
2726

2827
public AuthenticationResponse register(RegisterRequest request) {
2928
User user = userService.createUser(request, passwordEncoder);
3029
String jwtToken = jwtService.generateToken(user);
31-
messagingTemplate.convertAndSend("/topic/users", userService.findAllUsers());
3230
return new AuthenticationResponse((jwtToken));
3331
}
3432

@@ -38,9 +36,7 @@ public AuthenticationResponse login(LoginRequest request) {
3836
);
3937

4038
User user = userService.findByEmail(request.email());
41-
user.setIsOnline(true);
4239
String jwtToken = jwtService.generateToken(user);
43-
messagingTemplate.convertAndSend("/topic/users", userService.findAllUsers());
4440
return new AuthenticationResponse((jwtToken));
4541
}
4642
}

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/config/JwtInterceptor.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ public Message<?> preSend(Message<?> message, MessageChannel channel) {
4242
userDetails, null, userDetails.getAuthorities()
4343
);
4444

45-
User user = userService.findByEmail(username);
46-
userService.handleUserLogin(user);
47-
4845
// This could be authToken.getPrincipal() ???
4946
accessor.setUser(authToken);
5047
}
@@ -54,14 +51,6 @@ public Message<?> preSend(Message<?> message, MessageChannel channel) {
5451
}
5552
}
5653

57-
if (StompCommand.DISCONNECT.equals(accessor.getCommand())) {
58-
Principal potentialUser = accessor.getUser();
59-
if (potentialUser != null) {
60-
User user = userService.findByEmail(potentialUser.getName());
61-
userService.handleUserLogout(user);
62-
}
63-
}
64-
6554
return message;
6655
}
6756
}

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/config/WebSocketConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
2424

2525
@Override
2626
public void configureMessageBroker(MessageBrokerRegistry config) {
27-
config.enableSimpleBroker("/user", "/topic");
27+
config.enableSimpleBroker("/queue", "/topic");
2828
config.setApplicationDestinationPrefixes("/app");
2929
config.setUserDestinationPrefix("/user");
3030
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.magmusacy.chat.chatapp.config;
2+
3+
import com.magmusacy.chat.chatapp.user.User;
4+
import com.magmusacy.chat.chatapp.user.UserDTO;
5+
import com.magmusacy.chat.chatapp.user.UserService;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.context.event.EventListener;
8+
import org.springframework.messaging.simp.SimpMessagingTemplate;
9+
import org.springframework.stereotype.Component;
10+
import org.springframework.web.socket.messaging.SessionConnectEvent;
11+
import org.springframework.web.socket.messaging.SessionDisconnectEvent;
12+
import org.springframework.web.socket.messaging.SessionSubscribeEvent;
13+
14+
import java.util.List;
15+
16+
@Component
17+
@RequiredArgsConstructor
18+
public class WebSocketEventListener {
19+
private final UserService userService;
20+
private final SimpMessagingTemplate messagingTemplate;
21+
22+
@EventListener
23+
public void handleWebSocketConnectListener(SessionConnectEvent event) {
24+
System.out.println(event);
25+
String email = event.getUser().getName();
26+
User user = userService.findByEmail(email);
27+
userService.handleUserLogin(user);
28+
List<UserDTO> users = userService.findAllUsers();
29+
messagingTemplate.convertAndSend("/topic/users", users);
30+
}
31+
32+
@EventListener
33+
public void handleWebSocketDisconnectListener(SessionDisconnectEvent event) {
34+
System.out.println(event);
35+
String email = event.getUser().getName();
36+
User user = userService.findByEmail(email);
37+
userService.handleUserLogout(user);
38+
List<UserDTO> users = userService.findAllUsers();
39+
messagingTemplate.convertAndSend("/topic/users", users);
40+
}
41+
42+
@EventListener
43+
public void handleWebSocketSubscribeListener(SessionSubscribeEvent event) {
44+
String destination = (String) event.getMessage().getHeaders().get("simpDestination");
45+
if (destination != null && destination.startsWith("/user/queue/users")) {
46+
List<UserDTO> users = userService.findAllUsers();
47+
if (event.getUser() == null) return;
48+
messagingTemplate.convertAndSendToUser(event.getUser().getName(), "/queue/users", users);
49+
}
50+
}
51+
}

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/user/User.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class User implements UserDetails {
2626
private String email;
2727
private String name;
2828
private String password;
29-
private Boolean isOnline;
29+
private Boolean isOnline = false;
3030
private LocalDateTime lastSeen;
3131

3232
@Transient

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/user/UserController.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,9 @@
33
import lombok.RequiredArgsConstructor;
44
import org.springframework.boot.autoconfigure.web.ServerProperties;
55
import org.springframework.http.ResponseEntity;
6-
import org.springframework.messaging.handler.annotation.MessageMapping;
7-
import org.springframework.messaging.handler.annotation.Payload;
8-
import org.springframework.messaging.handler.annotation.SendTo;
96
import org.springframework.stereotype.Controller;
107
import org.springframework.web.bind.annotation.GetMapping;
118

12-
import java.util.List;
13-
149
@Controller
1510
@RequiredArgsConstructor
1611
public class UserController {

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/user/UserService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.magmusacy.chat.chatapp.auth.dto.RegisterRequest;
44
import lombok.RequiredArgsConstructor;
5+
import org.springframework.messaging.simp.SimpMessagingTemplate;
56
import org.springframework.security.core.context.SecurityContextHolder;
67
import org.springframework.security.core.userdetails.UserDetails;
78
import org.springframework.security.core.userdetails.UserDetailsService;
@@ -16,7 +17,6 @@
1617
@Service
1718
@RequiredArgsConstructor
1819
public class UserService implements UserDetailsService {
19-
2020
private final UserRepository userRepository;
2121

2222
public User createUser(RegisterRequest request, PasswordEncoder passwordEncoder) {

0 commit comments

Comments
 (0)