2013-07-11 45 views
5

Nel mio gioco multiplayer ho 2 avversari. Come può essere notificato 1 peer quando l'altro ha problemi di rete/disconnessione? Mi aspettavo che o onPeerLeft o onPeersDisconnected dove sparato, ma niente!Google Play Services: come gestire la disconnessione della rete peer?

In realtà ho intenzione di attuare una sorta di meccanismo di ping in modo che se un peer non riceve il messaggio ping entro un determinato periodo di tempo posso buttare qualcosa per l'utente (una finestra di dialogo che specifica che l'avversario scollegato.)

In alternativa, c'è un callback da ascoltare quando si verifica questo tipo di problema?

sul peer scollegato Sto utilizzando la onRealTimeMessageSent callback per rilevare se il peer non è in grado di inviare i dati, come segue:

@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 
    } 
} 

D'altra tra pari, nessun altro callback sono allevati (come onPeerLeft o onPeersDisconnected)

Qualche suggerimento? Grazie in anticipo!

+0

ok, finalmente ho optato per un meccanismo di ping-pong con un 'Timer' sheduling un' Timertask' ogni 5 secondi nel callback 'onRoomConnected'. Poi controllo l'ultimo tempo di ping ricevuto prima di inviare il nuovo messaggio, se il tempo trascorso è maggiore di un tempo di ping, allora sono in grado di lanciare il messaggio di errore corretto. Ogni altro suggerimento è ben accetto! –

risposta

0

Suona come si potrebbe non essere chiamata setRoomStatusUpdateListener (RoomStatusUpdateListener) prima di chiamare builder.build()

Edit: dove costruttore è la tua RoomConfig.Builder

+0

Sì, sto impostando il listener sia su un invito ricevuto che sul risultato dell'attività dall'intenzione del giocatore selezionato prima di chiamare 'build()'. 'onPeerLeft' e altri metodi sovrascritti vengono chiamati se la connessione di rete è ok !. Ma questo non è il caso. Con uno scambio ping posso controllare se sto inviando e ricevendo dati correttamente entro un intervallo di tempo. –

+0

onPeerDisconnected dovrebbe essere chiamato se l'altro giocatore è forzatamente disconnesso dal server, onPeerLeft verrà chiamato solo se è stata l'intenzione del giocatore di uscire. Potresti provare a mettere un toast su ciascuno dei metodi di interfaccia in modo da poter vedere quando vengono chiamati. – mmizzle9

0

Il peer remoto non sarà possibile ottenere alcun messaggio per indicare il collegamento interrotto. Questo è come progettato (quindi è possibile gestire una perdita temporanea del segnale).

Ciò è confermato da un rappresentante di Google qui:

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

Ho implementato un timeout a base di ping.

Problemi correlati