2014-03-04 70 views
1

我有一個應用程序,使用谷歌播放遊戲服務實時多人自動匹配播放器。創建房間通常是成功的,多人遊戲將正常工作,除非互聯網連接在嘗試創建房間時掉線。谷歌播放遊戲服務實時多人空間錯誤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 

} 

我仍然不知道爲什麼它陷在這種狀態下在首位。

+0

出於好奇,是'onRoomCreated'叫? – Ogen

+0

另外,文檔中說明**當前遊戲與房間的連接的生命週期必然與此GoogleApiClient的生命週期有關。**因此,也許您必須重新啓動「GoogleApiClient」。 – Ogen

+0

謝謝@Clay!您的評論讓我找到了一個解決方案。把它寫成答案,我會接受它。 – user3376158

回答

0

該文檔說當前遊戲與房間的連接的生命週期必然與此GoogleApiClient的生命週期有關。所以也許你必須重新啓動GoogleApiClient