ルームマッチメイキングを実行

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

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

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

(このサンプルは 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';
$roomMetaData = 'モンスター討伐、初心者歓迎';
$client = new Gs2MatchmakingClient($region, $credentials);
$request = [
        'matchmakingName' => $matchmakingName,
        'meta' => $roomMetaData,
        'accessToken' => $accessToken
];
$gathering = $client->roomCreateGathering($request)['item'];

// ギャザリング一覧を取得して参加したいルームを探す
$request = [
    'matchmakingName' => $matchmakingName,
    'accessToken' => $accessToken
];
$result = $client->roomDescribeGathering($request);
list($items, $nextPageToken) = array($result['items'], $result['nextPageToken']);

// $items にギャザリング一覧が
// $nextPageToken に次のページがある場合は続きを取得する為のトークンが取得されます
// $items[n]['meta'] に作成時に $roomMetaData で指定したギャザリングのメタ情報が含まれますので、参考情報として提示できます

// ギャザリングに参加する
$request = [
        'matchmakingName' => $matchmakingName,
        'gatheringId' => $gathering['gatheringId'],
        'accessToken' => $accessToken
];
$gathering = $client->roomJoinGathering($request)['item'];

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

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

// 参加しているギャザリングから抜ける
$request = [
        'matchmakingName' => $matchmakingName,
        'gatheringId' => $gathering['gatheringId'],
        'accessToken' => $accessToken
];
$client->roomLeaveGathering($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'
room_meta_data = 'モンスター討伐、初心者歓迎'
client = Gs2::Matchmaking::Client.new(region, CLIENT_ID, CLIENT_SECRET)
request = {
        'matchmakingName' => matchmaking_name,
        'meta' => room_meta_data,
        'accessToken' => access_token
}
gathering = client.room_create_gathering($request)['item']

# ギャザリング一覧を取得して参加したいルームを探す
request = {
    'matchmakingName' => matchmaking_name,
    'accessToken' => access_token
}
result = client.room_describe_gathering(request)
items, next_page_token = result['items'], result['nextPageToken']

# items にギャザリング一覧が
# nextPageToken に次のページがある場合は続きを取得する為のトークンが取得されます
# items[n]['meta'] に作成時に room_meta_data で指定したギャザリングのメタ情報が含まれますので、参考情報として提示できます

# ギャザリングに参加する
request = {
        'matchmakingName' => matchmaking_name,
        'gatheringId' => gathering['gatheringId'],
        'accessToken' => access_token
}
gathering = client.room_join_gathering(request)['item']

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

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

# 参加しているギャザリングから抜ける
request = {
        'matchmakingName' => matchmaking_name,
        'gatheringId' => gathering['gatheringId'],
        'accessToken' => access_token
}
client.room_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";
String roomMetaData = "モンスター討伐、初心者歓迎";
Gs2MatchmakingClient client = new Gs2MatchmakingClient(credentials)
        .withRegion(region);
RoomCreateGatheringRequest request = new RoomCreateGatheringRequest()
        .withMatchmakingName(matchmakingName)
        .withMeta(roomMetaData)
        .withAccessToken(accessToken);
RoomGathering result = client.roomCreateGathering(request).getItem();

// ギャザリング一覧を取得して参加したいルームを探す
RoomDescribeGatheringRequest request = new RoomDescribeGatheringRequest()
        .withMatchmakingName(matchmakingName);
RoomDescribeGatheringResult result = client.roomDescribeGathering(request);

// result.getItems() にメッセージ一覧が
// result.getNextPageToken() に次のページがある場合は続きを取得する為のトークンが取得されます
// result.getItems().get(n).getMeta() に作成時に roomMetaData で指定したギャザリングのメタ情報が含まれますので、参考情報として提示できます

RoomJoinGatheringRequest request = new RoomJoinGatheringRequest()
        .withMatchmakingName(matchmaking.getName())
        .withGatheringId(gathering.getGatheringId())
        .withAccessToken(accessToken2);
RoomGathering gathering = client.roomJoinGathering(request).getItem();

// gathering.getGatheringId() にマッチメイキング成立したギャザリングIDが、
// gathering.getJoinPlayer() に現在そのギャザリングに参加している人数が取得されます
// 参加者が規定の人数に達すると、Matchmaking に設定したコールバックURLに成立したギャザリングIDとユーザID一覧の情報が通知されます

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

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

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