首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测多点连接性邀请的衰落?

如何检测多点连接性邀请的衰落?
EN

Stack Overflow用户
提问于 2017-10-16 07:24:08
回答 1查看 845关注 0票数 0

TLDR:

当其他设备在收到邀请后调用invitationHandler时,我希望发送邀请的设备知道哪个设备接受了邀请,哪个设备拒绝了邀请。

为了避免出现XY问题,下面是我正在做的事情:

我使用多点连接在一个2-4玩家的游戏.

我的应用程序将会是这样的:

  • 设备可以通过按下按钮来设置其对其他设备的可见性。
  • 游戏中的2-4个玩家之一,让我们称他为A玩家,按下一个按钮,他/她会看到附近玩家的名单
  • 玩家A将从他想加入游戏的名单中选择1-3名球员。
  • 其他设备使用一些逻辑来确定是接受邀请还是拒绝邀请。
  • 当玩家A发出的所有邀请都被回复后,将启用一个按钮,玩家A可以按它来启动游戏。
  • 我这么做是因为我不希望新球员在比赛开始后加入。例如,玩家A邀请玩家B,玩家B接受它。玩家A然后邀请玩家C,但在玩家C收到邀请之前,玩家A开始游戏。游戏将开始,但因为只有两个玩家连接,一个2人的游戏将被创建.在此之后,邀请到达玩家C,他接受它,现在突然有3人在一个2人的游戏!这就是为什么我需要确保所有的邀请都在比赛开始前得到回应。

这也是为什么我需要知道设备是否拒绝了邀请。我已经知道如何检测设备接受了邀请,就像这样:

代码语言:javascript
复制
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
    switch state {
    case .connected:
        print("peerID accepted the invitation!")
    default: 
        break
    }
}

我以为在MCNearbyServiceBrowserDelegate中会有一个委托方法来处理这个问题。我可以想象它将被称为browser(_:peerDidDeclineInvitation:),但我没有发现任何类似的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 07:51:32

当用户拒绝邀请时,发起邀请的设备将得到一个委托状态更改,状态= MCSessionStateNotConnected

据我所知,如果用户由于某种原因无法连接,也会发生这种状态,但是您可以区分这两个流,因为当连接失败时,还会得到状态更改,首先是MCSessionStateConnecting,然后是MCSessionStateNotConnected

因此,简而言之:

  1. 状态从MCSessionStateConnecting更改为MCSessionStateNotConnected意味着设备连接失败,但invite被接受
  2. 状态只进入MCSessionStateConnecting,意味着用户点击下降。

考虑到当游戏可以启动时,您需要高级逻辑,您将无法依赖内置的MCBrowserViewController,因为这将使Done按钮在一个对等点被初始化后立即启用。

您必须使用MCNearbyServiceBrowser,然后使用-invitePeer:toSession:withContext:timeout:启动每个邀请,因此您有一种方法可以知道谁被邀请,以及基于已连接、未能连接或拒绝的委托调用。

希望这能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46764955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档