如何正确拆除多路连接会话?

时间:2014-04-24 18:58:09

标签: ios objective-c multipeer-connectivity

我认为多重连接有时会出现重新连接问题。每当我尝试重新连接到我刚刚断开连接的客户端时,它都无法向客户端发送新邀请。我不确定与连接的对等设备断开连接的正确方法是什么,以及如果应用程序因挂起模式而被杀死,如何与所有连接的对等设备断开连接。有人可以帮我这个吗?

例如:

如果我连接了A和B,并且B走出范围,会话由于无法访问而自动断开连接

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

被调用,我相信在这一点上,双方都知道他们已经相互脱离,但是,当B回头并想要重新连接时 - 邀请被发送但是另一方从未收到邀请。到底发生了什么?我是否必须手动断开会话才能阻止此操作?

1 个答案:

答案 0 :(得分:3)

每当我断开连接并想要重新连接时,我都会在浏览器端重置PeerID和Session:

    // 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];

在广告客户端,connectedPeers计数在断开连接时正确递减,因此重新连接为*不同的*浏览器似乎不会产生负面影响(可能这不是正确的编码,但它作品)。使用新的PeerID,我可以毫无问题地重新连接。我同时重置会话以使它们保持同步(即,我不希望会话从旧的PeerID初始化)。