問題タブ [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.
iphone - GKPeerPickerController と GKSession
Bluetooth で接続できるのは、GKSession と GKPeerPickerController を使用する iPodtouch または iPhone のみです。、または他のBluetoothデバイスを接続できますか?
iphone - GKSession - Bluetooth と Wi-Fi をオフにするとどうなりますか?
ピアツーピア接続を可能にする iPhone アプリに取り組んでいます。私の理解では、GKPeerPicker と GKSession のどちらを使用するかを選択できます。カスタム インターフェイスを表示したいので、PeerPicker を使用するという考えは気に入らないので、GKSession を使用することにしました。おまけに、Wi-Fi でも動作しますが、Peer Picker は動作しません。
問題は、ユーザーが Bluetooth と Wi-Fi の両方をオフにしているとどうなるかということです。ピア ピッカーでは、アプリを終了せずに Bluetooth をオンにするプロンプトが表示されます。GKSessionにはそれがありません...しかし、ちょっと待ってください。Bluetoothがオンになっているかどうかをプログラムで確認することさえできないようです!
Carpe Cocoa は問題ないと主張しており、デリゲートのsession:didFailWithError:
方法を使用するだけです。しかし、コメントで説明されているように...それはもう機能していないようです! そして私の経験上、私は同意します。
Bluetoothがオンになっているかどうかをプログラムで確認する他の方法はありますか? これは、到達可能性を活用する必要があるものですか? それとも、Apple がまだ修正していない単なるバグなのでしょうか?
より具体的には、次のようにセッションを作成しています。
このクラスは GKSessionDelegate を実装しています。ブルートゥースをオンにするとデリゲート メソッドが問題なく呼び出されるため、このクラスが機能していることはわかっています。私はそれらを次のように実装しました:
ログ ステートメントは出力されず、各メソッドにブレークポイントを設定しましたが、ユーザーが Bluetooth と Wi-Fi の両方をオフにしている場合、いずれもヒットしません。session:didFailWithError: をトリガーして、ユーザーに Bluetooth をオンにするか、Wi-Fi ネットワークに接続するように促すことができるようになることを期待していました。
iphone - GKTank の例が機能しない
GKTank の例を 2 台の iPhone で動作させようとしています。どちらもブルートゥース対応です。両方のデバイスでアプリを起動し、画面をタップします。ピア ピッカーが起動し、デバイスがお互いを見つけます。リストで 1 つのデバイスを選択すると、「{他の iPhone} を待機しています...」と永久に表示されます。{他の iPhone} では、待機中の電話がグレー表示されます。両方のデバイスから同時に接続するデバイスを選択すると、両方が永久に待機状態になります...
デバッグされたデバイスで別の iPhone を選択すると、デバッグ ログには次のように表示されます。
2010-05-30 23:20:24.331 GKTank[2433:4e03] handleEvents が開始されました (2)
2010-05-30 23:20:25.269 GKTank[2433:4e03] ~ DNSServiceRegister コールバック: Ref=135f70、Flags=2、ErrorType=0 name=00oRWv-0A..David の 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 ■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 (名前=[])、ErrorType=0 フルネーム=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
そしてそれはそのままです。2 番目の iPhone では、デバイスは使用不可として表示され、グレー表示されます。
同時にお互いを選択すると、次のように表示されます。
2010-05-30 23:24:31.416 GKTank[2442:4e03] handleEvents が開始されました (2)
2010-05-30 23:24:32.321 GKTank[2442:4e03] ~ DNSServiceRegister コールバック: Ref=135120、Flags=2、ErrorType=0 name=006JiAZ0A..David の 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 (名前=[])、ErrorType=0 フルネーム=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 (名前=[])、ErrorType=0 フルネーム=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] ** ピア 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 サービス カウント old=1 new=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 サービス カウント old=0 new=1
...そして永遠に待ちます。このサンプルのどこが悪いのか誰か知っていますか??
iphone - GKSessionは2番目の接続でピアにデータを送信しません
私はピアツーピアのiPhoneゲームがかなりうまく機能している。利用可能なピアを表示するテーブルを作成しました。(これまでのところ)最大4つのデバイスを接続して、ゲームの最初から最後までフルラウンドでプレイできます。
しかし、ここに私の問題があります...
GKSession
を使用して一方のデバイスで作成し、を使用してもう一方のデバイスを作成GKSessionModeClient
しGKSessionModeServer
ます。クライアントはサーバーを確認し、接続を選択してから、サーバーが承認します。すべてのピアが接続されたら、サーバーは「ゲームの開始」をタップできます。
サーバーがゲームを開始する前に、クライアントが「戻る」ボタンをタップして前の画面に移動した場合、カスタムピアピッカーの表示がビューからポップされ、セッションが「破棄」されます...
ここで、クライアントがピアピッカーに戻ってサーバーに再度参加すると、GKSessionStateConnected
状態が再び取得されsendDataToAllPeers:
ますが、クライアントに何も到達しない場合。1つのデバイスがゲームを開始し、3つのデバイスが参加してから、サーバーが「ゲームの開始」をタップすると、問題なく動作します。ただし、ゲームが開始する前に誰かが終了した場合、セッションの再作成と参加は失敗します。
何か案は?この時点で考えられる唯一のハックは、ユーザーがサーバーに接続したときに「戻る」をタップできないようにすることですが、そのようなことはやっかいです...気が変わったらアプリを完全に終了する必要があります。この接続の問題を除いて、アプリが実行されているので、私はこれで終わりです。一種のエッジケースですが、セッションをクリアするためにアプリケーションを再起動せずにゲームを開始できない場合、ユーザーがイライラしているのを見ることができます。
できればこれを賞金にします。助けてください!
@byteclubを編集
- ゲームが始まる前にクライアントが離れた場合、サーバーは関連するすべてのデータ構造を正しくクリーンアップしますか?
サーバーが接続を受け入れた後にクライアントがゲームロビーを離れると、クライアントのセッションは破棄されます。
ただし、サーバーデバイスでdisconnectFromPeersメソッドを呼び出すことはありません。
ゲームはもう始まっていますか?
少しだけ、クライアントが切断すると、全員が「ピア終了」通知を受け取り、ゲームが終了します。この場合、再接続の心配はありません。これは主に、クライアントが「キャンセル」して問題のあるホーム画面に戻ることができるゲームロビーにあります。この場合、クライアントのセッションは破棄されます。その後、ロビーに戻って新しいGKSessionが割り当てられた場合でも、サーバーに接続できますが、接続するとsendDataToAllPeersは機能しなくなります。
クライアントですが、サーバーはそのまま実行しますか?
クライアントはどのような場合でも再接続できます。終了して戻ってアプリを再起動し、問題なく再接続できます。サーバーとクライアントの両方を再起動しない限り、sendDataToPeersは失敗します。
ユーザーが「戻る」をタップすると?
はい。(上記のコードを参照)
これはおそらく遠くからデバッグするのは非常識だと思いますが、私が調べられることについて何か提案があれば、それをいただければ幸いです。
iphone - GKSession alloc / release /alloc=リークとクラッシュ
GKSessionをスローして、さまざまな条件(接続タイムアウト、セッションの失敗など)で新しいアプリを作成するアプリがあります。ただし、メモリリークが発生し、再接続を数回ループした後にクラッシュすることがあります。
これが私のコードです:
接続が成功するのを待つタイマーがあります。取得されない場合は、netDisconnectが呼び出され、5秒のNSTimer遅延後にnetConnectが再度呼び出されます。
GKList、GKTable、およびGKAutoPeerIDTableオブジェクトがリークされ、次のようにクラッシュします(常に割り当て後に発生します):
もう1つあります:
質問:
•これは、GKSessionを解放して再割り当てする正しい方法ですか?
•最初に、接続間でGKSessionを破棄して再割り当てするべきではありませんか?
iphone - 異なるアプリ間の GKSession
iPhone プログラミングは初めてで、Bluetooth について質問がありますが、答えが見つかりません。私はいくつかの異なるアプリを用意する予定であり、ユーザーがどのアプリを使用していてもチャットできるようにしたいと考えています。GKSessions によって Bluetooth が非常に簡単になることは知っていますが、異なるアプリ間で使用できるかどうかはわかりません。
私は Wei-Meng Lee のプログラム ( http://www.devx.com/wireless/Article/43502/1954 ) を使用し、異なるデバイス間でのテストに成功しました。コードを 2 つの異なるアプリに入れましたが、アプリが 2 つの異なるデバイス上に構築されたとき、両方とも検索プロトコルを開始しましたが、お互いを見つけることができませんでした。
ドキュメンテーションでは、GKSessions が同じアプリ間であると想定しているようです。誰かそれについて何か知っていますか?
iphone - GKPeerPickerControllerを使用して2つのデバイスを接続する
私は3つのデバイス(mac、ipod、iphone)を持っており、それらはすべてWi-Fiに接続されています。2つのデバイスを接続するアプリケーションをテストしているとき、どちらもBluetoothをオンにするように求められますが、とにかく、Wi-Fiを使用したいと考えています。Wi-Fiの代わりにBluetoothを使用するように強制する方法。
ただし、1つのデバイスがWi-Fiに接続されていない場合は、すべて正常に機能します。
connectionTypesMaskをGKPeerPickerConnectionTypeNearbyに設定すると、まずインターネット接続が使用され、次にBluetooth接続のみが使用されるのはなぜですか。Bluetoothのみを強制的に使用するにはどうすればよいですか?
iphone - 2台のiPhone間のビデオストリーミング?
bluetooth(GKSession)を介して、あるiPhoneのカメラに表示されているものを別のiPhoneに表示することは可能ですか?リモートライブはAppstoreで利用できます。
iphone - gksessionを使用してデータを送受信するにはどうすればよいですか?
こんにちは私はgksessionを使用してデータを送信しています。コードは以下のとおりです。ここでは、データの送信は正常に機能し、データを送信したメッセージが表示されます。しかし、他のデバイスでデータを受信できません。コードをデバッグすると、呼び出しと送信が行われません。メソッド内でデータを受信します。これについて誰かが何か考えていますか?ここで何が問題になっていますか、またはどうすれば問題を解決できますか?
ios - クライアント GKSession は、denyConnectionFromPeer の後に接続されたと認識します
私は典型的なGKSessionModeServer/GKSessionModeClient
セットアップをしています。
サーバーが を使用したクライアント接続試行を拒否するとdenyConnectionFromPeer:
、クライアントのsession:connectionWithPeerFailed:
メソッドが呼び出されGKPeerStateConnected
ますが、サーバーのピア ID で状態変更を受け取ります。つまり、クライアントは接続が成功したと見なしますが、サーバーは成功しません。
これは、常識や のドキュメントと矛盾しているようですconnectToPeer:withTimeout:
。
リモート ピアへの接続が成功すると、接続に成功した各ピアに対してデリゲートの
session:peer:didChangeState:
メソッドが呼び出されます。接続が失敗した場合、またはアプリケーションが接続試行をキャンセルした場合、セッションはデリゲートのsession:connectionWithPeerFailed:withError:
メソッドを呼び出します。
これは、接続に失敗した場合に状態変更のコールバックが呼び出されないということではありませんが、クライアントの観点からは、接続に失敗すると接続が成功したように見えます。
ストローを握りしめcancelConnectToPeer
てコールバックから呼び出してみましたがconnectionWithPeerFailed
、結果はありませんでした。
クライアントは next を無視することでこれを回避できますがGKPeerStateConnected
、これは面倒であり、サーバーが再び接続の受け入れを開始したときの再接続が複雑になります。
では、クライアント セッションが終了したことを認識できないのはなぜでしょうか。