WebRTC를 연결하기 위해 Openvidu라는 오픈소스를 이용하였다.
촬영 방 입장 시 openvidu에 session이 연결되어 미디어 통신이 가능했는데,
방 퇴장 시, 퇴장한 유저는 session 연결이 끊긴 것처럼 보이지만
실제로는 끊기지 않아 방에 남아있는 다른 유저들에게 퇴장한 유저의 카메라와 오디오가 연결되는 이슈가 있었다.
해당 페이지를 나가면 자동으로 세션이 끊기는 줄 알았는데.. 찾아보니 직접 Openvidu Session 연결 해제를 해줘야 했다.
(오픈비두 세션 연결도 자동으로 되는 게 아니었는데.. 연결 해제는 왜 자동으로 되는 거라고 생각했을까..?)
Openvidu Docs를 찾아보니 딱 하나 있었다.

어떤 connection을 넣어야 하는 걸까 곰곰이 생각하다가, openvidu session 연결 로직을 되짚어보았다.
https://bamcodingbi.tistory.com/entry/Openvidu-Session-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0
Openvidu Session 연결하기
Openvidu란? : 웹과 모바일 환경에서 영상 통화 기능을 쉽게 추가할 수 있도록 하는 오픈소스 플랫폼 [ Openvidu Session 연결 순서 ] 1. WebRTC의 역할을 해줄 Openvidu Server 배포한다. 2. Openvidu와 통신하기 위
bamcodingbi.tistory.com
openvidu에 새로운 session을 생성하고, connectionProperties 객체를 빌드하여 token 발급 후 session에 연결했었는데
Connection 클래스를 확인해보니 token을 포함하고 있었다.
package io.openvidu.java.client;
/**
* See {@link io.openvidu.java.client.Session#getConnections()}
*/
public class Connection {
private String connectionId;
private String status;
private Long createdAt;
private Long activeAt;
private String location;
private String platform;
private String clientData;
private ConnectionProperties connectionProperties;
private String token;
...
}
그렇다면, disconnect 할 session 객체를 가져오고, 해당 session에 연결되어있는 모든 connection(유저)을 List로 반환하여
퇴장할 유저의 token 값과 일치한 connection을 찾아서 disconnect 하면 되지 않을까 하는 생각으로 시도해보았다.
User user = SecurityUtil.getCurrentUser();
// roomId로 방 조회
Room room = validator.existsRoom(roomId);
Session session = getSession(room.getSessionId());
// Openvidu 에서 사용자 연결 끊기
// Session.getActiveConnections()에서 반환된 목록에서 원하는 Connection 개체를 찾습니다
List<Connection> activeConnections = session.getActiveConnections();
for (Connection connection : activeConnections) {
if (connection.getToken().equals(user.getOpenvidu_token())) {
session.forceDisconnect(connection); // 세션에 입장한 사용자 연결 끊기
}
}
결과는 성공이었다!!!!
정말 많은 삽질을 통해 느낀 점은 어떤 기능을 구현할 때에 로직을 이해하고 있어야만 그 외에 일어나는 문제에 대한 해결이 가능하다는 것이었다.
그저 '기능 구현'에만 집중하지 말고, 그 외에 보이지 않는 부분들까지 잘 이해하고 있어야겠다.
'🧐MY PROJECT' 카테고리의 다른 글
| Openvidu Session 연결하기 (0) | 2023.02.25 |
|---|