diff --git a/springChatRoom/pom.xml b/springChatRoom/pom.xml index 33c78d1c6..7d19061fd 100644 --- a/springChatRoom/pom.xml +++ b/springChatRoom/pom.xml @@ -57,6 +57,12 @@ test + + + org.projectlombok + lombok + + diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/model/ChatMessage.java b/springChatRoom/src/main/java/com/yen/springChatRoom/bean/ChatMessage.java similarity index 95% rename from springChatRoom/src/main/java/com/yen/springChatRoom/model/ChatMessage.java rename to springChatRoom/src/main/java/com/yen/springChatRoom/bean/ChatMessage.java index e792fd2cb..4271b2cfb 100644 --- a/springChatRoom/src/main/java/com/yen/springChatRoom/model/ChatMessage.java +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/bean/ChatMessage.java @@ -1,4 +1,4 @@ -package com.yen.springChatRoom.model; +package com.yen.springChatRoom.bean; public class ChatMessage { private MessageType type; diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/bean/Message.java b/springChatRoom/src/main/java/com/yen/springChatRoom/bean/Message.java new file mode 100644 index 000000000..88c40ec09 --- /dev/null +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/bean/Message.java @@ -0,0 +1,17 @@ +package com.yen.springChatRoom.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class Message { + + private String sender; + private String content; + private String type; +} diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/config/WebSocketConfig.java b/springChatRoom/src/main/java/com/yen/springChatRoom/config/WebSocketConfig.java index 5b156b685..6e3d7e487 100644 --- a/springChatRoom/src/main/java/com/yen/springChatRoom/config/WebSocketConfig.java +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/config/WebSocketConfig.java @@ -1,6 +1,8 @@ package com.yen.springChatRoom.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @@ -28,7 +30,16 @@ public void registerStompEndpoints(StompEndpointRegistry registry) { public void configureMessageBroker(MessageBrokerRegistry registry) { //WebSocketMessageBrokerConfigurer.super.configureMessageBroker(registry); - registry.setApplicationDestinationPrefixes("/app"); - registry.enableSimpleBroker("/topic"); + registry.setApplicationDestinationPrefixes("/app"); // (client -> server) + registry.enableSimpleBroker("/topic", "/private"); // (server -> client) } + + // +// @Bean +// public SimpMessagingTemplate messagingTemplate() { +// +// //return new SimpMessagingTemplate(/* your message broker relay, e.g., "/topic" */); +// return new SimpMessagingTemplate("/private/"); +// } + } diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/controller/ChatController.java b/springChatRoom/src/main/java/com/yen/springChatRoom/controller/ChatController.java index 27a94ffce..f8373f6c0 100644 --- a/springChatRoom/src/main/java/com/yen/springChatRoom/controller/ChatController.java +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/controller/ChatController.java @@ -1,20 +1,20 @@ package com.yen.springChatRoom.controller; -import com.yen.springChatRoom.model.ChatMessage; +import com.yen.springChatRoom.bean.Message; +import com.yen.springChatRoom.bean.ChatMessage; import com.yen.springChatRoom.util.JsonUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.messaging.handler.annotation.DestinationVariable; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.Payload; -import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Controller; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.GetMapping; - -import java.util.Set; +import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ChatController { @@ -35,6 +35,9 @@ public class ChatController { private RedisTemplate redisTemplate; //private RedisTemplate redisTemplate; + @Autowired + private SimpMessagingTemplate simpMessagingTemplate; + private static final Logger LOGGER = LoggerFactory.getLogger(ChatController.class); /** @@ -79,4 +82,11 @@ public void addUser(@Payload ChatMessage chatMessage, SimpMessageHeaderAccessor } } + // TODO : check @DestinationVariable ? + @RequestMapping("/private/{username}") + public void handlePrivateMessage(@DestinationVariable String username, Message message){ + + simpMessagingTemplate.convertAndSendToUser(username, "/topic/private", message); + } + } diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/listener/WebSocketEventListener.java b/springChatRoom/src/main/java/com/yen/springChatRoom/listener/WebSocketEventListener.java index 72b714d91..5c33d781d 100644 --- a/springChatRoom/src/main/java/com/yen/springChatRoom/listener/WebSocketEventListener.java +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/listener/WebSocketEventListener.java @@ -1,7 +1,7 @@ package com.yen.springChatRoom.listener; import com.yen.springChatRoom.controller.ChatController; -import com.yen.springChatRoom.model.ChatMessage; +import com.yen.springChatRoom.bean.ChatMessage; import com.yen.springChatRoom.util.JsonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/redis/RedisListenerHandle.java b/springChatRoom/src/main/java/com/yen/springChatRoom/redis/RedisListenerHandle.java index 266f8f5ae..eb46219dd 100644 --- a/springChatRoom/src/main/java/com/yen/springChatRoom/redis/RedisListenerHandle.java +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/redis/RedisListenerHandle.java @@ -1,6 +1,6 @@ package com.yen.springChatRoom.redis; -import com.yen.springChatRoom.model.ChatMessage; +import com.yen.springChatRoom.bean.ChatMessage; import com.yen.springChatRoom.service.ChatService; import com.yen.springChatRoom.util.JsonUtil; import org.slf4j.Logger; diff --git a/springChatRoom/src/main/java/com/yen/springChatRoom/service/ChatService.java b/springChatRoom/src/main/java/com/yen/springChatRoom/service/ChatService.java index 105f8a736..b692ed38d 100644 --- a/springChatRoom/src/main/java/com/yen/springChatRoom/service/ChatService.java +++ b/springChatRoom/src/main/java/com/yen/springChatRoom/service/ChatService.java @@ -1,13 +1,12 @@ package com.yen.springChatRoom.service; import com.yen.springChatRoom.controller.ChatController; -import com.yen.springChatRoom.model.ChatMessage; +import com.yen.springChatRoom.bean.ChatMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.simp.SimpMessageSendingOperations; -import org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler; import org.springframework.stereotype.Service; @Service diff --git a/springChatRoom/src/main/resources/static/js/main.js b/springChatRoom/src/main/resources/static/js/main.js index 7c00754fa..5a8f3ec1b 100644 --- a/springChatRoom/src/main/resources/static/js/main.js +++ b/springChatRoom/src/main/resources/static/js/main.js @@ -37,9 +37,13 @@ function connect(event) { function onConnected() { + // Subscribe to the Public Topic stompClient.subscribe('/topic/public', onMessageReceived); + // Subscribe to the "/private" destination // TODO : make it general + //stompClient.subscribe('/private/user123', onPrivateMessageReceived); + // Tell your username to the server stompClient.send("/app/chat.addUser", {},