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

사용자 인증 - 2) 로그인한 사용자 핸들링

monstro 2025. 12. 2. 11:54
728x90
반응형

- 개요

프로젝트에서 클라이언트가 서버에 로그인하면서 전송하는 승인 요청 패킷은 다음과 같이 처리된다

  • 1) 해당 패킷에 담겨진 정보를 로그로 남김
  • 2) 로그인 또는 새로 등록하는 방식으로 처리
    • 처리가 성공 : Net_OnAuth 패킷을 클라이언트에게 전송 + 다른 클라이언트에게 접속 여부 전파
    • 처리가 실패 : Net_OnAuthFailed 패킷을 클라이언트에게 전송

 

- 서버 사이드

1) PacketType 클래스

 

서버가 클라이언트로 전송할 패킷의 종류를 위와 같이 추가한다

각각 다음과 같다

  • 접속 승인
  • 접속 불가
  • 서버의 상태

 

2) Net_OnAuth 클래스

 

클라이언트의 접속을 승인하는 Net_OnAuth 패킷의 구성은 위와 같다

Type 프로퍼티를 설정하여 패킷의 타입을 결정하고

직렬화하는 Serialize 함수에서 패킷의 타입을 기록한다

 

3) Net_OnAuthFailed 클래스

 

클라이언트의 접속을 불허하는 Net_OnAuthFailed 패킷의 구성은 위와 같다

동일하게 Type 프로퍼티를 설정하여 패킷의 타입을 결정하고 직렬화하면서 패킷의 타입을 기록한다

 

4) Net_OnServerStatus 클래스

 

서버의 상태를 클라이언트에게 알려주는 Net_OnServerStatus 패킷의 구성은 위와 같다

마찬가지로 Type 프로퍼티를 설정하여 패킷의 타입을 결정하고 직렬화하면서 패킷의 타입을 기록한다

서버의 상태 관련 멤버변수는 아직 추가하지 않았다

 

5) UsersManager 클래스

 

생성자에서 딕셔너리 멤버변수를 초기화하는 로직을 추가한다

 

 

AddConnection 함수를 위와 같이 추가하여

종단점의 ID와 종단점과의 연결정보를 담은 ServerConnection 인스턴스를 딕셔너리에 저장한다

 

 

Disconnect 함수를 위와 같이 추가한다

인자로 받은 peerId에 해당하는 연결정보를 가져오고 해당 연결정보에 기록된 사용자오프라인 상태로 설정한다

이후 딕셔너리 멤버변수에서 해당 peerId의 값을 제거한다

 

 

GetConnection 함수를 추가하여 딕셔너리 멤버변수에서 인자로 받은 peerId에 해당하는 연결정보를 반환한다

 

 

GetOtherConnectionIds 함수를 추가하여 딕셔너리 멤버변수에서 인자로 받은 ID를 제외다른 모든 ID를 반환한다

 

6) NetworkServer 클래스

 

위와 같이 2개의 멤버변수를 추가한다

  • 접속한 사용자들관리 + 추적하기 위한 UsersManager 인스턴스
  • 클라이언트에 전송할 패킷직렬화하는 NetDataWriter 인스턴스

 

 

Start 함수에서 UsersManager 인스턴스 멤버변수를 설정한다

 

 

OnPeerConnected 함수OnPeerDisconnected 함수를 추가하여

종단점에서 연결된 사용자 + 연결해제된 사용자를 처리한다

 

 

SendClient 함수의 로직은 위와 같다

인자로 받은 peerId에 해당하는 연결정보의 종단점을 가져오고 해당 종단점으로 패킷을 직렬화하여 전송한다

 

 

WriteSerializable 함수의 로직은 위와 간다

멤버변수로 갖고 있는 NetDataWriter를 사용하여 직렬화된 인자로 받은 패킷을 반환한다

 

7) AuthRequestHandler 클래스

 

NetworkServer 클래스의 인스턴스를 멤버변수로 추가한다

 

 

생성자에서 NetworkServer 인스턴스를 인자로 받아 멤버변수를 설정한다

 

 

Handle 함수를 위와 같이 수정한다

로그인 + 회원등록 성공 여부에 따라 각각 다른 패킷을 생성하고 클라이언트에 전송한다

성공했다면 접속해있는 다른 클라이언트들에게 접속 여부를 전파한다

 

 

NotifyOtherPlayers 함수의 로직은 위와 같다

서버의 상태를 담은 Net_OnServerStatus 패킷을 생성하고

인자로 받은 ID의 클라이언트를 제외한 다른 클라이언트들에게 해당 패킷을 전파한다

 

8) Container 클래스

 

ConfigureServices 함수에 로직을 추가하여 UsersManager를 대상으로 싱글톤을 생성한다

 

- 최종 실행 결과

728x90
반응형