220810 공통 프로젝트 개발일지

·2022년 8월 22일
0

개발일지 & 회고

목록 보기
13/72
post-thumbnail

room logic 형성

두 유저가 만나, socket 이벤트가 호출되기 전, 두 유저를 매칭하는 룸 logic 을 형성하였다.

먼저 db의 방 데이터를 탐색하는 함수를 실행한다.
  -  룸이 존재하는 경우 : 룸이 있으며, 아직 방에 1명인 경우에 해당 룸이 내가 사용하는 언어와 일치한다면 채우고 들어가면 된다.
  -  룸이 존재하지 않는 경우 : 룸이 있으나 2명을 차지하거나, 혹은 룸이 언어랑 맞지 않아 못들어간다면, 룸을 생생하여 들어간다.

  ex) user: 김싸피, languages : eng, jpn, kor 인 경우
    - language가 eng이면서, 룸이 아직 1명인 곳을 찾는다. (시간은 한 일단 10초 정도, 찾는도중 누가 생성할 수 있으니, 또 보고 또 보고 또 탐색하자 (멀티 쓰레드로 가능한가? ))
    - eng 방이 없다면, language가 eng || jpn이면서, 룸이 아직 1명인 곳을 찾는다. (동일하게 10초 정도)
    - jpn 방이 없다면, language가 eng || jpn || kor 이면서, 룸이 아직 1명인 곳을 찾는다. (역시 동일하게 10초 정도)
    - 30초를 경과 해도 없다면, 룸을 생성한다. (이때도 client는 여전히 loading 중)
  
룸을 찾거나, 룸을 만들어서 2명이 채워진 경우에 opnnvidu-server를 통해 비디오 렌더링과 채팅이 이루어지게 한다!

import { useState, useEffect } from 'react'
import Button from '../common/Button'
import Modal from '../common/Modal'
import LoadingContainer from './LoadingContainer'
import { useLocation } from 'react-router-dom'
// import { classNames } from 'react-select/dist/declarations/src/utils'
import classes from '../common/Button.module.css'

export default function MeetingEntrySection() {
  const [modalState, setModalState] = useState(false)

  const location = useLocation()
  useEffect(() => {
    if (location.state || location.search === '?rematching=true') {
      handleModal()
      location.state = null
    }
  }, [location])

  // const roomHandler = () => {
  //   // console.log(state.token)
  //   dispatch(findRoom(state.token))
  // }

  const handleModal = () => setModalState(!modalState)

  // if (location.search === '?rematching=true') handleModal()

  const contents = {
    content: <LoadingContainer handleModal={handleModal}></LoadingContainer>,
  }

  return (
    <>
      {/* <Button text="룸 테스트용 버튼" onEvent={roomHandler}></Button> */}
      <Button
        text="랜덤 매칭 시작하기"
        onEvent={handleModal}
        size="large_height"
        className={classes.button_text_big}
      ></Button>
      <Modal
        opened={modalState}
        handleModal={handleModal}
        contents={contents}
        locked
      />
    </>
  )
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글