У меня типичная настройка GKSessionModeServer/GKSessionModeClient
.
Когда сервер отклоняет попытку подключения клиента с помощью denyConnectionFromPeer:
, вызывается метод session:connectionWithPeerFailed:
клиента, но затем он получает изменение состояния GKPeerStateConnected
с peerID моего сервера.Другими словами, клиент считает, что соединение установлено успешно, а сервер - нет.
Кажется, что это противоречит здравому смыслу и документации для connectToPeer:withTimeout:
, в которой говорится
Еслисоединение с удаленным узлом установлено успешно, метод делегата 'session:peer:didChangeState:
вызывается для каждого узла, к которому он успешно подключен.Если соединение не установлено или ваше приложение отменяет попытку соединения, сеанс вызывает метод делегата session:connectionWithPeerFailed:withError:
.
Я знаю, что это не означает, что обратный вызов изменения состояния не будет вызывается в случае сбоя соединения, но чистый результат с точки зрения клиента состоит в том, что сбой соединения, по-видимому, приводит к успешному соединению.
Сцепление за соломинку Я пытался позвонить cancelConnectToPeer
из обратного вызова connectionWithPeerFailed
, без результата.
Клиент может обойти эту проблему, игнорируя следующие GKPeerStateConnected
, но это усложняет и усложняет повторное подключение, когда сервер снова начинает принимать подключения.
Так почему же сеанс клиента не может понять, что он окончен?