Google Play游戏服务实时多人游戏室错误STATUS_OPERATION_IN_FLIGHT

时间:2014-03-04 07:51:26

标签: java android google-play-services google-play-games

我有一个应用程序,它使用Google Play游戏服务实时多人游戏来自动匹配玩家。创建房间通常是成功的,多人游戏将正常工作,除非在尝试创建房间时互联网连接中断。

如果互联网在创建房间时掉线,我会在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

}

我仍然不确定为什么它首先会陷入这种状态。

1 个答案:

答案 0 :(得分:0)

文档说当前游戏与房间连接的生命周期与GoogleApiClient的生命周期有关。所以也许你必须重新启动GoogleApiClient