2013-07-11 13 views
5

私のマルチプレイヤーゲームには2人の対戦相手がいます。他の1人がネットワークに問題または切断をしたときに、どのようにして1ピアに通知することができますか?私はどちらかというと、onPeerLeftまたはonPeersDisconnectedのいずれかが、どこでも解雇されることを期待していました。Google Playサービス:ピアネットワークの切断を処理するにはどうすればよいですか?

実は私は1つのピアが、私は、ユーザーに何かを投げることができ、指定時間内にpingメッセージを受信しない場合ようにpingメカニズムのいくつかの種類を実装するつもりです(切り離さその相手を指定するダイアログが表示されます。)

代わりに、この種の問題が発生したときに聴くコールバックがありますか?私は、ピアがデータを送信することができないかどうかを検出するためにonRealTimeMessageSentコールバックを使用しています切断ピアで

は、次のように:他のピア上

@Override 
public void onRealTimeMessageSent(int statusCode, int token, String arg2) { 
    //f the peer can't send data 
    if (statusCode == GamesClient.STATUS_REAL_TIME_MESSAGE_SEND_FAILED) { 
     //here I show an error dialog and move out of game 
    } 
} 

、他のコールバックは、(onPeerLeftonPeersDisconnectedとして提起されていません)

何か提案がありますか?前もって感謝します!あなたがbuilder.build()を呼び出す前にsetRoomStatusUpdateListener(RoomStatusUpdateListener)を呼び出していない可能性がありますように

+0

ok、最後に、 'onRoomConnected'コールバックで' Timer'が5秒ごとに 'Timertask'をスケジュールするようにping-pongメカニズムを選択しました。その後、新しいメッセージを送信する前に最後に受信したping時間を確認します。経過時間がping時間を超えている場合は、適切なエラーメッセージをスローすることができます。他の提案は歓迎されます! –

答えて

0

サウンズ

編集:ビルダーは、あなたのRoomConfig.Builder

+0

はい、 'build()'を呼び出す前に、受信した招待状と選択したプレイヤーの意図からの活動結果の両方でリスナーを設定しています。 'onPeerLeft'と他のオーバーライドされたメソッドは、ネットワーク接続がOKならば呼び出されます。しかし、そうではありません。私は時間の範囲内で正しくデータを送受信しているかどうかをping交換で監視することができます。 –

+0

onPeerDisconnectedは、他のプレイヤーが強制的にサーバから切断された場合に呼び出されるはずです.OnPeerLeftは、プレイヤーの終了を意図した場合にのみ呼び出されます。それぞれのインターフェースメソッドにトーストを入れて、いつ呼び出されるかを見ることができます。 – mmizzle9

0

ある場合、リモートピアは、任意のメッセージを示すために得ることはありません接続が切断されました。これは設計通りです(したがって、一時的な信号損失を処理することができます)。

これは、ここでは、Googleの代表者によって確認されています

https://github.com/playgameservices/cpp-android-basic-samples/issues/53

私がpingベースのタイムアウトを実装しました。

関連する問題