유니티 엔진 - 게임 프로젝트/데디케이트 기반 모바일 게임

로비 구현 - 5) 다른 상대 탐색 준비

monstro 2025. 12. 22. 11:05
728x90
반응형

- 개요

클라이언트에서 다른 상대를 탐색하기 위한 패킷을 전송한 후에 패킷을 전송한 클라이언트의 정보를 기반으로

추후에 매칭을 수행하는데 사용할 MatchMakingRequest를 생성하도록 설계한다

 

- 서버 사이드

1) MatchMakingRequest 클래스

 

매칭을 요청한 클라이언트의 정보를 기반으로 생성할 MatchMakingRequest 클래스를 위와 같이 구성하였다

해당 클래스를 사용하여 클라이언트끼리 매칭을 수행한다

멤버변수의 구성은 다음과 같다

  • Connection 멤버변수 : 매칭을 요청한 클라이언트의 연결 정보
  • SearchStartTime 멤버변수 : 매칭 시작 시간
  • MatchFound 멤버변수 : 매칭 여부

 

2) MatchMaker 클래스

 

MathMakingRequest를 기반으로 매칭을 수행하는 MatchMaker 클래스를 생성한다

멤버변수의 구성은 위와 같다

  • _logger 멤버변수 : 해당 클래스에 대한 로깅 수행
  • _requestPool 멤버변수 : 매칭할 MatchMakingRequest저장하는 리스트

 

 

생성자는 위와 같이 구성하여 ILogger 멤버변수를 설정한다

 

 

RegisterPlayer 함수의 로직은 위와 같다

  • 인자로 받은 ServerConnection의 클라이언트가 이미 등록되어 있지 않은지 확인
  • 인자로 받은 ServerConnection을 사용하여 새로운 MatchMakingRequest 인스턴스 생성
  • 생성한 인스턴스등록 + 로그를 찍음
  • DoMatchMaking 함수 호출

 

 

DoMatchMaking 함수의 로직은 위와 같다

  • 매칭할 두 클라이언트MatchMakingRequest를 저장할 지역 컨테이너 생성
  • _requestPool 멤버변수를 순회하면서 매칭할 다른 MatchMakingRequest 탐색
  •  탐색되었다면 순회중인 request매칭할 match를 설정하고 지역 컨테이너에 저장
  • 순회중인 requestxUser로 저장하고, 매칭할 matchyUser로 저장
  • 이후 로그를 찍음

 

 

TryUnregisterPlayer 함수의 로직은 위와 같다

매칭을 중단할 사용자의 이름을 인자로 받아 _requestPool 멤버변수에서 제거한다

 

3) FindOpponentRequestHandler 클래스

 

멤버변수를 위와 같이 구성하여 사용자MathMakingRequest에 접근할 수 있도록 설정한다

생성자를 위와 같이 구성하여 UsersManagerMatchMaker에 대한 의존성을 주입한다

 

 

Handle 함수를 위와 같이 구성하여 FindOpponentRequest 패킷을 전송한 클라이언트의 연결정보

MatchMakerRegisterPlayer 함수에 인자로 넘겨준다

 

4) Container 클래스

 

ConfigureServices 함수를 위와 같이 수정하여 MatchMaker에 대한 서비스를 생성한다

 

- 최종 실행 결과

728x90
반응형