我有一个应用程序,它使用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
}
我仍然不确定为什么它首先会陷入这种状态。
答案 0 :(得分:0)
文档说当前游戏与房间连接的生命周期与GoogleApiClient的生命周期有关。所以也许你必须重新启动GoogleApiClient