OpenVidu Browser Signal

PARKHEECHANG·2023년 8월 22일
0

OpenVidu

목록 보기
4/8
post-thumbnail

SignalEvent | OpenVidu Browser - v2.28.0

// streamCreated 이벤트 처리
mySession.on('streamCreated', async (event) => { // 연결
  const subscriber = mySession.subscribe(event.stream, undefined);
  setSubscribers((subscribers) => [...subscribers, subscriber]);

  // 시그널 보내기 (예: 게임 시작을 알림)
  mySession.signal({
    data: 'startGame',
    type: 'startGame'
  });
});

// 시그널 수신 시 게임 시작
mySession.on('signal:startGame', (event) => {
  // 시그널을 받으면 게임 시작
  startGame();
});

상호 간의 시그널 교환 시

  • 자신이 보낸 시그널을 자신이 받는 경우가 생기므로 두 유저의 정보를 같이 넘김
  • useEffect를 사용하여 비동기적으로 처리
useEffect(() => {
    if (session) {
      if (mySide === 'USER_ONE') {
        setUserOneEmail(localStorage.getItem('email'));
      } else if (mySide === 'USER_TWO') {
        setUserTwoEmail(localStorage.getItem('email'));
      }

      session.signal({
        data: JSON.stringify({
          userOneEmail: userOneEmail,
          userTwoEmail: userTwoEmail,
        }),
        type: 'email',
      });

      const recieveEmail = (e) => {
        try {
          const receivedData = JSON.parse(e.data);
          let response_userOneEmail = receivedData.userOneEmail;
          let response_userTwoEmail = receivedData.userTwoEmail;
          if (response_userOneEmail !== null) {
            setUserOneEmail(response_userOneEmail);
          }
          if (response_userTwoEmail !== null) {
            setUserTwoEmail(response_userTwoEmail);
          }
        } catch (error) {
          console.error('이메일 정보 수신 중 오류 발생', error);
        }
      };

      session.on('signal:email', recieveEmail);
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }
  }, [mySide]);

0개의 댓글