0

私は典型的なGKSessionModeServer/GKSessionModeClientセットアップをしています。

サーバーが を使用したクライアント接続試行を拒否するとdenyConnectionFromPeer:、クライアントのsession:connectionWithPeerFailed:メソッドが呼び出されGKPeerStateConnectedますが、サーバーのピア ID で状態変更を受け取ります。つまり、クライアントは接続が成功したと見なしますが、サーバーは成功しません。

これは、常識や のドキュメントと矛盾しているようですconnectToPeer:withTimeout:

リモート ピアへの接続が成功すると、接続に成功した各ピアに対してデリゲートのsession:peer:didChangeState:メソッドが呼び出されます。接続が失敗した場合、またはアプリケーションが接続試行をキャンセルした場合、セッションはデリゲートのsession:connectionWithPeerFailed:withError:メソッドを呼び出します。

これは、接続に失敗した場合に状態変更のコールバックが呼び出されないということではありませんが、クライアントの観点からは、接続に失敗すると接続が成功したように見えます。

ストローを握りしめcancelConnectToPeerてコールバックから呼び出してみましたがconnectionWithPeerFailed、結果はありませんでした。

クライアントは next を無視することでこれを回避できますがGKPeerStateConnected、これは面倒であり、サーバーが再び接続の受け入れを開始したときの再接続が複雑になります。

では、クライアント セッションが終了したことを認識できないのはなぜでしょうか。

4

1 に答える 1

1

私は同じ種類のアプリケーションを自分で設計しました ( GKSessionModeServer/GKSessionModeClient )。ピアへの接続を拒否すると、session:peer:didChangeState:デリゲートがトリガーされ、GKPeerConnectionState 引数が に設定されGKPeerStateDisconnectedます。コードでこれを適切に処理する必要があるだけです。その部分で問題が発生したことはありません。

于 2011-03-26T07:28:53.540 に答える