From 66a1799ff8a8f7490eb8602ba9cfc7c900c55f38 Mon Sep 17 00:00:00 2001 From: MathewFrancis Date: Mon, 18 Aug 2025 16:12:11 +0530 Subject: [PATCH] New message endpoint chat --- .../cezenBTC/DTO/race_card/StopBets.java | 4 ++++ .../config/CezenRoutsSecurityChain.java | 3 ++- .../cezenBTC/config/CezenWebSocketConfig.java | 3 ++- .../example/cezenBTC/controller/TestApi.java | 15 +++++++++---- .../WebSocketLoggingController.java | 21 +++++++++++++++++++ .../cezenBTC/service/BtcWebSocketService.java | 8 +++++++ 6 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 springHorse/src/main/java/com/example/cezenBTC/DTO/race_card/StopBets.java create mode 100644 springHorse/src/main/java/com/example/cezenBTC/controller/WebSocketLoggingController.java diff --git a/springHorse/src/main/java/com/example/cezenBTC/DTO/race_card/StopBets.java b/springHorse/src/main/java/com/example/cezenBTC/DTO/race_card/StopBets.java new file mode 100644 index 0000000..41ec748 --- /dev/null +++ b/springHorse/src/main/java/com/example/cezenBTC/DTO/race_card/StopBets.java @@ -0,0 +1,4 @@ +package com.example.cezenBTC.DTO.race_card; + +public record StopBets(boolean status, int raceNumber) { +} diff --git a/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java b/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java index a86e877..9b44922 100755 --- a/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java +++ b/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java @@ -112,7 +112,8 @@ public class CezenRoutsSecurityChain { "/cezen/set_aors", "/cezen/set_password", "/cezen/add_extension", - "/test/crash" + "/test/crash", + "/test/stop-bets" ).hasAnyRole("admin") //any one who is authenticated can access /logout .requestMatchers("/user/getXSRfToken","/user/ping", "/logout").authenticated() diff --git a/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java b/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java index 98fd464..6b94719 100644 --- a/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java +++ b/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java @@ -13,14 +13,15 @@ public class CezenWebSocketConfig implements WebSocketMessageBrokerConfigurer{ @Override public void configureMessageBroker(MessageBrokerRegistry config) { + config.enableSimpleBroker("/topic"); // Enables a simple memory-based message broker to carry messages back to the client on destinations prefixed with /topic config.setApplicationDestinationPrefixes("/app"); // Prefix for messages from client to backend } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/websocket").setAllowedOrigins("*"); // Native WebSocket + registry.addEndpoint("/websocket").setAllowedOrigins("*"); // Native WebSocket registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS(); // Registers "/websocket" endpoint and enables SockJS fallback } diff --git a/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java b/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java index 0f50846..1962658 100644 --- a/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java +++ b/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java @@ -2,9 +2,7 @@ package com.example.cezenBTC.controller; import com.example.cezenBTC.service.BtcWebSocketService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/test") @@ -14,10 +12,19 @@ public class TestApi { BtcWebSocketService btcWebSocketService; @GetMapping("/crash") - String breakConnection(){ + public String breakConnection(){ btcWebSocketService.sendServerDownNotification(); return "Backend error"; } + + // Stop bets for a particular race + @GetMapping("/stop-bets") + public String stopBets(@RequestParam int raceNumber) { + + btcWebSocketService.sendStatusMessage(raceNumber); + return "Bets stopped for race " + raceNumber; + } + } diff --git a/springHorse/src/main/java/com/example/cezenBTC/controller/WebSocketLoggingController.java b/springHorse/src/main/java/com/example/cezenBTC/controller/WebSocketLoggingController.java new file mode 100644 index 0000000..9a98d84 --- /dev/null +++ b/springHorse/src/main/java/com/example/cezenBTC/controller/WebSocketLoggingController.java @@ -0,0 +1,21 @@ +package com.example.cezenBTC.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Controller; + + +@Controller +public class WebSocketLoggingController { + + private static final Logger logger = LoggerFactory.getLogger(WebSocketLoggingController.class); + + // Listen for messages sent to destination /app/log (based on your config) + @MessageMapping("/log") + public void logIncomingMessage(@Payload String message) { + logger.info("Received WebSocket message: {}", message); + // You can add more processing here if needed + } +} \ No newline at end of file diff --git a/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java b/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java index 39a5ef5..42511c3 100644 --- a/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java +++ b/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java @@ -1,5 +1,6 @@ package com.example.cezenBTC.service; +import com.example.cezenBTC.DTO.race_card.StopBets; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; @@ -10,6 +11,13 @@ public class BtcWebSocketService { @Autowired private SimpMessagingTemplate template; + // Sends a structured status message object on /topic/status + public void sendStatusMessage(final int raceNumber) { + StopBets statusMessage = new StopBets(true, raceNumber); + template.convertAndSend("/topic/status", statusMessage); + } + + public void sendServerDownNotification() { template.convertAndSend("/topic/server-status", "DOWN"); }