检测其他玩家是否意外离开(例如因为网络断开),并重新连接 - Google Play实时多人游戏

6

我正在实现Google Play游戏服务的实时多人游戏。

目前,如果我在一个客户端上关闭WIFI,则另一个客户端无法检测到连接已断开。没有调用PeerDisconnect事件。

1 - API是否提供任何内容来检查对等方是否仍然连接?

2 - 是否有任何方法让玩家重新连接到房间?

1个回答

2

1 - API是否提供检查对等方是否仍然连接的功能?

连接玩家中所述,您可以使用RoomStatusUpdateListener回调来监视参与者的连接状态。如下所述:

要在所有玩家连接时收到通知,您的游戏可以使用RoomUpdateListener.onRoomConnected()回调。您的游戏还可以使用RoomStatusUpdateListener回调来监视参与者的连接状态。根据参与者的连接状态,您的游戏可以决定是否开始或取消游戏会话。

2 - 是否有任何方法让玩家重新连接到房间?

实时多人游戏- 游戏过程中指出:

一旦满足房间所需的参与者数量,该房间被视为“已填充”,并且游戏过程可以开始。参与者加入房间后,您的游戏可以允许他们离开房间(从而将其排除在游戏之外)。但是,“已填充”的房间不允许新的玩家加入(即使是为了填补参与者离开的位置)。

此外,参考实时多人游戏的最佳实践

如果您没有适当地离开房间,则Google Play游戏服务将继续向客户端发送事件和邀请通知。每当发生以下情况之一时,您应该离开活动房间:

  • 游戏过程结束(例如,玩家赢得比赛)。
  • 当您的游戏进入后台时。
  • 在Android上,当:
    • 玩家在等待室UI中取消游戏时。
    • onActivityResult()回调中返回的响应代码为GamesActivityResultCodes.RESULT_LEFT_ROOM
    • 调用disconnect()并离开房间。Activity的onStop()被调用。这可能表明您的Activity正在被销毁。

希望这些链接涵盖了您所有的问题。祝编码愉快! :)


1
1 - 谢谢,我会研究一下,即如果因为某个参与者的互联网关闭而导致连接状态发生变化。2 - 因此,简短的答案是离开后没有办法重新连接到同一个房间。 :) - Uzi
1
更新:测试了你的解决方案对于第一个问题——当参与者的互联网连接断开,甚至只是在数据和Wi-Fi之间切换时,参与者的连接状态不会改变。它仍然显示参与者已连接,直到你在其他参与者上调用离开房间。但现在你无法发送任何消息! - Uzi
我也遇到了同样的问题,实现@Teyam建议的RoomStatusUpdateListener回调并没有帮助。当对等方失去连接时,API根本不会调用任何回调。我计划通过在客户端上设置看门狗定时器来解决这个问题,以重复ping对等方以查看它们是否仍然连接着。 - nradk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接