HelloWorld
프로젝트에서는 vip 유저가 존재한다. 일반 유저와 다르게 vip 유저의 경우 다양한 기능을 사용하는 것이 가능한데, 그 가운데 하나가 시간 연장 기능이다.
로직 추가 : 시간연장
1. 생성자가 vip로써 시간 연장을 하는 경우 : 생성자 시간이 기준이므로 본인이 가진 시간을 연장시키면 자연스럽게 입장자의 시간도 연장된다.
2. 입장자가 vip로써 시간 연장을 하는 경우 : openvidu signal 이벤트를 활용하여 생성자의 시간을 연장한다.
const restoreTimeHandler = () => {
if (room.isCreatedRoom) {
if (user.subscribe) {
setMinutes(5)
setSeconds(0)
} else if (user.heart >= 5) {
const heartData = {
cnt: -5,
fromUser: user.id,
name: 'extention',
route: 'extention',
toUser: 1,
}
dispatch(heartEvent({ accessToken: auth.token, heartData }))
dispatch(getMyHeart(auth.token))
setMinutes(5)
setSeconds(0)
}
} else {
if (user.subscribe) {
openvidu.publisher.session.signal({
type: 'restore',
})
} else if (user.heart >= 5) {
const heartData = {
cnt: -5,
fromUser: user.id,
name: 'extention',
route: 'extention',
toUser: 1,
}
dispatch(heartEvent({ accessToken: auth.token, heartData }))
dispatch(getMyHeart(auth.token))
openvidu.publisher.session.signal({
type: 'restore',
})
}
}
}
유저 가운데, 어떠한 경로로 roomID를 획득하여 세션에 접근하려는 시도가 있을 수 있다. 랜덤 매칭 이벤트를 통해 정상적으로 접근하는 것이 아니라면 대부분이, openvidu 인스턴스가 생성되지 않은 체 접근을 할 테고, 따라서 미팅 페이지 접근 시, openvidu 인스턴스를 확인하여, 해당 값이 존재하지 않는다면, 이를 비정상적 접근으로 판단한다.
해당 조건에 만족하는 경우, 미팅 페이지로 강제 리다이렉트 되도록 설정하였다.
useEffect(() => {
if (room.isCreatedRoom) {
openvidu.session.on('signal:restore', () => {
setMinutes(5)
setSeconds(0)
})
}
if (openvidu.session) {
openvidu.session.on('signal:rematching', event => {
const timeEvent = setTimeout(() => {
dispatch(leaveRoom({ roomId: room.roomId }))
dispatch(ovActions.leaveSession())
window.location.replace('/meeting?rematching=true')
}, 2000)
return () => clearInterval(timeEvent)
})
} else {
// 세션 없이 여기까지 오는 것은 비정상적 접근으로 판단 강제 페이지 이동
navigate('/meeting', { replace: true })
}
}, [])
해당 대화가 자동으로 종료되면, 자동으로 랜덤 매칭이 이루어지도록 적용했다. 다음 매칭 버튼을 눌러, 대화 중간 나가는 것도 가능하며, 행여 세션에 홀로 남게 되는 경우 역시, 특별한 종료를 하지 않는다면 5초 후 다음 매칭이 이루어지도록 했다.
// 신규 로직 : rematching
상대방이 정상적으로 현재 세션을 종료하는 경우 (나가거나, 다음 매칭을 시도하거나) 세션 남은 사람에게 자동으로 다음 매칭이 이루어진다.
- 상대방이 다음 매칭을 한 경우
상대방 : 메인 페이지로 이동, 다음 매칭이 이루어진다.
나 : 메인 페이지로 이동, 다음 매칭이 이루어진다.
- 상대방이 나가기를 한 경우
상대방 : 메인 페이지로 이동, 다음 매칭x
나 : 메인 페이지로 이동, 다음 매칭이 이루어진다.