From e7376d91a575a6033496ea70dedf3874168ac271 Mon Sep 17 00:00:00 2001 From: Ban-gilhyeon Date: Mon, 13 Jan 2025 00:12:13 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle b/build.gradle index 2e6ad05..1967b64 100644 --- a/build.gradle +++ b/build.gradle @@ -27,10 +27,14 @@ dependencyManagement { } } dependencies { + //Spring testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.security:spring-security-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + //Security + //implementation 'org.springframework.boot:spring-boot-starter-security' // spring cloud implementation 'org.springframework.cloud:spring-cloud-starter-gateway' From 19aafd3a8e8c2805da3a9bdeef19f8402db9ba89 Mon Sep 17 00:00:00 2001 From: Ban-gilhyeon Date: Mon, 27 Jan 2025 21:45:47 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Feature(#1)=20:=20=EC=9B=B9=EC=86=8C?= =?UTF-8?q?=EC=BC=93=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 +- .../config/GatewayConfig.java | 25 ++++++++ .../config/WebSocketConfig.java | 24 ++++++++ .../controller/WebSocketController.java | 58 +++++++++++++++++++ .../dto/MessageInfo.java | 8 +++ .../game/dto/GameServiceFeignClient.java | 4 ++ .../NotificationServiceFeignClient.java | 11 ++++ 7 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 src/main/java/io/urdego/urdego_gateway_service/config/GatewayConfig.java create mode 100644 src/main/java/io/urdego/urdego_gateway_service/config/WebSocketConfig.java create mode 100644 src/main/java/io/urdego/urdego_gateway_service/controller/WebSocketController.java create mode 100644 src/main/java/io/urdego/urdego_gateway_service/dto/MessageInfo.java create mode 100644 src/main/java/io/urdego/urdego_gateway_service/feign/game/dto/GameServiceFeignClient.java create mode 100644 src/main/java/io/urdego/urdego_gateway_service/feign/notification/NotificationServiceFeignClient.java diff --git a/build.gradle b/build.gradle index 1967b64..2f608df 100644 --- a/build.gradle +++ b/build.gradle @@ -27,14 +27,13 @@ dependencyManagement { } } dependencies { - //Spring testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - //Security - //implementation 'org.springframework.boot:spring-boot-starter-security' + //WebSocket + implementation 'org.springframework.boot:spring-boot-starter-websocket' // spring cloud implementation 'org.springframework.cloud:spring-cloud-starter-gateway' diff --git a/src/main/java/io/urdego/urdego_gateway_service/config/GatewayConfig.java b/src/main/java/io/urdego/urdego_gateway_service/config/GatewayConfig.java new file mode 100644 index 0000000..4719024 --- /dev/null +++ b/src/main/java/io/urdego/urdego_gateway_service/config/GatewayConfig.java @@ -0,0 +1,25 @@ +package io.urdego.urdego_gateway_service.config; + +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class GatewayConfig { + + @Bean + public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { + return builder.routes() + // 알림 서비스로 라우팅 + .route("notification-websocket-route", r -> r.path("/ws/notifications/**") + .uri("ws://notification-service:8081")) // 알림 서비스 URI + + // 게임 서비스로 라우팅 + .route("game-websocket-route", r -> r.path("/ws/games/**") + .uri("ws://game-service:8082")) // 게임 서비스 URI + + // 기타 WebSocket 요청 처리 (필요하면 추가) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/io/urdego/urdego_gateway_service/config/WebSocketConfig.java b/src/main/java/io/urdego/urdego_gateway_service/config/WebSocketConfig.java new file mode 100644 index 0000000..b6e029f --- /dev/null +++ b/src/main/java/io/urdego/urdego_gateway_service/config/WebSocketConfig.java @@ -0,0 +1,24 @@ +package io.urdego.urdego_gateway_service.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + registry.enableSimpleBroker("/urdego/sub"); + registry.setApplicationDestinationPrefixes("/urdego/pub"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/urdego/connect") + .setAllowedOrigins("*"); + } +} diff --git a/src/main/java/io/urdego/urdego_gateway_service/controller/WebSocketController.java b/src/main/java/io/urdego/urdego_gateway_service/controller/WebSocketController.java new file mode 100644 index 0000000..bb623b4 --- /dev/null +++ b/src/main/java/io/urdego/urdego_gateway_service/controller/WebSocketController.java @@ -0,0 +1,58 @@ +package io.urdego.urdego_gateway_service.controller; + +import io.urdego.urdego_gateway_service.dto.MessageInfo; +import io.urdego.urdego_gateway_service.feign.game.dto.GameServiceFeignClient; +import io.urdego.urdego_gateway_service.feign.notification.NotificationServiceFeignClient; +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.handler.annotation.DestinationVariable; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Controller; + +@Controller +@RequiredArgsConstructor +public class WebSocketController { + + private final NotificationServiceFeignClient notificationServiceFeignClient; + private final GameServiceFeignClient gameServiceFeignClient; + private final SimpMessagingTemplate messagingTemplate; + + @MessageMapping("/message") + @SendTo("/urdego/sub") + public void handleMessage(MessageInfo message) { + switch (message.type()) { + case "알림 전송 요청": + // 알림 서비스로 메시지 전달 각각 UserId + notificationServiceFeignClient.sendNotification(message.payload()); + break; + + case "안읽은 알림 불러오기": + // 알림 서비스로 메시지 전달 + notificationServiceFeignClient.sendNotification(message.payload()); + break; + + case "JOIN_ROOM": + // 방에 넣어버리는 메서드 + gameServiceFeignClient.processGameEvent(message.payload()); + break; + case "START_GAME": + // 게임 생성 및 시작 메서드 + + break; +// case "CHAT": +// // 메시지를 직접 브로드캐스트 + // notificationServiceFeignClient.sendNotification(message.payload()); +// messagingTemplate.convertAndSend("/urdego/sub/" + message.payload().userId(), message); +// break; + default: + throw new IllegalArgumentException("Unsupported message type: " + message.type()); + } + } + + @MessageMapping("/message") + @SendTo("/urdego/sub/{userId}") + public void handleMessage2(MessageInfo message, @DestinationVariable String userId) { + + } +} diff --git a/src/main/java/io/urdego/urdego_gateway_service/dto/MessageInfo.java b/src/main/java/io/urdego/urdego_gateway_service/dto/MessageInfo.java new file mode 100644 index 0000000..f7821b1 --- /dev/null +++ b/src/main/java/io/urdego/urdego_gateway_service/dto/MessageInfo.java @@ -0,0 +1,8 @@ +package io.urdego.urdego_gateway_service.dto; + +public record MessageInfo( + String type, + T payload, + String userId +) { +} diff --git a/src/main/java/io/urdego/urdego_gateway_service/feign/game/dto/GameServiceFeignClient.java b/src/main/java/io/urdego/urdego_gateway_service/feign/game/dto/GameServiceFeignClient.java new file mode 100644 index 0000000..4ba3efa --- /dev/null +++ b/src/main/java/io/urdego/urdego_gateway_service/feign/game/dto/GameServiceFeignClient.java @@ -0,0 +1,4 @@ +package io.urdego.urdego_gateway_service.feign.game.dto; + +public interface GameServiceFeignClient { +} diff --git a/src/main/java/io/urdego/urdego_gateway_service/feign/notification/NotificationServiceFeignClient.java b/src/main/java/io/urdego/urdego_gateway_service/feign/notification/NotificationServiceFeignClient.java new file mode 100644 index 0000000..97ae095 --- /dev/null +++ b/src/main/java/io/urdego/urdego_gateway_service/feign/notification/NotificationServiceFeignClient.java @@ -0,0 +1,11 @@ +package io.urdego.urdego_gateway_service.feign.notification; + +public interface NotificationServiceFeignClient { + //Notification의 모든 API + + // 알림 전송 + + // 알림 확인 시 게임방으로 이동 + + +}