私は典型的なGKSessionModeServer/GKSessionModeClientセットアップをしています。
サーバーが を使用したクライアント接続試行を拒否するとdenyConnectionFromPeer:、クライアントのsession:connectionWithPeerFailed:メソッドが呼び出されGKPeerStateConnectedますが、サーバーのピア ID で状態変更を受け取ります。つまり、クライアントは接続が成功したと見なしますが、サーバーは成功しません。
これは、常識や のドキュメントと矛盾しているようですconnectToPeer:withTimeout:。
リモート ピアへの接続が成功すると、接続に成功した各ピアに対してデリゲートの
session:peer:didChangeState:メソッドが呼び出されます。接続が失敗した場合、またはアプリケーションが接続試行をキャンセルした場合、セッションはデリゲートのsession:connectionWithPeerFailed:withError:メソッドを呼び出します。
これは、接続に失敗した場合に状態変更のコールバックが呼び出されないということではありませんが、クライアントの観点からは、接続に失敗すると接続が成功したように見えます。
ストローを握りしめcancelConnectToPeerてコールバックから呼び出してみましたがconnectionWithPeerFailed、結果はありませんでした。
クライアントは next を無視することでこれを回避できますがGKPeerStateConnected、これは面倒であり、サーバーが再び接続の受け入れを開始したときの再接続が複雑になります。
では、クライアント セッションが終了したことを認識できないのはなぜでしょうか。