Skip to content

Commit 142a38c

Browse files
committed
feat: Session 초기화 및 Connection 생성 구현
- POST /api/sessions - POST /api/sessions/{sessionId}/connections
1 parent 0a9da4f commit 142a38c

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

build.gradle

+3
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ dependencies {
6363

6464
//jsoup
6565
implementation 'org.jsoup:jsoup:1.14.2'
66+
67+
//OpenVidu
68+
implementation 'io.openvidu:openvidu-java-client:2.26.0'
6669
}
6770

6871
tasks.named('test') {

src/main/java/oncoding/concoder/controller/VideoRoomController.java

+53
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,41 @@
11
package oncoding.concoder.controller;
22

33
import java.util.List;
4+
import java.util.Map;
5+
6+
import io.openvidu.java.client.Connection;
7+
import io.openvidu.java.client.ConnectionProperties;
8+
import io.openvidu.java.client.OpenVidu;
9+
import io.openvidu.java.client.OpenViduHttpException;
10+
import io.openvidu.java.client.OpenViduJavaClientException;
11+
import io.openvidu.java.client.Session;
12+
import io.openvidu.java.client.SessionProperties;
413
import lombok.RequiredArgsConstructor;
514
import lombok.extern.slf4j.Slf4j;
615
import oncoding.concoder.dto.ChatDTO.UserAndRoomResponse;
716
import oncoding.concoder.dto.ChatDTO.ExitResponse;
817
import oncoding.concoder.dto.ChatDTO.UserResponse;
918
import oncoding.concoder.service.ChattingService;
1019
import org.json.simple.JSONObject;
20+
import org.springframework.beans.factory.annotation.Value;
1121
import org.springframework.context.event.EventListener;
22+
import org.springframework.http.HttpStatus;
1223
import org.springframework.http.ResponseEntity;
1324
import org.springframework.messaging.handler.annotation.DestinationVariable;
1425
import org.springframework.messaging.handler.annotation.MessageMapping;
1526
import org.springframework.messaging.simp.SimpAttributesContextHolder;
1627
import org.springframework.messaging.simp.SimpMessagingTemplate;
1728
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
1829
import org.springframework.web.bind.annotation.DeleteMapping;
30+
import org.springframework.web.bind.annotation.PathVariable;
1931
import org.springframework.web.bind.annotation.PostMapping;
2032
import org.springframework.web.bind.annotation.RequestBody;
2133
import org.springframework.web.bind.annotation.RestController;
2234
import org.springframework.web.socket.messaging.SessionConnectEvent;
2335
import org.springframework.web.socket.messaging.SessionDisconnectEvent;
2436

37+
import javax.annotation.PostConstruct;
38+
2539
@Slf4j
2640
@RestController
2741
@RequiredArgsConstructor
@@ -30,6 +44,16 @@ public class VideoRoomController {
3044
private final ChattingService chattingService;
3145
private final SimpMessagingTemplate template;
3246

47+
@Value("${OPENVIDU_SECRET}")
48+
private String OPENVIDU_SECRET;
49+
50+
private OpenVidu openvidu;
51+
52+
@PostConstruct
53+
public void init() {
54+
this.openvidu = new OpenVidu("http://localhost:4443/", OPENVIDU_SECRET);
55+
}
56+
3357
@MessageMapping("/video/chat/{roomId}")
3458
public void chat(@DestinationVariable final String roomId, JSONObject ob) {
3559
log.debug("/rooms/chat/{}, userId: {}", roomId, ob.get("userId").toString());
@@ -94,6 +118,35 @@ private ExitResponse unJoinRoom(@DestinationVariable final String roomId, JSONOb
94118
}
95119

96120

121+
/**
122+
* @param params The Session properties
123+
* @return The Session ID
124+
*/
125+
@PostMapping("/sessions")
126+
public ResponseEntity<String> initializeSession(@RequestBody(required = false) Map<String, Object> params)
127+
throws OpenViduJavaClientException, OpenViduHttpException {
128+
SessionProperties properties = SessionProperties.fromJson(params).build();
129+
Session session = openvidu.createSession(properties);
130+
return new ResponseEntity<>(session.getSessionId(), HttpStatus.OK);
131+
}
132+
133+
/**
134+
* @param sessionId The Session in which to create the Connection
135+
* @param params The Connection properties
136+
* @return The Token associated to the Connection
137+
*/
138+
@PostMapping("/sessions/{sessionId}/connections")
139+
public ResponseEntity<String> createConnection(@PathVariable("sessionId") String sessionId,
140+
@RequestBody(required = false) Map<String, Object> params)
141+
throws OpenViduJavaClientException, OpenViduHttpException {
142+
Session session = openvidu.getActiveSession(sessionId);
143+
if (session == null) {
144+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
145+
}
146+
ConnectionProperties properties = ConnectionProperties.fromJson(params).build();
147+
Connection connection = session.createConnection(properties);
148+
return new ResponseEntity<>(connection.getToken(), HttpStatus.OK);
149+
}
97150

98151

99152
// caller의 정보를 다른 callee들에게 쏴준다.

0 commit comments

Comments
 (0)