2012-01-22 1 views
2

Я хочу установить соединение Bluetooth между двумя iPhone с GKSession без GKPeerPickerController и без нажатия любой кнопки «соединить» с обеих сторон.GKSession: как автоматически подключить двух пэров без кнопки/подтверждения?

Я использую следующий код:

currentSessionAuto = [[GKSession alloc] initWithSessionID: @"instant-friend-auto" 
currentSessionAuto.delegate = self; 
currentSessionAuto.available = YES; 
currentSessionAuto.disconnectTimeout = 5; 
[currentSessionAuto setDataReceiveHandler: self withContext:nil]; 

Когда приложение начиная с обеих сторон, - (Недействительными) сессии: (GKSession *) сессии равный: (NSString *) peerID didChangeState : (GKPeerConnectionState) состояние вызывается с обеих сторон с состоянием «GKPeerStateAvailable».

С «классическим» приложением всплывающее окно отображается с обеих сторон, чтобы запросить соединение, и большую часть времени оба «пользователя» не нажимают кнопку подключения одновременно.

Если у меня есть «автоматическое соединение», мне нужен механизм, чтобы инициировать сеанс только с одной стороны, потому что без этого механизма будут инициированы два сеанса и возникнут ошибки.

Любая идея/помощь?

ответ

4

Посмотрите на GKSessionP2P, демонстрационное приложение, которое иллюстрирует специальные сетевые функции GKSession. Приложение обе рекламирует себя в локальной сети и автоматически подключается к доступным одноранговым узлам, устанавливая одноранговую сеть.

+0

Tx для связи. У меня примерно одинаковый код ... Я не понимаю, почему в коде (в доступном состоянии) используется темп (0,5 с)? – fvisticot

+0

Fair вопрос. Кажется, что connectToPeer более успешно после ожидания 0,5 с. – Marco

+1

Этот тайм-аут, вероятно, должен дать так, что соединение имеет шанс установить за кулисами перед обновлением таблицы. Тайм-ауты, подобные этому, - плохая практика. – openfrog

1

Вот идея: иметь сверстника с наименьшим соединением peerID. Вам нужно будет преобразовать строку PeerID в int и сравнить, но это должен быть отличный таймер.

+0

Зачем вам это нужно? – openfrog

+0

Потому что это был бы верный способ выбрать, какой именно клиент инициирует соединение. Только одно из чисел может быть низким числом (peerID не может быть равным). Таким образом, низкое соединение соединяется с высоким. Это полностью решает проблему OP. Думаю об этом. –

Смежные вопросы