MultipeerConnectivity отклоняет соединение - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь установить Bluetooth-соединение между двумя устройствами, вот мой код:

var peerID: MCPeerID!
var mcSession: MCSession!
var mcAdvertiserAssistant: MCAdvertiserAssistant!

@IBAction func connectBlueTooth(_ sender: Any) {
    let actionSheet = UIAlertController(title: "משחק רשת", message: "מעוניין ליצור משחק חדש או להצטרף למשחק קיים?", preferredStyle: .actionSheet)

    actionSheet.addAction(UIAlertAction(title: "יצירת משחק חדש", style: .default, handler: {
        (action: UIAlertAction) in
        self.startHosting()
    }))

    actionSheet.addAction(UIAlertAction(title: "חיפוש משחק קיים", style: .default, handler: {
        (action: UIAlertAction) in
        self.joinSession()
    }))

    actionSheet.addAction(UIAlertAction(title: "ביטול", style: .default, handler: nil))

    if let popoverController = actionSheet.popoverPresentationController {
        popoverController.sourceView = self.view
        let constraintValue = AppConfigurator.getConstraintByDevice()

        popoverController.sourceRect = CGRect(x: self.view.bounds.maxX - constraintValue, y: self.view.bounds.maxY - (3.5 * constraintValue), width: 0, height: 0)
        popoverController.permittedArrowDirections = []
    }

    self.present(actionSheet, animated: true, completion: nil)
}

И расширения:

extension MainMenuVC: MCBrowserViewControllerDelegate {
    func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
        dismiss(animated: true, completion: nil)
    }

    func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
        dismiss(animated: true, completion: nil)
    }
}

extension MainMenuVC: MCSessionDelegate {
        func startHosting() {
            mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "CatchTheDragon", discoveryInfo: nil, session: mcSession)
            mcAdvertiserAssistant.start()
        }

        func joinSession() {
            let mcBrowser = MCBrowserViewController(serviceType: "CatchTheDragon", session: mcSession)
            mcBrowser.delegate = self
            present(mcBrowser, animated: true)
        }

        func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
            switch state {
            case MCSessionState.connected:
                print("Connected: \(peerID.displayName)")

            case MCSessionState.connecting:
                print("Connecting: \(peerID.displayName)")

            case MCSessionState.notConnected:
                print("Not Connected: \(peerID.displayName)")
            }
        }

        func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
            let userInfo = ["data" : data, "peerID": peerID] as [String : Any]
            DispatchQueue.main.async {
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "WPC_DidReceiveDataNotification"), object: nil, userInfo: userInfo)
            }
        }

        func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {}

        func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {}

        func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {}   
}

По какой-то причине устройство зависает в состоянии «подключения» в конечном итоге разрешается в состоянии «отклонено». Я предпочитаю не использовать MCNearbyServiceAdvertiserDelegate и MCNearbyServiceBrowser. Что мне здесь не хватает?

...