Одноранговый режим GKSession: Как автоматически соединить два одноранговых узла без какой-либо кнопки / подтверждения? - PullRequest
2 голосов
/ 22 января 2012

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

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 30 января 2012

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

1 голос
/ 06 ноября 2012

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

...