2012-01-22 4 views
2

GKPeerPickerControllerを使わずにGKSessionを使って2つのiPhone間でブルートゥース接続を確立し、両側に「接続ボタン」を押さずにしたい。私は次のコードを使用していGKSessionモードピア:ボタン/確認なしで2つのピアを自動的に接続する方法は?

currentSessionAuto = [[GKSession alloc] initWithSessionID: @"instant-friend-auto" 
currentSessionAuto.delegate = self; 
currentSessionAuto.available = YES; 
currentSessionAuto.disconnectTimeout = 5; 
[currentSessionAuto setDataReceiveHandler: self withContext:nil]; 

アプリケーションが両側に開始され、 - (無効)セッション:(GKSession *)セッションピア:(NSStringの*)そのpeerID didChangeState :(GKPeerConnectionState)状態は、状態 "GKPeerStateAvailable"で両側で呼び出されます。

「クラシック」アプリでは、接続を求めるためにポップアップが表示され、ほとんどの時間は「ユーザー」が同時に接続ボタンをクリックしません。

「自動接続」を使用する場合、このメカニズムがないと2つのセッションが開始され、エラーが発生するため、1側でセッションを開始するだけのメカニズムが必要です。

アイデア/ヘルプ?

答えて

4

GKSessionのアドホックネットワーク機能を示すデモアプリケーションGKSessionP2Pをご覧ください。このアプリは、ローカルネットワーク上に広告を出し、利用可能なピアに自動的に接続し、ピアツーピアネットワークを確立します。

+0

リンクのTx。私は近似的に同じコードを持っています...私はテンポ(0.5s)が(利用可能な状態で)コードで使用されている理由を理解していませんか? – fvisticot

+0

公正な質問。 0.5秒待ってからconnectToPeerが正常に機能しているようです。 – Marco

+1

このタイムアウトは、接続がテーブルビューが更新される前にシーンの裏に確立する機会を与えている可能性があります。このようなタイムアウトは悪い習慣です。 – openfrog

1

ここで考えているのは、最も低いピアIDのピアを接続させることです。 PeerID文字列をintに変換して比較する必要がありますが、それは大きなタイ・ブレーカーでなければなりません。

+0

なぜあなたはそれをしたいですか? – openfrog

+0

接続を開始するのはどのクライアントを選択するのが確実であるからです。数字のうちの1つだけが低い数字になることができます(peerIDは等しいことはできません)。したがって、低いものを高いものに接続します。これにより、OPの問題は完全に解決されます。それについて考える。 –

関連する問題