カスタムオートマッチメイキングを実行する

ここではサーバサイドSDKの解説をしています。

GS2 SDK for Unity のサンプルは GS2 SDK for Unity のページをご参照ください。

事前にGS2マネージメントコンソールか、SDKからMatchmakingをカスタムオート(CustomAuto)で作成しておきます。

(このサンプルは matchmaking-0001 という名前の Matchmaking が作成されているものとしています)

PHP

// アクセス先リージョンとGSIを設定
$region = 'ap-northeast-1';
$credentials = new Gs2Credentials(CLIENT_ID, CLIENT_SECRET);

// アクセストークンを取得
$serviceId = 'service-0001';
$userId = 'user-0001';
$authclient = new Gs2AuthClient($region, $credentials);
$request = [
 'serviceId' => $serviceId,
 'userId' => $userId
];
$result = $authclient->login($request);
$accessToken = $result['token'];

// マッチメイキングを実行する
$matchmakingName = 'matchmaking-0001';
$client = new Gs2MatchmakingClient($region, $credentials);
$request = [
        'matchmakingName' => $matchmakingName,
        'attribute1' => 10,
        'attribute2' => 20,
        'attribute3' => 30,
        'attribute4' => 40,
        'attribute5' => 50,
        'searchAttribute1Min' => 0, 'searchAttribute1Max' => 20,
        'searchAttribute2Min' => 10, 'searchAttribute2Max' => 30,
        'searchAttribute3Min' => 20, 'searchAttribute3Max' => 40,
        'searchAttribute4Min' => 30, 'searchAttribute4Max' => 50,
        'searchAttribute5Min' => 40, 'searchAttribute5Max' => 60,
        'accessToken' => $accessToken
];
$result = $client->customAutoDoMatchmaking($request)
$gathering = $result['item'];

// $result['done'] が true を返した場合はマッチメイキングは完了しています。
// その場合、$gathering['gatheringId'] にマッチメイキング成立したギャザリングIDが、
// $gathering['joinPlayer'] に現在そのギャザリングに参加している人数が取得されます
// 参加者が規定の人数に達すると、Matchmaking に設定したコールバックURLに成立したギャザリングIDとユーザID一覧の情報が通知されます
//
// $result['done'] が false の場合は検索処理が一定時間経過ものの、まだマッチメイキングは完了していません。
// $result['searchContext'] に検索の中断状態に関するトークンが返ります。

// 中断されたマッチメイキングを再開する
$request = [
        'matchmakingName' => $matchmakingName,
        'attribute1' => 10,
        'attribute2' => 20,
        'attribute3' => 30,
        'attribute4' => 40,
        'attribute5' => 50,
        'searchAttribute1Min' => 0, 'searchAttribute1Max' => 20,
        'searchAttribute2Min' => 10, 'searchAttribute2Max' => 30,
        'searchAttribute3Min' => 20, 'searchAttribute3Max' => 40,
        'searchAttribute4Min' => 30, 'searchAttribute4Max' => 50,
        'searchAttribute5Min' => 40, 'searchAttribute5Max' => 60,
        'accessToken' => $accessToken,
        'searchContext' => $gathering['searchContext']
];
$result = $client->customAutoDoMatchmaking($request)
$gathering = $result['item'];

// $result['done'] が true を返すまで繰り返します。

// ギャザリングに参加しているユーザID一覧をポーリングで取得する
$request = [
        'matchmakingName' => $matchmakingName,
        'gatheringId' => $gathering['gatheringId'],
        'accessToken' => $accessToken
];
$users = $client->customAutoDescribeJoinedUser($request)['items'];

// $users にギャザリングに参加中のユーザID一覧が返ります

// 参加しているギャザリングから抜ける
$request = [
        'matchmakingName' => $matchmakingName,
        'gatheringId' => $gathering['gatheringId'],
        'accessToken' => $accessToken
];
$client->customAutoLeaveGathering($request);

Ruby

# アクセス先リージョンを設定
region = 'ap-northeast-1'

# アクセストークンを取得
service_id = 'service-0001'
user_id = 'user-0001'
authclient = Gs2::Auth::Client.new(region, CLIENT_ID, CLIENT_SECRET)
request = {
 'serviceId' => service_id,
 'userId' => user_id
}
result = authclient->login(request)
access_token = result['token']

# マッチメイキングを実行する
matchmaking_name = 'matchmaking-0001'
client = Gs2::Matchmaking::Client.new(region, CLIENT_ID, CLIENT_SECRET)
request = {
        'matchmakingName' => matchmaking_name,
        'attribute1' => 10,
        'attribute2' => 20,
        'attribute3' => 30,
        'attribute4' => 40,
        'attribute5' => 50,
        'searchAttribute1Min' => 0, 'searchAttribute1Max' => 20,
        'searchAttribute2Min' => 10, 'searchAttribute2Max' => 30,
        'searchAttribute3Min' => 20, 'searchAttribute3Max' => 40,
        'searchAttribute4Min' => 30, 'searchAttribute4Max' => 50,
        'searchAttribute5Min' => 40, 'searchAttribute5Max' => 60,
        'accessToken' => access_token
}
result = client->custom_auto_do_matchmaking(request)
gathering = result['item']

# result['done'] が true を返した場合はマッチメイキングは完了しています。
# その場合、gathering['gatheringId'] にマッチメイキング成立したギャザリングIDが、
# gathering['joinPlayer'] に現在そのギャザリングに参加している人数が取得されます
# 参加者が規定の人数に達すると、Matchmaking に設定したコールバックURLに成立したギャザリングIDとユーザID一覧の情報が通知されます
#
# gathering['done'] が false の場合は検索処理が一定時間経過ものの、まだマッチメイキングは完了していません。
# result['searchContext'] に検索の中断状態に関するトークンが返ります。

# 中断されたマッチメイキングを再開する
request = {
        'matchmakingName' => matchmaking_name,
        'attribute1' => 10,
        'attribute2' => 20,
        'attribute3' => 30,
        'attribute4' => 40,
        'attribute5' => 50,
        'searchAttribute1Min' => 0, 'searchAttribute1Max' => 20,
        'searchAttribute2Min' => 10, 'searchAttribute2Max' => 30,
        'searchAttribute3Min' => 20, 'searchAttribute3Max' => 40,
        'searchAttribute4Min' => 30, 'searchAttribute4Max' => 50,
        'searchAttribute5Min' => 40, 'searchAttribute5Max' => 60,
        'accessToken' => access_token,
        'searchContext' => gathering['searchContext']
}
result = client->custom_auto_do_matchmaking(request)
gathering = result['item']

# result['done'] が true を返すまで繰り返します。

# ギャザリングに参加しているユーザID一覧をポーリングで取得する
request = {
        'matchmakingName' => matchmaking_name,
        'gatheringId' => gathering['gatheringId'],
        'accessToken' => access_token
}
users = client->custom_auto_describe_joined_user(request)['items']

# users にギャザリングに参加中のユーザID一覧が返ります

# 参加しているギャザリングから抜ける
request = {
        'matchmakingName' => matchmaking_name,
        'gatheringId' => gathering['gatheringId'],
        'accessToken' => access_token
}
client->custom_auto_leave_gathering(request)

Java

// アクセス先リージョンとGSIを設定
String region = "ap-northeast-1";
IGs2Credential credentials = new BasicGs2Credential(CLIENT_ID, CLIENT_SECRET);

// アクセストークンを取得
String serviceId = "service-0001";
String userId = "user-0001";
LoginRequest request = new LoginRequest()
 .withServiceId(serviceId)
 .withUserId(userId);
Gs2AuthClient authclient = new Gs2AuthClient(credentials)
 .withRegion(region);
LoginResult result = authclient.login(request);
String accessToken = result.getToken();

// マッチメイキングを実行する
String matchmakingName = 'matchmaking-0001';
Gs2MatchmakingClient client = new Gs2MatchmakingClient(credentials)
        .withRegion(region);
CustomAutoDoMatchmakingRequest request = new CustomAutoDoMatchmakingRequest()
        .withMatchmakingName(matchmakingName)
        .withAttribute1(10)
        .withAttribute2(20)
        .withAttribute3(30)
        .withAttribute4(40)
        .withAttribute5(50)
        .withSearchAttribute1Min(0).withSearchAttribute1Max(20)
        .withSearchAttribute2Min(10).withSearchAttribute2Max(30)
        .withSearchAttribute3Min(20).withSearchAttribute3Max(40)
        .withSearchAttribute4Min(30).withSearchAttribute4Max(50)
        .withSearchAttribute5Min(40).withSearchAttribute5Max(60)
        .withAccessToken(accessToken);
CustomAutoDoMatchmakingResult result = client.customAutoDoMatchmaking(request);
CustomAutoGathering gathering = result.getItem();

// result.getDone() が true を返した場合はマッチメイキングは完了しています。
// その場合、gathering.getGatheringId() にマッチメイキング成立したギャザリングIDが、
// gathering.getJoinPlayer() に現在そのギャザリングに参加している人数が取得されます
// 参加者が規定の人数に達すると、Matchmaking に設定したコールバックURLに成立したギャザリングIDとユーザID一覧の情報が通知されます
//
// result.getDone() が false の場合は検索処理が一定時間経過ものの、まだマッチメイキングは完了していません。
// result.getSearchContext() に検索の中断状態に関するトークンが返ります。

// 中断されたマッチメイキングを再開する
CustomAutoDoMatchmakingRequest request = new CustomAutoDoMatchmakingRequest()
        .withMatchmakingName(matchmakingName)
        .withAttribute1(10)
        .withAttribute2(20)
        .withAttribute3(30)
        .withAttribute4(40)
        .withAttribute5(50)
        .withSearchAttribute1Min(0).withSearchAttribute1Max(20)
        .withSearchAttribute2Min(10).withSearchAttribute2Max(30)
        .withSearchAttribute3Min(20).withSearchAttribute3Max(40)
        .withSearchAttribute4Min(30).withSearchAttribute4Max(50)
        .withSearchAttribute5Min(40).withSearchAttribute5Max(60)
        .withAccessToken(accessToken)
        .withSearchContext(result.getSearchContext());
CustomAutoDoMatchmakingResult result = client.customAutoDoMatchmaking(request);
CustomAutoGathering gathering = result.getItem();

// result.getDone() が true を返すまで繰り返します。

// ギャザリングに参加しているユーザID一覧をポーリングで取得する
CustomAutoDescribeJoinedUserRequest request = new CustomAutoDescribeJoinedUserRequest()
        .withMatchmakingName(matchmakingName)
        .withGatheringId(gathering.getGatheringId())
        .withAccessToken(accessToken);
List<String> users = client.customAutoDescribeJoinedUser(request).getItems();

// users にギャザリングに参加中のユーザID一覧が返ります

// 参加しているギャザリングから抜ける
CustomAutoLeaveGatheringRequest request = new CustomAutoLeaveGatheringRequest()
        .withMatchmakingName(matchmakingName)
        .withGatheringId(gathering.getGatheringId())
        .withAccessToken(accessToken);
client.customAutoLeaveGathering(request);