Disconnect individual peers from MCSession?

若如初见. 提交于 2019-12-20 01:48:08

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!