Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] refactor: kurento, turn 세팅 및 media, signaling server 구현 완료 #103

Merged
merged 102 commits into from
Mar 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
4605fee
[BE] refactor: media 서버 로그 출력 추가 (#98)
bianbbc87 Mar 1, 2025
bb1bba4
[BE] refactor: cors 설정 수정 (#98)
bianbbc87 Mar 4, 2025
1b652cc
[BE] refactor: websocket 수신 데이터 id -> type으로 네이밍 변경 (#98)
bianbbc87 Mar 1, 2025
fdbdb31
[BE] refactor: cors config 변경 (#98)
bianbbc87 Mar 1, 2025
307f7da
[BE] refactor: websocket jwt interpretor 추가 (#98)
bianbbc87 Mar 1, 2025
ab6c348
[BE] refactor: 화상 공유 상태 변경 함수 추가 (#98)
bianbbc87 Mar 1, 2025
09efa45
[BE] refactor: websocket before handshake 제거 (#98)
bianbbc87 Mar 1, 2025
22439b6
[BE] refactor: audio. media, data 상태 변경 변수 이름 통일 (#98)
bianbbc87 Mar 1, 2025
0c5a190
[BE] refactor: room id 필드 조건 추가 (#98)
bianbbc87 Mar 1, 2025
a68056a
[BE] refactor: room id 데이터 접근 수식 변경 (#98)
bianbbc87 Mar 1, 2025
722bcd3
[BE] refactor: socket start 시 유저 정보도 함께 전송으로 변경 (#98)
bianbbc87 Mar 1, 2025
cb6575b
[BE] refactor: handle start를 handle join으로 변경 (#98)
bianbbc87 Mar 1, 2025
1e45595
[BE] refactor: userId -> user_id로 변경 (#98)
bianbbc87 Mar 1, 2025
9541d05
[BE] refactor: offer Sdp, candidate 데이터 수집 방식 변경 (#98)
bianbbc87 Mar 1, 2025
55f0d63
[BE] refactor: member profile get base url 변경 (#98)
bianbbc87 Mar 1, 2025
4fb51c6
[BE] refactor: member profile url config로 설정 (#98)
bianbbc87 Mar 1, 2025
a3f0a82
[BE] refactor: member profile get room/profile에 jwt 검증 제거 (#98)
bianbbc87 Mar 1, 2025
ac4774c
[BE] refactor: sdp offer, answer를 유저별로 반환 (#98)
bianbbc87 Mar 1, 2025
6fa823a
[BE] refactor: user server test (#98)
bianbbc87 Mar 1, 2025
4413051
[BE] refactor: room/profile을 no need url에 추가 (#98)
bianbbc87 Mar 1, 2025
517f08f
[BE] refactor: member repository final 정의로 변경 (#98)
bianbbc87 Mar 1, 2025
a0ac33f
[BE] refactor: rest tamplate -> webflux로 변경 (#98)
bianbbc87 Mar 1, 2025
8f46599
[BE] refactor: webclient util을 bean에 추가 (#98)
bianbbc87 Mar 1, 2025
6e9fb2e
[BE] refactor: webclient response type을 generic에서 parameterized type으…
bianbbc87 Mar 1, 2025
7cb44bf
[BE] refactor: offer method 변경 (#98)
bianbbc87 Mar 2, 2025
9c1a7d7
[BE] refactor: 데이터 확인용 console 추가 (#98)
bianbbc87 Mar 2, 2025
02be5f1
[BE] refactor: sdp offer null 처리 (#98)
bianbbc87 Mar 2, 2025
4368bc3
[BE] refactor: sdp offer null 처리 (#98)
bianbbc87 Mar 2, 2025
e526078
[BE] refactor: null point exception 제거 (#98)
bianbbc87 Mar 2, 2025
c25ce61
[BE] refactor: enpoint 중복 생성 이슈 해결 (#98)
bianbbc87 Mar 2, 2025
6558547
[BE] refactor: enpoint에 candidate 추가 로직 변경 (#98)
bianbbc87 Mar 2, 2025
8fd7bf5
[BE] refactor: join 했을 때 pipeline 생성, endpoint 생성 통합 (#98)
bianbbc87 Mar 2, 2025
3b1fdea
[BE] refactor: sdp offer 중복 처리 로직 추가 (#98)
bianbbc87 Mar 2, 2025
b249f0f
[BE] refactor: member.getId가 null인 이유 파악 (#98)
bianbbc87 Mar 2, 2025
c48a59e
[BE] refactor: member가 null인 경우 null 처리 (#98)
bianbbc87 Mar 2, 2025
066f93d
[BE] refactor: collection 미정의 이슈 해결 (#98)
bianbbc87 Mar 2, 2025
0365a55
[BE] refactor: web socket connection issue 로그 추가 (#98)
bianbbc87 Mar 2, 2025
904e638
[BE] refactor: 방에서 퇴장 메서드 추가 (#98)
bianbbc87 Mar 2, 2025
8e0b5bd
[BE] refactor: candidate 전송 로직 추가 (#98)
bianbbc87 Mar 2, 2025
f996f65
[BE] refactor: mono 임시로 비동기 -> 동기 변경 (#98)
bianbbc87 Mar 3, 2025
8377c70
[BE] feat: sturn, turn server url get method 추가 (#98)
bianbbc87 Mar 3, 2025
f970bc6
[BE] refactor: media status enalbed get method 변경 (#98)
bianbbc87 Mar 3, 2025
bb8398b
[BE] refactor: media 상태 변경 eanbled 값 파싱 에러 수정 (#98)
bianbbc87 Mar 3, 2025
1ef5cdd
[BE] refactor: join 시 member 정보 get 동기 second 수 추가 (#98)
bianbbc87 Mar 3, 2025
282ed80
[BE] refactor: turn, sturn server get용 ice server get method 추가 (#98)
bianbbc87 Mar 3, 2025
36d900a
[BE] refactor: 잘못된 미디어 타입 정의 - 변수명 변경 (#98)
bianbbc87 Mar 3, 2025
bb8c268
[BE] refactor: ice server get method no security 설정 (#98)
bianbbc87 Mar 3, 2025
7d88103
[BE] refactor: video -> media로 정의 (#98)
bianbbc87 Mar 3, 2025
042cc89
[BE] refactor: join 시 audio, media, data status 입력으로 변경 (#98)
bianbbc87 Mar 3, 2025
754b4a1
[BE] refactor: mediatype -> enum으로 변경 (#98)
bianbbc87 Mar 3, 2025
8559c2d
[BE] refactor: 모든 도메인에서 허용으로 변경 (#98)
bianbbc87 Mar 3, 2025
f98cc9d
[BE] refactor: member entity media status boolean 값으로 변경 (#98)
bianbbc87 Mar 3, 2025
4a87c18
[BE] refactor: kurento에서 생성한 candidate 값으로 변경 (#98)
bianbbc87 Mar 3, 2025
fd181b5
[BE] refactor: users 배열에서 나인지 아닌지 boolean 값 추가 (#98)
bianbbc87 Mar 3, 2025
30ca90d
[BE] refactor: ice candidate pair 확인용 콘솔 추가 (#98)
bianbbc87 Mar 3, 2025
ba666da
[BE] refactor: candidate 확인용 log 출력 (#98)
bianbbc87 Mar 4, 2025
8b770e2
[BE] refactor: stomp로 변경 (#98)
bianbbc87 Mar 5, 2025
61752ae
[BE] refactor: users topic 방 참여시로 변경 (#98)
bianbbc87 Mar 5, 2025
e0421bb
[BE] refactor: subscribe url 변경 (#98)
bianbbc87 Mar 5, 2025
8ccec5a
[BE] refactor: kurento manager 순환 참조 방지 (#98)
bianbbc87 Mar 5, 2025
5ffd2a9
[BE] refactor: sdp answer 반환 추가 (#98)
bianbbc87 Mar 5, 2025
aa1f1f4
[BE] refactor: sdp answer name 변경 (#98)
bianbbc87 Mar 5, 2025
abe288f
[BE] refactor: sdp offer 조회 method 추가 (#98)
bianbbc87 Mar 5, 2025
2b602f1
[BE] refactor: sdp offer string 반환으로 변경 (#98)
bianbbc87 Mar 5, 2025
d5ba0f2
[BE] refactor: ice candidate 수집 시기를 offer 생성일 때로 변경 (#98)
bianbbc87 Mar 5, 2025
b013246
[BE] refactor: room id 조회가 되는지 확인 (#98)
bianbbc87 Mar 5, 2025
fd7ab8a
[BE] refactor: message 로그 출력 (#98)
bianbbc87 Mar 5, 2025
31a2a6b
[BE] refactor: connection time out 0으로 설정 (#98)
bianbbc87 Mar 5, 2025
5494d60
[BE] refactor: candidate log 추가 (#98)
bianbbc87 Mar 5, 2025
f6e6852
[BE] refactor: add candidate 접근 추가 (#98)
bianbbc87 Mar 5, 2025
299a7f2
[BE] refactor: add candidate log 추가 (#98)
bianbbc87 Mar 5, 2025
556151b
[BE] refactor: candidate 검색 메서드 추가 (#98)
bianbbc87 Mar 5, 2025
08d26e0
[BE] refactor: candidate 로그 추가 (#98)
bianbbc87 Mar 5, 2025
56b29b9
[BE] refactor: join에 sdp offer get 추가 (#98)
bianbbc87 Mar 5, 2025
0a0852b
[BE] refactor: join에 sdp offer 생성 구문 제거 (#98)
bianbbc87 Mar 5, 2025
2ed1c0d
[BE] refactor: room 나가기 메서드 restful로 구현 (#98)
bianbbc87 Mar 6, 2025
8bc20ca
[BE] refactor: enpoint 확인 로그 제거 (#98)
bianbbc87 Mar 6, 2025
b789009
[BE] refactor: candidate 등록 시 candidate 전송 (#98)
bianbbc87 Mar 6, 2025
6215b41
[BE] refactor: 내 answer만 수신하도록 변경 (#98)
bianbbc87 Mar 6, 2025
81f8a4d
[BE] refactor: users 가져오기 확인용 로그 (#98)
bianbbc87 Mar 6, 2025
f524b10
[BE] refactor: room users 조회를 웹 소켓 stomp connected인 경우로 변경 (#98)
bianbbc87 Mar 6, 2025
4c9e465
[BE] refactor: join 했을 때 users 전송 취소 (#98)
bianbbc87 Mar 6, 2025
64118ba
[BE] refactor: filter 순환 참조 이슈 해결 (#98)
bianbbc87 Mar 6, 2025
f696287
[BE] refactor: kurento manager bean 제거 (#98)
bianbbc87 Mar 6, 2025
db150e9
[BE] refactor: 자신의 answer와 candidate를 조회하도록 변경 (#98)
bianbbc87 Mar 6, 2025
cd82a12
[BE] refactor: 순환참조 이슈 해결 제발 (#98)
bianbbc87 Mar 6, 2025
d8a1483
[BE] refactor: filter에서 users 반환 취소 (#98)
bianbbc87 Mar 6, 2025
982e539
[BE] refactor: candidate 찾는 타이밍 로그 추가 (#98)
bianbbc87 Mar 6, 2025
4075da3
[BE] refactor: 리스너 중복 제거 (#98)
bianbbc87 Mar 6, 2025
9a7844f
[BE] refactor: 리스너 수집 시작용 publish 추가 (#98)
bianbbc87 Mar 6, 2025
fe50fde
[BE] refactor: subscribe 메서드 구현 (#98)
bianbbc87 Mar 7, 2025
39085f3
[BE] refactor: subscribe log 추가(#98)
bianbbc87 Mar 7, 2025
4ee452b
[BE] refactor: 요청자가 새 publisher인 경우 알림 전송 안 함 (#98)
bianbbc87 Mar 7, 2025
cf8fb00
[BE] refactor: user 정보 반환 시 나를 제외한 user id 정보 반환으로 변경 (#98)
bianbbc87 Mar 8, 2025
23ef88f
[BE] feat: user id 조회 메서드 추가 (#98)
bianbbc87 Mar 8, 2025
5e4d23b
[BE] feat: 구분용 log 추가 (#98)
bianbbc87 Mar 8, 2025
cf1c64f
[BE] feat: user info 조회 로그 추가 (#98)
bianbbc87 Mar 8, 2025
c99f179
[BE] feat: publisher id 오타 수정 (#98)
bianbbc87 Mar 8, 2025
54ab13d
[BE] feat: user id 조회 메서드 잘못된 annotation 수정 (#98)
bianbbc87 Mar 8, 2025
b93599e
[BE] feat: user id 조회 메서드 path 수정 (#98)
bianbbc87 Mar 8, 2025
fce2f3f
[BE] feat: user id 조회 메서드 로그 추가 (#98)
bianbbc87 Mar 8, 2025
24d01de
[BE] refactor: 로그인 시 user id도 반환 (#98)
bianbbc87 Mar 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion config/signaling-server-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,8 @@ cloud:

spring:
kafka:
bootstrap-servers: '{cipher}276ada73fdb90a68125e2dcce993b77384c8c80d672a78b26eefda56bf60f808f77d486f86d9f1de94e6cb342711bb6211dd8f6cbf98b01e4ece80b938b40acf1cfef75ec74c910f32e68873b06dd3d5'
bootstrap-servers: '{cipher}276ada73fdb90a68125e2dcce993b77384c8c80d672a78b26eefda56bf60f808f77d486f86d9f1de94e6cb342711bb6211dd8f6cbf98b01e4ece80b938b40acf1cfef75ec74c910f32e68873b06dd3d5'

service:
member:
url: '{cipher}ee68f6c31f6db2e21b7e008c670634ed0cbb642a75ae18e6cb87794165e82bd3520c15c0a997eb0e049f7ed5ded02091a5543448fc14de697ea18023c61ec9c4'
2 changes: 1 addition & 1 deletion config/signaling-server-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ spring:

service:
member:
url: '{cipher}cfc51ed26a533a9c2dea91e247fab25cd2b6d7487d51884ef835d030b9b38373a30bf3596005dbaf2bd82921ee1f85f5614e0e3e4ed0c658b38950b544ceb5c5'
url: '{cipher}ee68f6c31f6db2e21b7e008c670634ed0cbb642a75ae18e6cb87794165e82bd3520c15c0a997eb0e049f7ed5ded02091a5543448fc14de697ea18023c61ec9c4'
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class AuthorizationHeaderFilter extends AbstractGatewayFilterFactory<Auth
private final ObjectMapper objectMapper;

private static final List<String> NO_NEED_URLS = List.of(
"/sign-up", "/sign-in", "/validation/email", "/validation/authentication-code"
"/sign-up", "/sign-in", "/validation/email", "/validation/authentication-code", "/room/profile"
);

public AuthorizationHeaderFilter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,30 +91,13 @@ spring:
- RewritePath=/users/(?<segment>.*), /$\{segment}
- AuthorizationHeaderFilter

- id: signaling-server
uri: lb://SIGNALING-SERVER
predicates:
- Path=/signalings/**
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/signalings/(?<segment>.*), /$\{segment}
- AuthorizationHeaderFilter

- id: signaling-server
uri: ws://SIGNALING-SERVER
predicates:
- Path=/signalings/**
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/signalings/(?<segment>.*), /$\{segment}

- id: signaling-server
uri: wss://SIGNALING-SERVER
- id: user-server
uri: lb://USER-SERVER
predicates:
- Path=/signalings/**
- Path=/users/room/profile
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/signalings/(?<segment>.*), /$\{segment}
- RewritePath=/users/(?<segment>.*), /$\{segment}

- id: chat-server
uri: lb://CHAT-SERVER
Expand Down
4 changes: 4 additions & 0 deletions src/backend/signaling-server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ dependencies {
// aop
implementation 'org.springframework.boot:spring-boot-starter-aop'

// webflux
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

}

dependencyManagement {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ Content-Type: application/json
"authentication_code": "{{user.API_1_2_AUTHENTICATION_CODE.authentication_code}}"
}

### 1.3 유저 룸 정보 조회
GET {{host_url}}/room/profile?userId=595da97f-64b2-4851-8fe0-e99ec3af6015

### 2,0 채널 생성
// @no-log
POST {{host_url}}/room/create
Expand All @@ -58,6 +61,12 @@ POST {{host_url}}/room/{{signaling.API_2_0_CREATE_CHAT_ROOM.chat_room_id}}/join
Content-Type: application/json
Authorization: Bearer {{access_token}}

{
"audio_enabled": true,
"media_enabled": true,
"data_enabled": true
}


### 2.2 채널 참여 중인 유저 조회
// @no-log
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

@Configuration
@Getter
public class WebRTCConfig {
public class ICEServerConfig {

@Value("${stun.server.urls}")
private String stunServer;
Expand All @@ -25,8 +25,7 @@ public String getTurnUrl() {
return String.format("turn:%s", turnServer);
}

// TURN 서버 인증 정보 반환
public String getTurnCredential() {
return turnPassword;
public String getStunUrl() {
return String.format("stun:%s", stunServer);
}
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,68 @@
package com.asyncgate.signaling_server.config;

import com.asyncgate.signaling_server.infrastructure.client.MemberServiceClient;
import com.asyncgate.signaling_server.infrastructure.utility.WebClientUtil;
import com.asyncgate.signaling_server.security.filter.FilterChannelInterceptor;
import com.asyncgate.signaling_server.security.filter.WebSocketHandshakeInterceptor;
import com.asyncgate.signaling_server.security.utility.JsonWebTokenUtil;
import com.asyncgate.signaling_server.signaling.KurentoManager;
import com.asyncgate.signaling_server.support.handler.KurentoHandler;
import org.kurento.client.KurentoClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.*;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;

import org.kurento.client.KurentoClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.ChannelRegistration;
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
@EnableWebSocket
public class KurentoConfig implements WebSocketConfigurer {
@EnableWebSocketMessageBroker
public class KurentoConfig implements WebSocketMessageBrokerConfigurer {

@Value("${kms.url}")
private String kmsUrl;

private final FilterChannelInterceptor filterChannelInterceptor;
private final WebSocketHandshakeInterceptor webSocketHandshakeInterceptor;

@Lazy
private final SimpMessagingTemplate messagingTemplate;
private final WebClientUtil webClientUtil;

public KurentoConfig(FilterChannelInterceptor filterChannelInterceptor,
WebSocketHandshakeInterceptor webSocketHandshakeInterceptor,
@Lazy SimpMessagingTemplate messagingTemplate,
WebClientUtil webClientUtil) {
this.filterChannelInterceptor = filterChannelInterceptor;
this.webSocketHandshakeInterceptor = webSocketHandshakeInterceptor;
this.messagingTemplate = messagingTemplate;
this.webClientUtil = webClientUtil;
}

@Bean
public KurentoClient kurentoClient() {
return KurentoClient.create(kmsUrl);
}

@Bean
public MemberServiceClient memberServiceClient() {
return new MemberServiceClient();
return new MemberServiceClient(webClientUtil);
}

@Bean
public KurentoManager kurentoManager(KurentoClient kurentoClient, MemberServiceClient memberServiceClient) {
return new KurentoManager(kurentoClient, memberServiceClient);
return new KurentoManager(kurentoClient, memberServiceClient, messagingTemplate);
}

@Bean
Expand All @@ -40,9 +71,23 @@ public KurentoHandler kurentoHandler(KurentoManager kurentoManager) {
}

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
System.out.println("🚀 WebSocketHandlerRegistry 등록");
registry.addHandler(kurentoHandler(kurentoManager(kurentoClient(), memberServiceClient())), "/signal").setAllowedOrigins("*");
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/signal")
.setAllowedOriginPatterns("*")
.addInterceptors(webSocketHandshakeInterceptor);
}

/*
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/kafka");
registry.enableSimpleBroker("/topic/");
}
*/

@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(filterChannelInterceptor);
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.asyncgate.signaling_server.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {
@Bean
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.asyncgate.signaling_server.controller;

import com.asyncgate.signaling_server.dto.request.JoinRoomRequest;
import com.asyncgate.signaling_server.dto.response.GetUsersInChannelResponse;
import com.asyncgate.signaling_server.security.annotation.MemberID;
import com.asyncgate.signaling_server.usecase.ExitRoomUseCase;
import com.asyncgate.signaling_server.usecase.GetUsersInRoomUseCase;
import com.asyncgate.signaling_server.usecase.JoinRoomUseCase;
import lombok.RequiredArgsConstructor;
Expand All @@ -14,26 +16,24 @@
public class ChatRoomCommandController {

private final JoinRoomUseCase joinRoomUseCase;
private final GetUsersInRoomUseCase getUsersInRoomUseCase;
private final ExitRoomUseCase exitRoomUseCase;
// private final GetUsersInRoomUseCase getUsersInRoomUseCase;

/**
* 채널 참여
*/
@PostMapping("/{room_id}/join")
public SuccessResponse<String> joinRoom(@PathVariable("room_id") final String roomId, @MemberID final String memberId) {
System.out.println("member id");
System.out.println(memberId);
joinRoomUseCase.execute(roomId, memberId);
return SuccessResponse.ok("room: " + roomId + "에 user: " + memberId + "가 참여하였습니다.");
public SuccessResponse<String> joinRoom(@PathVariable("room_id") final String roomId, @MemberID final String memberId, @RequestBody JoinRoomRequest request) {
joinRoomUseCase.execute(roomId, memberId, request);
return SuccessResponse.ok("room: " + roomId + "에 참여하였습니다.");
}

/**
* 채널에 참여 중인 유저 조회
*/
/*
@GetMapping("/{room_id}/users")
public SuccessResponse<GetUsersInChannelResponse> getUsersInRoom(@PathVariable("room_id") String roomId) {
return SuccessResponse.ok(getUsersInRoomUseCase.execute(roomId));
}
*/

/**
*
Expand All @@ -43,4 +43,13 @@ public SuccessResponse<GetUsersInChannelResponse> getUsersInRoom(@PathVariable("
public SuccessResponse<String> deleteRoom(@PathVariable("roomId") String roomId) {
return SuccessResponse.ok("room: " + roomId + "가 삭제되었습니다.");
}

/**
* room 나가기 method
*/
@DeleteMapping("/{roomId}/leave")
public SuccessResponse<String> leaveRoom(@PathVariable("roomId") String roomId, @MemberID final String memberId) {
exitRoomUseCase.execute(roomId, memberId);
return SuccessResponse.ok("room: " + roomId + "를 나갔습니다.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.asyncgate.signaling_server.controller;

import com.asyncgate.signaling_server.dto.response.GetICEUrlResponse;
import com.asyncgate.signaling_server.support.response.SuccessResponse;
import com.asyncgate.signaling_server.usecase.GetICEUrlUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/ice")
@RequiredArgsConstructor
public class ChatRoomQueryController {

private final GetICEUrlUseCase getICEUrlUseCase;

/**
* ICE 서버 URL 조회 (TURN/STURN)
*/
@GetMapping
public SuccessResponse<GetICEUrlResponse> getICEServerUrl(@RequestParam("type") String type) {
return SuccessResponse.ok(getICEUrlUseCase.execute(type));
}
}
Loading
Loading