[英]set device name to a peer in session Multipeer connectivity swift3
[英]Multipeer Connectivity how to get the name of the advertising peer?
iOS12 Swift 5.x
我使用Multipeer Connectivity。 到目前為止,如果我以正確的順序連接我的設備,它運行良好。
使用鍋爐板代碼,將問題追蹤到這里。
func setupStream() {
do {
outputStream = try session.startStream(withName: "chat", toPeer: session.connectedPeers.first!)
for debug in session.connectedPeers {
print("Peer connected \(debug.displayName)")
}
} catch {
print("unable to open stream")
}
if let outputStream = outputStream {
outputStream.delegate = self
outputStream.schedule(in: RunLoop.main, forMode:RunLoop.Mode.default)
outputStream.open()
}
}
現在,如果我首先啟動廣告客戶,然后是瀏覽器...它運行良好,非常好。 但是,如果我在廣告客戶之前啟動瀏覽器,他們似乎互相看到了......即使我不是從他們那里做廣告,也不是來自他們的服務並連接到錯誤的客戶端。
怎么說連接到同行廣告服務而不是任何人和你找到的每個人...
iOS 12,Swift 5
找到了我在這里發布的解決方案,一個很簡單的解決方案。 當我通過一些發現信息來宣傳該服務時。 這里的關鍵是發現變量。
Block看起來如此。
class ColorService : NSObject {
lazy var session : MCSession = {
let session = MCSession(peer: self.myPeerId, securityIdentity: nil, encryptionPreference: .required)
session.delegate = self
return session
}()
var delegate : ColorServiceDelegate?
// Service type must be a unique string, at most 15 characters long
// and can contain only ASCII lowercase letters, numbers and hyphens.
private let ColorServiceType = "example-color"
private let myPeerId = MCPeerID(displayName: UIDevice.current.name)
private let serviceAdvertiser : MCNearbyServiceAdvertiser
override init() {
let discover:[String:String] = ["prime":myPeerId.displayName]
self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: myPeerId, discoveryInfo: discover, serviceType: ColorServiceType)
super.init()
self.serviceAdvertiser.delegate = self
self.serviceAdvertiser.startAdvertisingPeer()
}
deinit {
self.serviceAdvertiser.stopAdvertisingPeer()
}
func stopAdvertising() {
self.serviceAdvertiser.stopAdvertisingPeer()
}
另一方面,當我正在尋找服務時,我只邀請具有發現集的同伴,顯然使用所述信息作為同伴邀請。
extension ColorSearch : MCNearbyServiceBrowserDelegate {
func browser(_ browser: MCNearbyServiceBrowser, didNotStartBrowsingForPeers error: Error) {
NSLog("%@", "didNotStartBrowsingForPeers: \(error)")
}
func browser(_ browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) {
NSLog("%@", "foundPeer: \(peerID)")
NSLog("%@", "invitePeer: \(peerID)")
NSLog("%@", "discoverInfo: \(info)")
primePeer = info!["prime"]
if primePeer != nil {
if peerID.displayName == primePeer {
browser.invitePeer(peerID, to: self.session, withContext: nil, timeout: 10)
}
}
}
func browser(_ browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) {
NSLog("%@", "lostPeer: \(peerID)")
}
func disconnect() {
self.session.disconnect()
}
我沒有連接矩陣,我得到一個主人和一堆奴隸。 也許不是多重連接的意圖,但一個好的解決方案永遠不會少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.