当玩家通过邀请连接时,实时消息不起作用

Posted

技术标签:

【中文标题】当玩家通过邀请连接时,实时消息不起作用【英文标题】:Real-time messaging not working when players get connected via invitation 【发布时间】:2016-12-18 10:10:31 【问题描述】:

我正在使用 Google Play 服务和 libGDX 框架提供的实时多人游戏为两个玩家开发一个简单的游戏。基本上我使用的是来自谷歌tutorial的代码sn-ps。

当玩家通过自动匹配功能连接时,一切正常,但当我尝试接受邀请时出现问题。所有必要的回调都使用状态码 STATUS_OK 调用,但接受邀请的玩家无法向其他玩家发送可靠消息。而发送此邀请的玩家可以发送消息,并且它们会到达第二台设备。

是否有任何关于 GPGS + libGDX 的已知问题?在这种情况下,也许线程很重要(我在哪个线程中调用 Games.RealTimeMultiplayer.join() 等方法)?

我很确定我的所有代码都与上面的链接相似,因为我什至尝试使用 GPGS+libGDX 从头开始​​实现一个新应用程序,但未能将此功能添加到我现有的游戏中。

我还在多台设备上测试了我的两个应用程序,结果总是一样:

自动匹配 - 一切正常; 邀请 - 仅在“一个方向”工作:被邀请者无法发送消息,但接收良好,日志或回调中没有错误。

从接受邀请的玩家的角度输出示例:

08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: onJoinedRoom - success
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: Room participants: 
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: HateCrub - p_CMCMr4mRp_K63QEQAQ
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: AlexeyGorovoy - p_CMCMr4mRp_K63QEQAg
08-11 18:35:52.219 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onPeerJoined - [p_CMCMr4mRp_K63QEQAQ]
08-11 18:35:53.979 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onP2PConnected - p_CMCMr4mRp_K63QEQAQ
08-11 18:35:54.419 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onConnectedToRoom
08-11 18:35:54.429 14173-14173/com.teremok.taptapparty D/PartyRoomStatusUpdateListener: onPeersConnected - [p_CMCMr4mRp_K63QEQAQ]
08-11 18:35:54.439 14173-14173/com.teremok.taptapparty D/PartyRoomUpdateListener: onRoomConnected - success
08-11 18:35:54.439 14173-14173/com.teremok.taptapparty D/androidMultiplayer: sending message: hello#AlexeyGorovoy#
08-11 18:35:54.439 14173-14173/com.teremok.taptapparty D/AndroidMultiplayer: message sent failed - network error (STATUS_REAL_TIME_MESSAGE_SEND_FAILED)
08-11 18:35:54.779 14173-14173/com.teremok.taptapparty D/PartyMessageReceiver: onMessageReceived: hello#HateCrub#

在这个 sn-p 中你可以看到房间已连接,其他对等方已连接等,但随后此播放器无法发送消息,但成功接收。

【问题讨论】:

您有任何错误日志吗?通过这个documentation,确保参与者只能在连接到房间时接收消息。 两个参与者的日志中没有错误,都已连接。 (正如我在调试时看到的) 另外,如帖子中的日志所示 - 其中一位参与者只能接收消息,但不能发送。 【参考方案1】:

几天后,我发现了我的愚蠢错误。我认为客户可以将自己的参与者 ID 作为参与者列表中的第一个条目。

这是获取当前玩家的参与者 ID 的不正确方式(尽管适用于自动匹配):

String myPartId = room.getParticipants().get(0) // I was doing so :(

这是正确的方法:

    String myPlayerId = Games.Players.getCurrentPlayer(gameHelper.getApiClient()).getPlayerId();
    String myPartId = room.getParticipantId(myPlayerId);

我希望这将有助于某人避免此类错误。

【讨论】:

以上是关于当玩家通过邀请连接时,实时消息不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Swift - 当搜索控制器过滤结果时,实时更新不起作用

OnTriggerEnter2D AddForce 到对象不起作用

当用户输入通过来自另一个组件的道具的文本时,在反应 js 中不起作用

为啥通过 Apple Watch 向 iPhone 发送消息时 print() 不起作用?

向所有客户端发出的 SocketIO 不起作用

当窗口处于全屏模式时,Qt 连接不起作用