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

Я хочу установить соединение Bluetooth между двумя айфонами с 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 ответа

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

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

Другие вопросы по тегам