From 17689c49b3aeb3e7bbd5d5d86509650854f08789 Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Thu, 26 Aug 2021 10:27:13 +0600 Subject: [PATCH 1/2] BAEL-5084 raw-websocket testing for postman created --- .../raw_websocket/ServerWebSocketConfig.java | 23 ++++++ .../raw_websocket/ServerWebSocketHandler.java | 72 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java create mode 100644 spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java diff --git a/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java b/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java new file mode 100644 index 0000000000..0723b65eba --- /dev/null +++ b/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java @@ -0,0 +1,23 @@ +package com.baeldung.raw_websocket; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; + +@Configuration +@EnableWebSocket +public class ServerWebSocketConfig implements WebSocketConfigurer { + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(webSocketHandler(), "/websocket"); + } + + @Bean + public WebSocketHandler webSocketHandler() { + return new ServerWebSocketHandler(); + } +} diff --git a/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java b/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java new file mode 100644 index 0000000000..e2a2f18276 --- /dev/null +++ b/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java @@ -0,0 +1,72 @@ +package com.baeldung.raw_websocket; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.SubProtocolCapable; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.springframework.web.util.HtmlUtils; + +import java.io.IOException; +import java.time.LocalTime; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; + +public class ServerWebSocketHandler extends TextWebSocketHandler implements SubProtocolCapable { + + private static final Logger logger = LoggerFactory.getLogger(ServerWebSocketHandler.class); + + private final Set sessions = new CopyOnWriteArraySet<>(); + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + logger.info("Server connection opened"); + sessions.add(session); + + TextMessage message = new TextMessage("one-time message from server"); + logger.info("Server sends: {}", message); + session.sendMessage(message); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { + logger.info("Server connection closed: {}", status); + sessions.remove(session); + } + + @Scheduled(fixedRate = 10000) + void sendPeriodicMessages() throws IOException { + for (WebSocketSession session : sessions) { + if (session.isOpen()) { + String broadcast = "server periodic message " + LocalTime.now(); + logger.info("Server sends: {}", broadcast); + session.sendMessage(new TextMessage(broadcast)); + } + } + } + + @Override + public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + String request = message.getPayload(); + logger.info("Server received: {}", request); + + String response = String.format("response from server to '%s'", HtmlUtils.htmlEscape(request)); + logger.info("Server sends: {}", response); + session.sendMessage(new TextMessage(response)); + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) { + logger.info("Server transport error: {}", exception.getMessage()); + } + + @Override + public List getSubProtocols() { + return Collections.singletonList("subprotocol.demo.websocket"); + } +} From 004e629e5da8c0273a7f07578eb772933a12810e Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Wed, 1 Sep 2021 07:41:42 +0600 Subject: [PATCH 2/2] BAEL-5084 package name updated --- .../{raw_websocket => rawwebsocket}/ServerWebSocketConfig.java | 2 +- .../{raw_websocket => rawwebsocket}/ServerWebSocketHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename spring-websockets/src/main/java/com/baeldung/{raw_websocket => rawwebsocket}/ServerWebSocketConfig.java (95%) rename spring-websockets/src/main/java/com/baeldung/{raw_websocket => rawwebsocket}/ServerWebSocketHandler.java (98%) diff --git a/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketConfig.java similarity index 95% rename from spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java rename to spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketConfig.java index 0723b65eba..5218140d2c 100644 --- a/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketConfig.java +++ b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketConfig.java @@ -1,4 +1,4 @@ -package com.baeldung.raw_websocket; +package com.baeldung.rawwebsocket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketHandler.java similarity index 98% rename from spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java rename to spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketHandler.java index e2a2f18276..ed1ac8edc3 100644 --- a/spring-websockets/src/main/java/com/baeldung/raw_websocket/ServerWebSocketHandler.java +++ b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketHandler.java @@ -1,4 +1,4 @@ -package com.baeldung.raw_websocket; +package com.baeldung.rawwebsocket; import org.slf4j.Logger; import org.slf4j.LoggerFactory;