diff --git a/src/io/pipeer.cpp b/src/io/pipeer.cpp index 8dbd9124..7b081e20 100755 --- a/src/io/pipeer.cpp +++ b/src/io/pipeer.cpp @@ -535,6 +535,24 @@ void PIPeer::sendMBcast(const PIByteArray & ba) { } +void PIPeer::removeNeighbour(const PIString & name) { + piForeach (PeerInfo & p, peers) + p.neighbours.removeOne(name); + self_info.removeNeighbour(name); +} + + +bool PIPeer::removePeer(const PIString & name) { + removeNeighbour(name); + for (int i = 0; i < peers.size_s(); ++i) + if (peers[i].name == name) { + peers.remove(i); + return true; + } + return false; +} + + void PIPeer::sendPeerInfo(const PeerInfo & info) { PIByteArray ba; ba << int(1) << info.name << info; @@ -589,9 +607,7 @@ void PIPeer::syncPeers() { peers.remove(i); sendPeerRemove(pn); --i; - piForeach (PeerInfo & p, peers) - p.removeNeighbour(pn); - self_info.removeNeighbour(pn); + removeNeighbour(pn); peerDisconnected(pn); peerDisconnectedEvent(pn); change = true; diff --git a/src/io/pipeer.h b/src/io/pipeer.h index c67c013b..9e4db102 100755 --- a/src/io/pipeer.h +++ b/src/io/pipeer.h @@ -136,7 +136,8 @@ private: EVENT_HANDLER2(void, timerEvent, void * , data, int, delim); bool hasPeer(const PIString & name) {piForeachC (PeerInfo & i, peers) if (i.name == name) return true; return false;} - bool removePeer(const PIString & name) {for (uint i = 0; i < peers.size(); ++i) if (peers[i].name == name) {peers.remove(i); return true;} return false;} + bool removePeer(const PIString & name); + void removeNeighbour(const PIString & name); void sendPeerInfo(const PeerInfo & info); void sendPeerRemove(const PIString & peer);