Размещенные соответствия

Размещенные соответствия позволяют Вашей игре использовать matchmaking службу Центра Игры, чтобы найти проигрыватели, но использовать Ваш собственный сервер для подключения плееров друг к другу. Размещенные соответствия требуют, чтобы Вы реализовали свой собственный низкоуровневый сетевой код, потому что Игровые серверы Центра не вовлечены в игру соответствия вообще. Однако размещенные игры предлагают большие размеры соответствия и возможность добавить Ваш собственный сервер в каждое соответствие.

Соответствие проигрывателей для размещенного соответствия

Код, который Вы пишете для размещенного matchmaking, подобен коду, который Вы пишете для соответствий в реальном времени. Прежде чем Вы попытаетесь создать игру, использующую размещенные соответствия, необходимо уже быть знакомы с matchmaking в реальном времени. Критическое различие между этими двумя моделями - то, который разместил идентификаторы проигрывателя возвратов matchmaking вместо завершенного объекта соответствия. Ваша игра тогда подключает тот плеер к Вашему собственному серверу. Когда одно устройство в соответствии должно связаться с другими, Ваш сервер должен соответствовать сетевой адрес того проигрывателя к идентификатору проигрывателя и, подобный соответствию, выполнить маршрутизацию.

Таблица 9-1 перечисляет наиболее распространенные методы для matchmaking в реальном времени и соответствующие методы или подробные данные реализации для размещенного matchmaking.

Табличные 9-1  Методы для реализации размещенного matchmaking

matchmaking в реальном времени

Размещенный matchmaking

Ваш делегат контроллера представления реализует matchmakerViewController:didFindMatch: метод для получения соответствия.

Ваш делегат реализует matchmakerViewController:didReceiveAcceptFromHostedPlayer: метод для получения уведомления, что проигрыватель принял приглашение присоединиться к соответствию.

Ваши программируемые matchmaking кодируют вызовы findMatchForRequest:withCompletionHandler: создать новое соответствие.

Ваши программируемые вызовы кода findPlayersForHostedMatchRequest:withCompletionHandler: найти ряд новых проигрывателей для соответствия.

Ваши программируемые вызовы кода addPlayersToMatch:matchRequest:completionHandler: добавить проигрыватели к соответствию.

Ваши программируемые вызовы кода findPlayersForHostedMatchRequest:withCompletionHandler: найти ряд новых проигрывателей для соответствия. Поскольку Вы реализуете свою собственную архитектуру соответствия, необходимо решить при совершении этого вызова, добавляете ли Вы проигрыватели к существующему размещенному соответствию.

Ваша игра получает приглашение.

GKInvite объект hosted свойство говорит Вам, является ли соответствие размещенным соответствием. Как правило, это имеет значение, только если Ваша игра реализует и размещенные и неразмещенные соответствия.

Размещенный обзор соответствий

По умолчанию, когда Вы выполняете процесс matchmaking, Гэйм Кит возвращает экземпляр GKMatch объект на каждом устройстве соединился с соответствием. Каждое устройство тогда использует свой объект соответствия связаться с другими участниками. Для большинства игр это поведение по умолчанию точно, что Вы хотите. GKMatch класс абстрагирует топологию базовой сети так, чтобы Ваша игра могла просто фокусироваться на передающих данных другим участникам без Вас имеющий необходимость волноваться о том, как передаются данные.

Однако некоторые игры могут хотеть поддерживать больше проигрывателей, чем максимальное количество поддерживаемых проигрывателей на Игровом Центре или могут хотеть, чтобы их собственный сервер решил соответствие в арбитражном порядке. В этих случаях можно все еще использовать matchmaking для нахождения проигрывателей для размещенного соответствия. Размещенное соответствие не использует GKMatch объекты. Вместо этого каждая копия Вашей игры получает идентификаторы проигрывателя для всех проигрывателей в соответствии. Ваша игра тогда предпринимает дополнительные шаги для подключения плееров к серверу.

Создание размещенного соответствия требует, чтобы Ваша игра реализовала все низкоуровневые сети, требуемые для Вашей игры. В частности необходимо сделать все следующее в игре:

Создание размещенного соответствия Используя контроллер представления антрепренера

Для создания размещенного соответствия с помощью антрепренера просматривают контроллер, Вы устанавливаете контроллер представления hosted свойство к YES прежде, чем представить контроллер представления. Перечисление 9-1 показывает простой пример этого.

Перечисление 9-1  , Создающее размещенное соответствие

- (IBAction)hostMatch: (id) sender
{
    GKMatchRequest *request = [[GKMatchRequest alloc] init];
    request.minPlayers = 2;
    request.maxPlayers = 2;
 
    GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithMatchRequest:request];
    mmvc.matchmakerDelegate = self;
    mmvc.hosted = YES;
 
    [self presentViewController:mmvc animated:YES completion:nil];
}

Когда контроллер представления размещается, Ваш делегат реализует matchmakerViewController:didReceiveAcceptFromHostedPlayer: метод для обработки нового проигрывателя. Ваш делегат должен вести себя по-другому, в зависимости от которого устройства работает Ваша игра:

Отклонение контроллера представления MatchMaking

После того, как все приглашенные приняли запрос соответствия Вашего приложения, Вы отправляете информацию о проигрывателях к серверу, и затем отправляете сообщение начинать-игры всем приглашенным. Когда приглашенные получают сообщение начинать-игры, они должны вручную закрыть контроллер представления для своего приложения.