# EOS 로비 통합

이 가이드는 Unreal 게임 프로젝트에서 EOS 로비와 함께 작동하도록 Edgegap을 통합하는 방법을 보여줍니다. 일부 단계에서는 토큰을 사용하여 당사의 API에 요청을 보내야 하며, `curl` 아래 제공된 명령은 각 응답을 미리 확인하여 코드에서 어떻게 처리할지 결정할 수 있도록 해줍니다. 요청에 토큰을 사용할 때는 `토큰` 키워드를 안전하게 보관해야 합니다.

또한 당사 플랫폼에 애플리케이션 버전이 이미 설정되어 있어야 합니다. 이 경우 테스트 과정을 빠르게 하기 위해 Edgegap Unreal 플러그인 사용을 권장합니다. 플러그인에 대한 자세한 내용은 당사 문서를 [여기](https://docs.edgegap.com/docs.edgegap.com-ko/docs/tools-and-integrations/broken-reference).

{% hint style="warning" %}
안전 조치로서 프로덕션 환경에서 EOS 로비 소유자가 Edgegap API에 직접 요청을 보내는 것은 권장되지 않으며, 이는 클라이언트가 API 토큰에 접근할 수 있기 때문입니다. 대신 별도의 서비스를 사용하여 이러한 요청을 관리해야 합니다.
{% endhint %}

### 1. 플레이어의 공용 IP 가져오기 및 저장

우선, 로비에 합류하는 각 플레이어(로비 소유자 포함)는 자신의 공용 IP를 가져와서 [로비 멤버 속성](https://dev.epicgames.com/docs/game-services/lobbies#lobby-and-lobby-member-properties).

```
curl --location --request GET 'https://api.edgegap.com/v1/ip' \
--header 'Authorization: [EDGEGAP_API_TOKEN]'
```

### 2. 배포 생성

로비 소유자가 매치가 시작할 준비가 되었다고 결정하면 저장된 공용 IP를 사용하여 Edgegap에 새 배포를 생성하는 요청을 보내야 합니다.

```
curl --location --request POST 'https://api.edgegap.com/v1/deploy' \
--header 'Content-Type: application/json' \
--header 'Authorization: [EDGEGAP_API_TOKEN]' \
--data-raw '{
    "app_name": "[EDGEGAP_APP_NAME]",
    "version_name": "[EDGEGAP_APP_VERSION]",
    "ip_list": [
        "[LOBBY_MEMBER_IP]"
    ]
}'
```

그 후 로비 소유자는 배포 생성 요청의 응답에 제공된 request\_id를 사용하여 배포를 계속 폴링해야 합니다. 응답에 배포의 `current_status` 가 `READY`로 설정되면 로비 소유자는 배포의 IP 및 포트 값을 [EOS 로비 속성](https://dev.epicgames.com/docs/game-services/lobbies#lobby-and-lobby-member-properties).

```
curl --location --request GET 'https://api.edgegap.com/v1/status/[REQUEST_ID]' \
--header 'Authorization: [EDGEGAP_API_TOKEN]'
```

### 3. 배포에 연결

플레이어들이 IP 및 포트 값이 할당되었다는 알림을 받으면 해당 값을 클라이언트 캐시와 비교한 다음 서버에 연결하여 매치를 플레이할 수 있습니다.

### 4. 매치 및 배포 종료

매치가 끝나면 로비 소유자는 EOS 로비 속성에서 IP 및 포트 값을 해제하여 다른 모든 사람에게 서버에서 정상적으로 연결을 끊으라는 알림을 보냅니다. 애플리케이션이 환경 변수를 주입하도록 구성되어 있으면 이 시점에 내부에서 배포를 종료하는 데 이를 사용할 수 있습니다.

서버 외부에서 배포를 종료하려면 아래에 표시된 `curl` 명령과 같은 요청을 대신 사용할 수 있습니다.

```
curl --location --request DELETE 'https://api.edgegap.com/v1/stop/[REQUEST_ID]' \
--header 'Authorization: [EDGEGAP_API_TOKEN]'
```

플레이어가 로비에 남아 있는 경우 로비 소유자는 동일한 사람들과 재경기를 시작하기 위해 새 배포를 요청하는 단계부터 다시 반복할 수 있습니다.
