Как отличить хост от клиента в iPhone по bluetooth с помощью GameKit

Я сделал многопользовательскую игру, используя GameKit Framework, где 2 iPhone / iPod могут подключаться друг к другу через Bluetooth и играть.

Я думаю о том, как выбрать, на каком устройстве можно будет играть первым. Таким образом, логичное решение - выбрать хост для подключения. Есть ли вообще сервер и клиент в GKSession? Все ли они равны? Какой путь мне выбрать, чтобы достичь того, что мне нужно?


person Dimitris    schedule 24.06.2009    source источник


Ответы (1)


По сути, вы можете настроить сеанс по своему усмотрению.

Из документации Apple:

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

Копия вашего приложения, действующего как сервер, инициализирует сеанс, вызывая initWithSessionID: displayName: sessionMode: с режимом сеанса GKSessionModeServer или GKSessionModePeer. После того, как приложение настроит сеанс, оно объявляет о службе, задав для свойства isAvailable сеанса значение YES.

Копия вашего приложения, действующего как клиент, инициализирует сеанс, вызывая initWithSessionID: displayName: sessionMode: с режимом сеанса GKSessionModeClient или GKSessionModePeer. После настройки сеанса ваше приложение ищет в сети рекламные серверы, задав для свойства isAvailable сеанса значение YES. Если сеанс настроен в режиме сеанса GKSessionModePeer, он также объявляет себя как сервер, как описано выше.

Следовательно, если вы используете GKSessionModePeer для инициализации сеанса, у вас есть одноранговые узлы (действующие и как сервер, и как клиент). Если вы хотите отличать сервер от его клиентов, инициализируйте его с помощью GKSessionModeServer.

С уважением.

person Massimo Cafaro    schedule 24.06.2009
comment
Но поскольку это ОДНО приложение, в моем коде мне придется принять решение: Сервер или Клиент. Но это не работает. Мне нужен один экземпляр приложения в качестве сервера и один в качестве клиента. Или просто найдите другой способ выбрать, какой игрок начнет играть первым ... - person Dimitris; 24.06.2009
comment
В этом случае вам нужно решить, произвольно или случайно (например, путем cossing toin), какой одноранговый узел будет сервером. Остальные будут клиентами. Чтобы увидеть реальный пример этого, см. Образец кода Apple GKTank. Из исходного кода GKTank: // Запустите многопользовательскую игру, войдя в состояние подбрасывания монет, чтобы определить, кто является сервером / клиентом. self.gameState = kStateMultiplayerCointoss; Код объясняет, как подбросить монету, и в зависимости от результата один из партнеров выступает в качестве клиента, а другой - в качестве сервера. - person Massimo Cafaro; 24.06.2009
comment
спасибо за совет! Я уже реализовал метод случайной прокрутки, при котором каждое устройство перекатывается, а затем сравнивает свое вращение с другим ... Это работает, но я обязательно посмотрю на GKTank. - person Dimitris; 24.06.2009