客户端GKSession认为它在denyConnectionFromPeer之后连接

时间:2011-03-16 18:27:23

标签: ios gamekit gksession

我有一个典型的GKSessionModeServer/GKSessionModeClient设置。

当服务器拒绝与denyConnectionFromPeer:的客户端连接尝试时,将调用客户端的session:connectionWithPeerFailed:方法,但随后它将使用我的服务器的peerID接收GKPeerStateConnected状态更改。换句话说,客户端认为连接成功,而服务器没有。

这似乎与常识和connectToPeer:withTimeout:的文档不一致,后者说

  

如果与远程对等方的连接成功,则为其成功连接的每个对等方调用委托“session:peer:didChangeState:方法”。如果连接失败或您的应用程序取消了连接尝试,则会话将调用委托的session:connectionWithPeerFailed:withError:方法。

我知道这并不是说在连接失败的情况下不会调用状态更改回调 ,但客户端的最终结果是连接失败似乎导致连接成功。

抓住吸管我尝试从cancelConnectToPeer回调中调用connectionWithPeerFailed,但没有结果。

客户端可以通过忽略下一个GKPeerStateConnected来解决这个问题,但这很麻烦,当服务器再次开始接受连接时会重新连接。

那么为什么客户会话无法理解它已经结束了呢?

1 个答案:

答案 0 :(得分:1)

我自己设计了相同类型的应用程序( GKSessionModeServer / GKSessionModeClient )。 当您拒绝与对等方的连接时,它将触发session:peer:didChangeState:委托,并将GKPeerConnectionState参数设置为GKPeerStateDisconnected。 你只需要在你的代码中正确处理这个问题 - 我从来没有对这个部分有任何问题。