GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

バージョンチェックにGS2-Scheduleとの連携機能が追加されました

はじめに

GS2-Version はアプリやアセット、利用規約のバージョン管理や、メンテナンスモードの切り替えなどを行えるマイクロサービスです。

機能追加の背景

バージョン更新や、メンテナンスは予定を持って実行されることが一般的です。
しかし、これまで GS2-Version には予定時刻に要求バージョンを切り替える仕組みがありませんでしたので、バージョン更新やメンテナンスの進行に合わせてマスターデータを切り替える必要がありました。

追加された機能の詳細

そこで、VersionModel に type フィールドが追加され、従来のバージョンチェックを行える simple と、新しく schedule を選択できるようになりました。

schedule を選択すると、scheduleVersions: List[ScheduleVersion] を指定する必要があります。

ScheduleVersion は 《現在のバージョン》《警告をだすバージョン閾値》《エラーとするバージョン閾値》《GS2-Schedule のイベントGRN》 のフィールドを持ち、配列の先頭から順番に評価し《GS2-Schedule のイベントGRN》が開催状態もしくは未指定の ScheduleVersion の値を使用してバージョンチェックを行います。

マスターデータの例

{
  "version": "2019-10-09",
  "versionModels": [
    {
      "name": "[string]バージョンモデル名",
      "metadata": "[string?]メタデータ",
      "scope": "[string]判定に使用するバージョン値の種類(passive/active)",
// ここから追加
      "type": "[string]バージョンチェックモード(simple/schedule)",
      "scheduleVersions": [
        {
          "currentVersion": {
            "major": "[int]メジャーバージョン",
            "minor": "[int]マイナーバージョン",
            "micro": "[int]マイクロバージョン"
          },
          "warningVersion": {
            "major": "[int]メジャーバージョン",
            "minor": "[int]マイナーバージョン",
            "micro": "[int]マイクロバージョン"
          },
          "errorVersion": {
            "major": "[int]メジャーバージョン",
            "minor": "[int]マイナーバージョン",
            "micro": "[int]マイクロバージョン"
          },
          "scheduleEventId": "[string?]バージョンチェックを有効化する期間を設定した GS2-Schedule のイベント"
        }
      ],
// ここまで追加
      "needSignature": "[bool]判定するバージョン値に署名検証を必要とするか",
      "signatureKeyId": "[string]暗号鍵GRN",
      "currentVersion": {
        "major": "[int]メジャーバージョン",
        "minor": "[int]マイナーバージョン",
        "micro": "[int]マイクロバージョン"
      },
      "warningVersion": {
        "major": "[int]メジャーバージョン",
        "minor": "[int]マイナーバージョン",
        "micro": "[int]マイクロバージョン"
      },
      "errorVersion": {
        "major": "[int]メジャーバージョン",
        "minor": "[int]マイナーバージョン",
        "micro": "[int]マイクロバージョン"
      }
    },
  ]
}

Unity からの使用例

クライアントの実装はこれまでと変わりません。

バージョンチェックを実行

    var domain = gs2.Version.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Checker(
    );
    var result = await domain.CheckVersionAsync(
        targetVersions: new Gs2.Unity.Gs2Version.Model.EzTargetVersion[] {
            new Gs2.Unity.Gs2Version.Model.EzTargetVersion
                {
                VersionName = "app",
                Version = 
                {
                    Major = 1,
                    Minor = 2,
                    Micro = 3,
                },
            },
            new Gs2.Unity.Gs2Version.Model.EzTargetVersion
                {
                VersionName = "asset",
                Version = 
                {
                    Major = 1,
                    Minor = 2,
                    Micro = 3,
                },
            },
        }
    );
    var projectToken = result.ProjectToken;
    var warnings = result.Warnings;
    var errors = result.Errors;

利用規約に同意

    var domain = gs2.Version.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).AcceptVersion(
        versionName: "eula"
    );
    var result = await domain.AcceptAsync(
    );
    var item = await result.ModelAsync();

関連資料
GS2-Version の概要
GS2-Version のAPIリファレンス

(C) Game Server Services, Inc.