3

私は Apple のドキュメントを調べましたが、セッションについてはまだ不明です。

  1. - (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context notificationsHandler:(void (^)(BOOL, MCSession *))invitationHandler が呼び出された場合、招待ハンドラーへのセッション。このセッションはどうなりますか?A が B を A が作成したセッションに参加するよう招待した場合、B は A にも新しいセッションを提供しますか? B のセッションの中身は? A だけですか、それとも現在 A のセッションにあるすべてのピアが含まれますか? B は、A の招待を受け入れるために使用されたセッションを追跡する必要がありますか? この記事内http://nshipster.com/multipeer-connectivity/、チュートリアルはその場で新しいセッションを作成し、それを使用して招待を受け入れます。機能が終了するとセッションが失われませんか。したがって、接続されたピアに情報が失われますか?

  2. B、C、D がすべて A から招待され、B が C に何かを送信したいとします。B が最初に A に情報を送信する必要がありますか、それとも B が C に直接情報を送信できますか?

  3. Apple のドキュメントによると、1 つのセッションで保持できるピアは 8 つまでです。デバイスに 8 人以上を招待できるように、一連のセッションを作成することはできますか? その場合、クライアントも配列で応答して、リストに 8 つ以上のピアを含めることができるようにする必要がありますか?

  4. A と B が接続され、A が C に参加するよう招待したとします。B は、C が現在セッションに参加していることをどのようにして知ることができますか?

このような長い投稿を読んでいただきありがとうございます。

4

3 に答える 3

1

マルチピア接続に関するドキュメントはあまりないため、これらの回答は私自身の実験に基づいています。

  1. この 1 つの質問の中に多くの質問がありますが、一言で言えば、A のセッションは、A が送信または承諾した招待状を管理します。したがって、B が招待し、A が受け入れた場合、A が受け入れたときに渡したセッションはMCSessionDelegate session: peer: didChangeState:、接続が発生したかどうかを示すためにコールバックで使用されます。この時点で、connectedPeersA のセッションのプロパティには B が含まれます (接続が成功した場合)。B が招待を送信するために使用したセッションも、A が受け入れると同じコールバックを取得し、A が含まれます。connectedPeers. A も B も、この接続を管理していた相手のセッションに関する情報を持ちません。はい、新しく接続されたピアにデータを送信する場合は、接続を処理したセッションへの参照を保持する必要があります。招待ごとに新しいセッションを作成するメリットはまだありません。

  2. 上記に基づいて、B は A が誰と接続しているかについての情報を持っていません。したがって、A が B、C、および D に接続されている場合、ピア B が知っているのは、接続先のピア A だけです。ここでマルチピア接続が提供するのは、B が A を介して C または D を検出する機能です。接続は WiFi 経由で行われ、AC は Bluetooth 経由で接続されましたが、B は Bluetooth を有効にしておらず、C は B とは異なる WiFi ネットワーク上にあり、B と C は A を介してお互いを検出できます。招待と承認のプロセスはまだ実行中です。ただし、処理するために B と C に。

  3. ここでセッション管理に関する質問に回答しました。これは、iPhone 間でデータをストリーミングするための最良のオプションです。

  4. B は、C に接続している A について何も知りません。B ができることは、自分自身で C を発見し、C を自身のセッションに追加することだけです。

于 2014-04-01T17:21:54.237 に答える
1
  1. クリスの答えをすぐに見てみると、私が仕事で取り組んできたことから正確に思えます。

  2. 現在、マルチピア接続を使用してゲームに取り組んでおり、次のことがわかりました。

    (全員が Wi-Fi を使用していると仮定) A が Bに接続し、A が Cに接続すると、B は C に接続され、 Cメッセージを送信できるようになります。

    Multipeer Framework は P2P フレームワークであり、すべての人を自動的に接続します

    (私の現在のプロジェクトのように)サーバークライアントモデルとして設定しても、すべてのピアは引き続き接続され、A を経由せずに B と C の間でメッセージを送信できます。アプリで何をしているかによって異なります。

  3. クリスの答えに行きます

  4. #2で対処

Apple Docs のサンプル プロジェクトを参照し、接続時にデバッグ領域で何が起こるかを注意深く観察することをお勧めします。

また、補足として:

Scenario:(A is only on wifi),(B is on wifi and bluetooth),(C is on bluetooth only)

AがWi-Fi 経由でBに接続し、 BがBluetooth 経由でCに接続する場合、 Aは引き続き C に接続されますが、 AからCに直接メッセージを送信することはできません。これらは異なるネットワーク上にあるためです。

于 2014-04-02T20:52:51.533 に答える
0

@チャールズ・ワトソン卿:

(全員が Wi-Fi を使用していると仮定) A が Bに接続し、A が Cに接続すると、B は C に接続され、Cにメッセージを送信できるようになります。

Multipeer Framework は P2P フレームワークであり、すべての人を自動的に接続します

私の質問は: B が C に自動的に接続されたとき、B & C は既存のセッションで状態変更通知を受け取りますか?

  • A: session:peer:B didChangeState( MCSessionStateConnected )
  • B: session:peer:A didChangeState( MCSessionStateConnected )
于 2015-07-16T10:32:13.263 に答える