Как правильно разорвать сеанс многорангового подключения?

Я полагал, что при многопользовательском подключении иногда возникают проблемы с повторным подключением. Всякий раз, когда я пытаюсь повторно подключиться к клиенту, с которым я только что отключился, ему не удается отправить новое приглашение клиенту. Я не уверен, как правильно отключиться от подключенных одноранговых узлов и как отключиться от всех подключенных одноранговых узлов, если приложение отключается из-за приостановленного режима. Может ли кто-нибудь помочь мне с этим, пожалуйста?

Например:

Если у меня подключены A и B, а B вышел за пределы диапазона, сеанс автоматически отключается из-за недостижимости и

- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state {
    case MCSessionStateNotConnected:
}

вызывается, я полагаю, что в этот момент обе стороны знают, что они отключились друг от друга, однако, когда B возвращается и хочет снова подключиться - приглашение отправляется, но другая сторона так и не получила его. Что именно произошло? Нужно ли вручную отключать сеанс, чтобы предотвратить это?


person Alex Su    schedule 24.04.2014    source источник
comment
возможный дубликат Multipeer Connectivity Framework - Lost Peer остается в сеансе   -  person ChrisH    schedule 02.05.2014


Ответы (1)


Я сбрасываю PeerID и сеанс на стороне браузера всякий раз, когда отключаюсь и хочу снова подключиться:

    // reset my PeerID.  Sometimes when trying to reconnect to the same Advertiser with the same PeerID nothing happens
    mcPeerID = [[MCPeerID alloc] initWithDisplayName:[UIDevice currentDevice].name];
    mcSession = [[MCSession alloc] initWithPeer:mcPeerID];
    mcSession.delegate = self;

    mcNearbyServiceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:mcPeerID serviceType:kMCServiceType];
    mcNearbyServiceBrowser.delegate = self;
    [mcNearbyServiceBrowser startBrowsingForPeers];

На стороне рекламодателя количество подключенных узлов правильно уменьшается при отключении, поэтому повторное подключение в качестве * другого * браузера, похоже, не оказывает негативного влияния (возможно, это неправильное кодирование, но оно работает). С новым PeerID я могу переподключиться без проблем. Я одновременно сбрасываю сеанс, чтобы синхронизировать их (т. е. я не хочу, чтобы сеанс был инициализирован из старого PeerID).

person Eric D'Souza    schedule 19.05.2014