タイトルにあるように、Google ゲーム サービスに接続して、2 つのデバイス間でデータを交換できました。すべて正常に動作していますが、1 つのことを除いては、切断コールバックです。
onPeersDisconnected と onP2PDisconnected の両方を傍受しようとしましたが、成功しませんでした。onP2PDisconnected メソッドは、インターネットから切断されたデバイスで呼び出されていますが、まだオンラインであるデバイスでは呼び出されていません (したがって、他のデバイスが切断されたことをプレーヤーに伝える方法はありません)。
試合が開始された後、2 番目のデバイスには偶発的な切断が通知されないようです。ユーザーがゲームを適切に閉じると、onPeersLeft メソッドが呼び出されます。
この「バグ」を克服するために、2 つのデバイス間の ping は本当に必要ですか? 私は何か間違ったことをしていますか?
私が使用するコードは次のとおりです。
void startQuickGame() {
// quick-start a game with 1 randomly selected opponent
final int MIN_OPPONENTS = 1, MAX_OPPONENTS = 1;
Bundle autoMatchCriteria = RoomConfig.createAutoMatchCriteria(MIN_OPPONENTS,
MAX_OPPONENTS, 0);
RoomConfig.Builder rtmConfigBuilder = RoomConfig.builder(this);
rtmConfigBuilder.setMessageReceivedListener(this);
rtmConfigBuilder.setRoomStatusUpdateListener(this);
rtmConfigBuilder.setAutoMatchCriteria(autoMatchCriteria);
mListener.switchToScreen(R.id.screen_wait);
keepScreenOn();
resetGameVars();
getGamesClient().createRoom(rtmConfigBuilder.build());
}
そしてここに単純なリスナーがあります:
@Override
public void onPeersDisconnected(Room room, List<String> peers) {
Log.d(TAG, "onPeersDisconnected");
updateRoom(room);
}
void updateRoom(Room room) {
Log.d(TAG, "UpdateRoom: "+room.getParticipants().size());
mParticipants = room.getParticipants();
}
@Override
public void onP2PDisconnected(String participantId) {
Log.d(TAG, "onP2PDisconnected");
}
public int getPartecipantsInRooom(){
if(mRoom != null)
return mRoom.getParticipants().size();
else
return -123456;
}
2 つのデバイスのいずれかが切断された後に getPartecipantsInRooom() を呼び出すと、常に 2 が返され、updateRoom が呼び出されることはないことに注意してください。