gpt4 book ai didi

ios - Multipeer Connectivity 如何获取广告对等点的名称?

转载 作者:行者123 更新时间:2023-11-29 05:41:22 26 4
gpt4 key购买 nike

iOS12 Swift 5.x

我使用多点连接。到目前为止,如果我以正确的顺序连接我的设备,它运行良好。

使用样板代码,将问题追踪到此处。

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()
}

我没有得到连接矩阵,我得到的是一个主人和一群奴隶。也许不是多点连接的目的,但仍然是一个很好的解决方案。

关于ios - Multipeer Connectivity 如何获取广告对等点的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com