我有一個應用程序,使用谷歌播放遊戲服務實時多人自動匹配播放器。創建房間通常是成功的,多人遊戲將正常工作,除非互聯網連接在嘗試創建房間時掉線。谷歌播放遊戲服務實時多人空間錯誤STATUS_OPERATION_IN_FLIGHT
如果互聯網在創建房間時掉線,我會在RoomUpdateListener onRoomCreated(...)返回一個STATUS_REAL_TIME_CONNECTION_FAILED錯誤。
當我嘗試創建另一個房間時,我的應用程序就陷入了STATUS_OPERATION_IN_FLIGHT狀態。我需要清除應用程序數據以從中恢復。
看起來房間的原始創建失敗會將其置於不良狀態,並且不允許創建另一個房間。除了致電Games.RealTimeMultiplayer.leave(...)之外,我沒有看到任何取消房間創作的方法,這需要我沒有的房間ID,因爲房間創建從未成功。
這裏是我如何設置我的RoomConfig:
final Bundle autoMatchBundle = RoomConfig.createAutoMatchCriteria(1, 1, 0);
final RoomConfig.Builder roomConfigBuilder = RoomConfig.builder(roomUpdateListener);
roomConfigBuilder.setMessageReceivedListener(realTimeMessageReceivedListener);
roomConfigBuilder.setRoomStatusUpdateListener(roomStatusUpdateListener);
roomConfigBuilder.setAutoMatchCriteria(autoMatchBundle);
roomConfig = roomConfigBuilder.build();
這裏是我正在創建一個房間:
Games.RealTimeMultiplayer.create(googleApiClient, roomConfig);
解決方案:我重新連接googleApiClient進入此狀態時。
我做的,我RoomUpdateListener以下onRoomConnected實現:
@Override
public void onRoomCreated(final int statusCode, final Room room) {
if (statusCode != GamesClient.STATUS_OK) {
if (statusCode == GamesClient.STATUS_OPERATION_IN_FLIGHT) {
googleApiClient.reconnect();
}
// OMITTED ERROR CASE CODE
return;
}
// OMITTED SUCCESS CASE CODE
}
我仍然不知道爲什麼它陷在這種狀態下在首位。
出於好奇,是'onRoomCreated'叫? – Ogen
另外,文檔中說明**當前遊戲與房間的連接的生命週期必然與此GoogleApiClient的生命週期有關。**因此,也許您必須重新啓動「GoogleApiClient」。 – Ogen
謝謝@Clay!您的評論讓我找到了一個解決方案。把它寫成答案,我會接受它。 – user3376158