From 31fbfe65a425d0385d5c0dc3addfa11f25e45fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Mon, 16 Mar 2015 15:26:10 +0000 Subject: [PATCH] peer update git-svn-id: svn://db.shs.com.ru/pip@31 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/io/pipeer.cpp | 22 +++++++++++++++++++--- src/io/pipeer.h | 3 ++- 2 files changed, 21 insertions(+), 4 deletions(-) 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);