Question

If I have an array of connected peers, let's say 3 (a->b, a->c, a->d) and I want to disconnect peer "c" only, what should I be doing?

I've seen one response to a similar question state that you can only disconnect 'yourself' from a session: meaning that in the above scenario if I do this:

[mySession disconnect];

that I all be disconnecting "a" from "b", "c" and "d" simultaneously. So the suggestion was to send a notification to the peer you want disconnected ("c") and tell it to disconnect from the session.

However, I've also seen this and wondered if it does what I'm asking - removes the specific peer only:

[mySession.connectedPeers[0] disconnect];

EDIT: I just realized this is a read-only property, so ignore this portion.

Or is there yet another, perhaps better way to remove specific peers?

Was it helpful?

Solution

Each peer-to-peer connection is represented by an instance of MCSession. So in your example, you will have 3 UNIQUE pointers to MCSession objects:

MCSession *p1 = a->b
MCSession *p2 = a->c
MCSession *p3 = a->d

so to disconnect peer c you will:

[p2 disconnect]; // release the session
p2 = nil; // release the resource

Of course, you can store sessions in a mutable array and then do the same logic, but use the pointer from the array

p2 = (MCSession *)[array objectAtIndex:1];
[p2 disconnect];
[array removeObjectAtIndex:1];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top