问题
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?
回答1:
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];
来源:https://stackoverflow.com/questions/23435754/disconnect-individual-peers-from-mcsession