ヘッダー画像

【AWS】Amazon GameLiftのFlexMatch単体で使ってみた 接続編

投稿 2024年3月31日 最終更新 2024年3月31日 専門用語多め

前置き

前回、AWSのGameLiftを調べてみて、AWS側はなんとなくわかったので、
今度は本題のプログラム側からAWSに接続してみたいと思います。

まだよくわかってないですが、今わかっていることだけでも…。

やりたいこと

JavaからGameLiftのサービスに接続してみたい。

ただし、まだ詳しい処理はわからない。

とりあえず、接続できるところまで…。

AWSの設定

タイマン(1対1)のマッチングを作ってみました。

条件としては、同じレベルの2人がマッチングする感じです。
※作っただけなので、間違っている可能性あります。

{
  "name": "two-players-no-rule-match-test",
  "ruleLanguageVersion": "1.0",
  "playerAttributes": [
    {
      "name": "playerLevel",
      "type": "number",
      "default": 1
    }
  ],
  "teams": [
    {
      "name": "battle",
      "maxPlayers": 2,
      "minPlayers": 2
    }
  ],
  "rules": [
    {
      "name": "EqualPlayerLevel",
      "description": "同じレベルでマッチング",
      "type": "comparison",
      "measurements": [
        "flatten(teams[*].players.attributes[playerLevel])"
      ],
      "operation": "="
    }
  ]
}

接続方法

Gradle

build.gradle.ktsのdependenciesに、下記を追加します。

build.gradle.kts

// https://mvnrepository.com/artifact/software.amazon.awssdk/bom
runtimeOnly("software.amazon.awssdk:bom:2.23.17")
// https://mvnrepository.com/artifact/software.amazon.awssdk/aws-sdk-java
implementation("software.amazon.awssdk:aws-sdk-java:2.23.17")

Java

import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import software.amazon.awssdk.services.gamelift.GameLiftClient;
import software.amazon.awssdk.services.gamelift.model.AttributeValue;
import software.amazon.awssdk.services.gamelift.model.Player;
import software.amazon.awssdk.services.gamelift.model.StartMatchmakingRequest;
import software.amazon.awssdk.services.gamelift.model.StartMatchmakingResponse;

public class FlexMatch {
  public static void main(String[] args) {
    // プレイヤーID
    String playerId = "1001";
    // プレイヤー属性
    HashMap<String, AttributeValue> playerAttributes = new HashMap<>() {
      {
        put("playerLevel", AttributeValue.builder().n(15.0).build());
      }
    };
    // プレイヤーリスト
    Collection<Player> players = Collections.singletonList(
        Player.builder()
            .playerId(playerId)
            .playerAttributes(playerAttributes)
            .build()
    );
    // リクエストをビルド
    StartMatchmakingRequest startMatchmakingRequest = StartMatchmakingRequest.builder()
        .configurationName("two-players-no-rule-match-config-test")
        .players(players)
        .build();
    // リクエスト送信してレスポンス取得
    StartMatchmakingResponse response = flexMatchClient.startMatchmaking(startMatchmakingRequest);
    System.out.println("チケット:" + response.matchmakingTicket());
  }
}

出力結果

チケット:MatchmakingTicket(TicketId=87420214-ab01-3a8a-f209-54b38e812468,ConfigurationName=two-players-no-rule-match-config-test, ConfigurationArn=arn:aws:gamelift:ap-northeast-1:123456789012:matchmakingconfiguration/two-players-no-rule-match-config-test, Status=QUEUED,StartTime=2024-03-30T14:12:13.504Z,Players=[Player(PlayerId=*** Sensitive Data Redacted ***, PlayerAttributes={playerLevel=AttributeValue(N=15.0)})])

まとめ

AWSのGameLiftのFlexMatchにJavaで接続してみました。

ひとまず無事接続できて、設定名を取得できました。

記事が全然ないので、手あたり次第試してみるしかない現状は変わらず…。

もっとAWS勉強して使いこなせるようになりたいです。

以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント

この記事のコメントはありません。