问题描述
我正在开发一个简单的Tic Tac Toe
游戏。
我正在尝试使用MultipeerConnectivity
将两个设备连接在一起,这是我的代码:
AppDelegate
:
var mpcHandler = MPCHandler()
MPCHandler
:
class MPCHandler: NSObject {
// Variables
var peerID: MCPeerID!
var session: MCSession!
var browser: MCbrowserViewController!
var advertiser: MCAdvertiserAssistant?
// Functions
func setupPeerWithdisplayName (displayName: String) {
self.peerID = MCPeerID(displayName: displayName)
}
func setupSession() {
self.session = MCSession(peer: self.peerID,securityIdentity: nil,encryptionPreference: MCEncryptionPreference.optional)
self.session.delegate = self
}
func setupbrowser() {
self.browser = MCbrowserViewController(serviceType: "TicTacToe",session: self.session)
}
func advertiseSelf(advertise: Bool) {
if advertise {
self.advertiser = MCAdvertiserAssistant(serviceType: "TicTacToe",discoveryInfo: nil,session: self.session)
self.advertiser?.start()
}
else {
self.advertiser?.stop()
self.advertiser = nil
}
}
}
// Extensions
extension MPCHandler: MCSessionDelegate {
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: [String : Any] = ["data": data,"peerID:": peerID]
dispatchQueue.main.async {
NotificationCenter.default.post(name: Notification.Name("deviceDidReceiveDatanotification"),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,at localURL: URL?,withError error: Error?) {
}
}
MainVC
:
var appDelegate: AppDelegate?
// Overridden Functions
override func viewDidLoad() {
super.viewDidLoad()
self.appDelegate = UIApplication.shared.delegate as? AppDelegate
self.appDelegate?.mpcHandler.setupPeerWithdisplayName(displayName: UIDevice.current.name)
self.appDelegate?.mpcHandler.setupSession()
self.appDelegate?.mpcHandler.advertiseSelf(advertise: true)
}
@IBAction func barButtonpressed(_ sender: UIBarButtonItem) {
if self.appDelegate?.mpcHandler.session != nil {
self.appDelegate?.mpcHandler.setupbrowser()
self.appDelegate?.mpcHandler.browser.delegate = self
self.present(self.appDelegate?.mpcHandler.browser ?? UIViewController(),animated: true,completion: nil)
}
}
Info.plist
:
为Bonjour Services
添加了_TicTacToe._tcp
和_TicTacToe._udp
在调试时,这些设备会找到彼此,但是在尝试连接时,连接的设备会陷入Connecting
状态,而另一台设备则不会收到批准连接的通知。
几秒钟后,它表明连接被拒绝。
问题可能是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)