coo*_*ita 0 ios multipeer-connectivity
我正在开发一款使用 MPC 的游戏。我让它工作了,但我发现连接(尤其是超过 2 个对等点)经常失败。对等方开始连接 (MCSessionState.Connecting),然后就不再连接 (MCSessionState.NotConnected)。其他时候,它就像一个魅力。
这只是框架的问题,还是我可能做错了什么?
我按照这个教程进行了操作。在我的实现中,玩家之一是浏览器,其余的是广告商。我想出的唯一解决方法是在获得 .NotConnected 标志时尝试再次连接,但有时它会尝试重新连接 3 或 4 次才能成功(花费太长时间)。
这是相关代码:
MPCManager(这个类是MCSessionDelegate、MCNearbyServiceBrowserDelegate、MCNearbyServiceAdvertiserDelegate)
func advertiser(advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: NSData?, invitationHandler: (Bool, MCSession) -> Void) {
self.invitationHandler = invitationHandler
delegate?.invitationWasReceived(peerID.displayName)
}
// MARK: MCSessionDelegate method implementation
func session(session: MCSession, peer peerID: MCPeerID, didChangeState state: MCSessionState) {
switch state{
case MCSessionState.Connected:
print("Connected to session: \(session)")
connectedPeers.append(peerID)
delegate?.connectedWithPeer(peerID)
case MCSessionState.Connecting:
print("Connecting to session: \(session)")
default:
delegate?.disconnectedFromPeer(peerID)
print("Did not connect to session: \(session)")
}
}
Run Code Online (Sandbox Code Playgroud)
代表类:
func invitationWasReceived(fromPeer: String) {
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
self.appDelegate.cManager!.invitationHandler(true, self.appDelegate.cManager!.session)
self.connectingLabel.text = "Connecting"
})
}
func connectedWithPeer(peerID: MCPeerID) {
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
self.connectingLabel.text = "Connected to \(peerID.displayName)"
if self.appDelegate.cManager!.connectedPeers.count == self.appDelegate.cManager!.foundPeers.count {
//game setup if all peers are connected
//stop browsing and advertising
}
})
}
func disconnectedFromPeer(peerID: MCPeerID) {
print("disconnected setup")
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
self.connectingLabel.text = "Couldn't connect to \(peerID.displayName)\n\nRetrying"
if self.isBrowser {
self.appDelegate.cManager!.browser.invitePeer(peerID, toSession: self.appDelegate.cManager!.session, withContext: nil, timeout: 20)
}
})
}
Run Code Online (Sandbox Code Playgroud)
- (void)session:(MCSession *)session didReceiveCertificate:(NSArray *)certificate fromPeer:(MCPeerID *)peerID certificateHandler:(void (^)(BOOL accept))certificateHandler
{
if (certificateHandler != nil)
{
certificateHandler(YES);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1917 次 |
| 最近记录: |