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