我有一个典型的GKSessionModeServer/GKSessionModeClient
设置。
当服务器拒绝与 的客户端连接尝试时denyConnectionFromPeer:
,将调用客户端的session:connectionWithPeerFailed:
方法,但随后它会收到GKPeerStateConnected
带有我服务器的 peerID 的状态更改。换句话说,客户端认为连接成功,而服务器没有。
这似乎与常识和文档不一致connectToPeer:withTimeout:
,其中说
如果与远程对等点的连接成功,
session:peer:didChangeState:
则为它成功连接到的每个对等点调用委托方法。如果连接失败或您的应用程序取消连接尝试,会话将调用委托的session:connectionWithPeerFailed:withError:
方法。
我知道这并不是说在连接失败的情况下不会调用状态更改回调,但是从客户端的角度来看,最终结果是失败的连接似乎会导致连接成功。
我紧紧抓住稻草尝试cancelConnectToPeer
从connectionWithPeerFailed
回调中调用,但没有结果。
客户端可以通过忽略 next 来解决这个问题GKPeerStateConnected
,但这很麻烦,并且在服务器再次开始接受连接时使重新连接变得复杂。
那么为什么客户端会话不能理解它已经结束了呢?