39. 클라이언트 지원 Part 3: 클라 버전

Google Play와 Apple App Store와 같이 모바일 배포 환경은 Client 배포 시점을 정확하게 통제할 수 없습니다. 예를 들어 1.0 버전에서 1.1 버전으로 업데이트된 클라이언트를 AppStore 에 배포하면, 유저들이 업데이트하는 시간차에 따라 일정시간 동안은 1.1 버전과 1.0 버전이 공존하게 됩니다. 이러한 문제를 해결하기 위해서는 위해 게임 서버는 호환 가능한 클라이언트 버전 목록을 관리해야 합니다.

아이펀 엔진은 이런 문제를 해결하기 위해 접속 가능한 버전을 지정하는 것이 가능합니다.

39.1. 호환되는 클라이언트 버전 지정

MANIFEST.json 의 AppInfo 섹션에 다음과 같은 정보를 지정할 수 있습니다.

  • client_current_version: 최신 client 를 지칭하는 version string 을 지정합니다. 예: “7”
  • client_compatible_versions: 호환 가능한 client의 version string 들을 list 로 지정합니다., 예: [“5”, “6”]
  • client_update_info: 호환 가능하지 않은 client 가 접속한 경우, 이를 알려주기 위해 client로 전달할 문자열을 지정합니다.
  • client_update_uri: 호환 가능하지 않은 client 가 접속한 경우, client 를 update 하기 위한 URI 를 지정합니다.

39.1.1. 예제

아래의 예제는 client 의 최신 버전이 17일 때, 15와 16 버전도 접속을 허용하는 방법을 보여주고 있습니다. 15, 16, 17 이 외의 버전은 접속을 허용하지 않습니다.

39.1.1.1. MANIFEST.json 설정

{
  "client_current_version": "17",
  "client_compatible_versions": ["15", "16"],
  "client_update_info": "new version available",
  "client_update_url": "https://play.google.com/store/apps/details?id=com.example.Game1"
}

39.1.1.2. 서버 측 코드

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
...

void OnVersionMessage(const Ptr<Session> &session, const Json &message) {
  string client_version = ...  // from client

  if (not AppInfo::client_version().IsCompatible(client_version)) {
    string update_msg = AppInfo::client_version().client_update_info();
    string update_url = AppInfo::client_version().client_update_uri();

    session->SendMessage(...);

    return;
  }
}

...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
...

void OnVersionMessage(Session session, JObject message)
{
  string client_version = ...  // from client

  if (!AppInfo.IsCompatibleVersion (client_version))
  {
    string update_msg = AppInfo.ClientUpdateInfo;
    string update_uri = AppInfo.ClientUpdateUri;

    session.SendMessage(...);

    return;
  }
}

...