问题标签 [gksession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1432 浏览

iphone - GKPeerPickerController 和 GKSession

我们可以使用 GKSession 和 GKPeerPickerController 仅通过蓝牙连接 iPodtouch 或 iPhone 吗?,或者我们可以连接其他蓝牙设备吗?

0 投票
6 回答
4410 浏览

iphone - GKSession - 如果我关闭了蓝牙和 Wi-Fi 怎么办?

我正在开发一个允许点对点连接的 iPhone 应用程序。据我了解,我可以选择使用 GKPeerPicker 或 GKSession。我不喜欢使用 PeerPicker 的想法,因为我想显示一个自定义界面,所以我决定使用 GKSession,嘿,好处是它也可以通过 Wi-Fi 工作,而 Peer Picker 不能。

好的,所以问题是……如果用户同时关闭了蓝牙和 Wi-Fi 怎么办?在 Peer Picker 中,会提示您在不离开应用程序的情况下打开蓝牙。GKSession 没有它......但是哇等一下,我什至无法检查蓝牙是否以编程方式打开!

Carpe Cocoa声称没有问题,只需使用Delegate的session:didFailWithError:方法即可。但是,正如评论中解释的那样……这似乎不再起作用了!根据我的经验,我同意。

有没有其他方法可以以编程方式检查蓝牙是否打开?这是我应该利用可达性的东西吗?还是只是苹果尚未修复的错误?

更具体地说,我正在创建这样的会话:

该类实现了 GKSessionDelegate,我知道它正在工作,因为当我打开蓝牙时,调用委托方法没有问题。我已经实现了它们:

没有打印任何日志语句,并且我在每种方法中都设置了断点,但是当用户同时关闭蓝牙和 Wi-Fi 时,它们都不会被命中。我希望会发生一些事情来触发 session:didFailWithError: 以便我可以提示用户打开蓝牙或连接到 Wi-Fi 网络。

0 投票
1 回答
604 浏览

iphone - GKTank 示例不起作用

我正在尝试让 GKTank 示例与 2 部 iPhone 一起使用。两者都启用了蓝牙。我在两台设备上启动应用程序并点击屏幕。Peer Picker 出现,设备相互找到。如果我在列表中选择一台设备,它会永远显示“等待 {其他 iPhone}...”。在 {other iPhone} 上,正在等待的电话显示为灰色。如果我同时从两个设备中选择要连接的设备,则两者都永远进入等待状态...

如果我在调试设备上选择另一部 iPhone,调试日志会这样说:

2010-05-30 23:20:24.331 GKTank[2433:4e03] 开始处理事件 (2)

2010-05-30 23:20:25.269 GKTank[2433:4e03] ~ DNSServiceRegister 回调:Ref=135f70,Flags=2,ErrorType=0 name=00orRWv-0A..David,Äôs iPhone regtype=_gktank._udp。域=本地。

2010-05-30 23:20:25.375 GKTank[2433:4e03] ~ DNSServiceBrowse 回调:Ref=134f30, Flags=2, IFIndex=8 (name=[en2]), ErrorType=0 name=00oRWv-0A..David ,Äôs iPhone regtype=_gktank._udp。域=本地。

2010-05-30 23:20:30.691 GKTank[2433:4e03] ~ DNSServiceBrowse 回调:Ref=134f30, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 name=00K83eS0A..iPhone von Tamara regtype=_gktank._udp。域=本地。

2010-05-30 23:20:30.855 GKTank[2433:4e03] ~ DNSServiceQueryRecord 回调:Ref=13a320, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 fullname=00k83es0a..iphone\032von \032tamara._gktank._udp.local。rrtype=16 rrclass=1 rdlen=18 ttl=7200

2010-05-30 23:20:30.872 GKTank[2433:4e03] ** 同行 480260628: oldbusy=0, newbusy=0

2010-05-30 23:20:35.215 GKTank[2433:207] ** 停止解析?可能以前的解决方案

2010-05-30 23:20:35.226 GKTank[2433:207] ********** 开始解决:480260628

它保持这种状态。在第二部 iPhone 上,该设备被列为不可用并显示为灰色。

如果我同时选择对方,它会说:

2010-05-30 23:24:31.416 GKTank[2442:4e03] 开始处理事件 (2)

2010-05-30 23:24:32.321 GKTank[2442:4e03] ~ DNSServiceRegister 回调:Ref=135120,Flags=2,ErrorType=0 name=006JiAZ0A..David,Äôs iPhone regtype=_gktank._udp。域=本地。

2010-05-30 23:24:32.419 GKTank[2442:4e03] ~ DNSServiceBrowse 回调:Ref=134f30, Flags=2, IFIndex=8 (name=[en2]), ErrorType=0 name=006JiAZ0A..David,Äôs iPhone regtype=_gktank._udp。域=本地。

2010-05-30 23:24:57.156 GKTank[2442:4e03] ~ DNSServiceBrowse 回调:Ref=134f30, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 name=004_n6C0A..iPhone von Tamara regtype=_gktank._udp。域=本地。

2010-05-30 23:24:57.308 GKTank[2442:4e03] ~ DNSServiceQueryRecord 回调:Ref=13a320, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 fullname=004_n6c0a..iphone\032von \032tamara._gktank._udp.local。rrtype=16 rrclass=1 rdlen=18 ttl=7200

2010-05-30 23:24:57.314 GKTank[2442:4e03] ** 对等体 203104196:oldbusy=0,newbusy=0

2010-05-30 23:25:02.383 GKTank[2442:207] ** 停止解析?可能以前的解决方案

2010-05-30 23:25:02.425 GKTank[2442:207] ********** 开始解决:203104196

2010-05-30 23:25:13.562 GKTank[2442:4e03] ~ DNSServiceQueryRecord 回调:Ref=13a320, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 fullname=004_n6c0a..iphone\032von \032tamara._gktank._udp.local。rrtype=16 rrclass=1 rdlen=18 ttl=7200 2010-05-30 23:25:13.569 GKTank[2442:4e03] ** peer 203104196: oldbusy=0, newbusy=1

2010-05-30 23:25:33.660 GKTank[2442:4e03] ~ DNSServiceBrowse 回调:Ref=134f30, Flags=0, IFIndex=-3 (name=[]), ErrorType=0 name=004_n6C0A..iPhone von Tamara regtype=_gktank._udp。域=本地。2010-05-30 23:25:33.671 GKTank[2442:4e03] 对等 [203104196] 删除了吗?(0)。

2010-05-30 23:25:33.683 GKTank[2442:4e03] GKPeer[139f10] 203104196 服务计数旧=1 新=0

2010-05-30 23:25:37.786 GKTank[2442:4e03] ~ DNSServiceBrowse 回调:Ref=134f30, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 name=004_n6C0A..iPhone von Tamara regtype=_gktank._udp。域=本地。

2010-05-30 23:25:37.816 GKTank[2442:4e03] GKPeer[139f10] 203104196 服务计数旧=0 新=1

......永远等待。有人知道这个样本有什么问题吗?

0 投票
1 回答
2072 浏览

iphone - GKSession 不会在第二次连接上向对等方发送数据

我的点对点 iPhone 游戏运行良好。我创建了一个表格来显示可用的对等点,我可以连接(到目前为止)多达四个设备并从头到尾玩一整轮游戏:

对等选择器

但这是我的问题...

GKSession在一台设备上GKSessionModeClientGKSessionModeServer. 客户端看到服务器,选择连接它,然后服务器批准。然后,当所有对等点都连接时,服务器可以点击“开始游戏”。

如果——在服务器开始游戏之前——客户端点击“返回”按钮转到上一个屏幕,自定义对等选择器显示从视图中弹出并且会话被“销毁”......

现在,如果客户端返回对等选择器并再次加入服务器,我会再次获得一个GKSessionStateConnected状态,但是当我sendDataToAllPeers:什么都没有到达客户端时。如果一台设备开始游戏并且三台设备加入,然后服务器点击“开始游戏”,它可以完美运行。但是如果有人在游戏开始前退出,那么重新创建会话并加入会失败。

有任何想法吗?在这一点上,我能想到的唯一技巧是阻止用户在连接到服务器后点击“返回”,但这很糟糕……如果他们改变主意,他们将不得不完全退出应用程序。除了这个连接问题之外,我对这个应用程序正在运行以及我喜欢它,我对此束手无策。一种边缘情况,但我可以看到如果用户无法启动游戏而无需重新启动应用程序以清除会话,他们会感到恼火。

当我可以的时候,我会把它变成一个赏金。请帮忙!

编辑@byteclub

  • 如果客户端在游戏开始前离开,服务器是否正确清理了所有相关的数据结构?

如果客户端在服务器接受他们的连接后离开游戏大厅,则客户端的会话被破坏:

不过,我不会在服务器设备上调用任何 disconnectFromPeers 方法。

游戏已经开始了吗?

稍微,如果客户端断开连接,那么每个人都会收到“对等退出”通知并且游戏结束。在这种情况下,我不担心重新连接。主要是在游戏大厅,客户端可以“取消”回到问题所在的主屏幕。在这种情况下,客户端的会话被破坏。如果他们随后返回大厅并分配了一个的GKSession,他们仍然可以连接到服务器,但是一旦连接,sendDataToAllPeers 将不再工作。

客户端,但让服务器按原样运行?

客户端可以在任何情况下重新连接。我可以退出,返回,重新启动应用程序并重新连接没有问题。除非服务器和客户端都重新启动,否则 sendDataToPeers 会失败。

当用户点击“返回”时?

是的。(见上面的代码)

我意识到从远处进行调试可能很疯狂,但是如果您对我可以研究的内容有任何建议,我将不胜感激。

0 投票
1 回答
1450 浏览

iphone - GKSession alloc / release / alloc = 泄漏和崩溃

我有一个应用程序会抛出 GKSession 并在各种条件下(连接超时、会话失败等)创建一个新的应用程序。但是,我遇到了内存泄漏,并且它有时会在重新连接几个循环后崩溃。

这是我的代码:

有一个等待连接成功的计时器;如果没有得到,则调用 netDisconnect,然后在 5 秒 NSTimer 延迟后再次调用 netConnect。

我正在泄漏 GKList、GKTable 和 GKAutoPeerIDTable 对象,并且像这样崩溃(总是在分配之后发生):

这是另一个:

问题:
• 这是释放和重新分配 GKSession 的正确方式吗?
• 我不应该一开始就在连接之间拆除并重新分配 GKSession 吗?

0 投票
3 回答
381 浏览

iphone - 不同应用之间的 GKSession

我是 iPhone 编程的新手,我有一个关于蓝牙的问题,我找不到答案。我计划拥有许多不同的应用程序,并且我希望用户能够相互聊天,无论他们使用哪一个。我知道 GKSessions 使蓝牙更容易,但我不知道你是否可以在不同的应用程序之间使用它。

我使用 Wei-Meng Lee 的程序(http://www.devx.com/wireless/Article/43502/1954),并在不同设备之间成功测试。我将代码放入两个不同的应用程序中,但是当应用程序构建在两个不同的设备上时,它们都启动了搜索协议,但找不到彼此。

似乎文档假设 GKSessions 在同一个应用程序之间。有人知道吗?

0 投票
2 回答
747 浏览

iphone - 使用 GKPeerPickerController 连接两个设备


我有三台设备(mac、ipod、iphone),它们都连接到 wi-fi。当我测试连接两个设备的应用程序时,都要求打开蓝牙,但无论如何,他们都想使用 wi-fi。如何强迫他们使用蓝牙而不是 wi-fi。

但是,如果一台设备未连接到 wi-fi,则一切正常。
为什么将 connectionTypesMask 设置为 GKPeerPickerConnectionTypeNearby 首先使用 Internet 连接,然后才使用蓝牙连接?如何强制只使用蓝牙?

0 投票
1 回答
591 浏览

iphone - 两部 iPhone 之间的视频流?

是否可以通过蓝牙(GKSession)将一部iPhone的相机中显示的内容显示到另一部iPhone。Appstore中提供Remote Live。请问有什么想法吗?

0 投票
2 回答
1869 浏览

iphone - 如何使用 gksession 发送和接收数据?

您好,我正在使用 gksession 发送数据。下面给出了代码。这里发送数据工作正常,并给出了发送数据的消息。但我无法在其他设备上接收任何数据。当我调试代码时,它没有调用和运行在方法内部接收数据。有人对此有任何想法吗?这里有什么问题或我该如何解决问题?

0 投票
1 回答
874 浏览

ios - 客户端 GKSession 在denyConnectionFromPeer 之后认为它已连接

我有一个典型的GKSessionModeServer/GKSessionModeClient设置。

当服务器拒绝与 的客户端连接尝试时denyConnectionFromPeer:,将调用客户端的session:connectionWithPeerFailed:方法,但随后它会收到GKPeerStateConnected带有我服务器的 peerID 的状态更改。换句话说,客户端认为连接成功,而服务器没有。

这似乎与常识和文档不一致connectToPeer:withTimeout:,其中说

如果与远程对等点的连接成功,session:peer:didChangeState:则为它成功连接到的每个对等点调用委托方法。如果连接失败或您的应用程序取消连接尝试,会话将调用委托的session:connectionWithPeerFailed:withError:方法。

我知道这并不是说在连接失败的情况下不会调用状态更改回调,但是从客户端的角度来看,最终结果是失败的连接似乎会导致连接成功。

我紧紧抓住稻草尝试cancelConnectToPeerconnectionWithPeerFailed回调中调用,但没有结果。

客户端可以通过忽略 next 来解决这个问题GKPeerStateConnected,但这很麻烦,并且在服务器再次开始接受连接时使重新连接变得复杂。

那么为什么客户端会话不能理解它已经结束了呢?