Одноранговый режим 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 и сравнить, но это должен быть отличный прерыватель связей.