peer update
git-svn-id: svn://db.shs.com.ru/pip@28 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -213,8 +213,8 @@ void PIPeer::destroyMBcasts() {
|
||||
PIPeer::PeerInfo * PIPeer::quickestPeer(const PIString & to) {
|
||||
if (!peers_map.contains(to)) return 0;
|
||||
//piCout << "*** search quickest peer" << to;
|
||||
PIVector<PeerInfo * > tp = addresses_map[to];
|
||||
PeerInfo * dp = 0;
|
||||
PIVector<PeerInfo * > tp = addresses_map.value(to);
|
||||
/*PeerInfo * dp = 0;
|
||||
int mping = 0x7FFFFFFF;
|
||||
for (int i = 0; i < tp.size_s(); ++i) {
|
||||
int p = tp[i]->ping();
|
||||
@@ -224,7 +224,9 @@ PIPeer::PeerInfo * PIPeer::quickestPeer(const PIString & to) {
|
||||
}
|
||||
}
|
||||
//piCout << "*** search quickest peer: found" << (dp ? dp->name : "0");
|
||||
return dp;
|
||||
return dp;*/
|
||||
if (tp.isEmpty()) return 0;
|
||||
return tp.back();
|
||||
}
|
||||
|
||||
|
||||
@@ -388,6 +390,7 @@ bool PIPeer::mbcastRead(uchar * data, int size) {
|
||||
pi.addNeighbour(self_info.name);
|
||||
self_info.addNeighbour(pi.name);
|
||||
}
|
||||
pi.resetPing();
|
||||
peers << pi;
|
||||
buildMap();
|
||||
//piCoutObj << "new peer \"" << pi.name << "\"" << " dist " << pi.dist;
|
||||
@@ -459,6 +462,7 @@ bool PIPeer::mbcastRead(uchar * data, int size) {
|
||||
}
|
||||
if (exist || isRemoved(rpeer)) continue;
|
||||
rpeer.dist++;
|
||||
rpeer.resetPing();
|
||||
peers << rpeer;
|
||||
ch = true;
|
||||
peerConnected(rpeer.name);
|
||||
@@ -548,6 +552,7 @@ void PIPeer::pingNeighbours() {
|
||||
if (a.wait_ping) {
|
||||
if ((PISystemTime::current(true) - a.last_ping).abs().toSeconds() <= 5.)
|
||||
continue;
|
||||
a.ping = -1.;
|
||||
}
|
||||
a.wait_ping = true;
|
||||
sba = ba;
|
||||
@@ -604,20 +609,59 @@ void PIPeer::buildMap() {
|
||||
//piCout << "[PIPeer \"" + name_ + "\"] buildMap";
|
||||
peers_map.clear();
|
||||
addresses_map.clear();
|
||||
piForeach (PeerInfo & i, peers)
|
||||
piForeach (PeerInfo & i, peers) {
|
||||
i.trace = -1;
|
||||
peers_map[i.name] = &i;
|
||||
return;
|
||||
int max_dist = -1;
|
||||
PIMap<PIString, PeerInfo * > peers_;
|
||||
}
|
||||
PIVector<PeerInfo * > cwave, nwave;
|
||||
int cwi = 0;
|
||||
self_info.trace = 0;
|
||||
cwave << &self_info;
|
||||
while (!cwave.isEmpty()) {
|
||||
nwave.clear();
|
||||
++cwi;
|
||||
piForeachC (PeerInfo * p, cwave) {
|
||||
piForeachC (PIString & nn, p->neighbours) {
|
||||
PeerInfo * np = peers_map.value(nn);
|
||||
if (!np) continue;
|
||||
if (np->trace >= 0) continue;
|
||||
np->trace = cwi;
|
||||
nwave << np;
|
||||
}
|
||||
}
|
||||
cwave = nwave;
|
||||
}
|
||||
PIVector<PeerInfo * > cpath;
|
||||
piForeach (PeerInfo & c, peers) {
|
||||
cpath.clear();
|
||||
cpath << &c;
|
||||
cwave << &c;
|
||||
for (int w = c.trace - 1; w >= 0; --w) {
|
||||
nwave.clear();
|
||||
piForeachC (PeerInfo * p, cwave) {
|
||||
piForeachC (PIString & nn, p->neighbours) {
|
||||
PeerInfo * np = peers_map.value(nn);
|
||||
if (!np) continue;
|
||||
if (np->trace != w) continue;
|
||||
cpath << np;
|
||||
nwave << np;
|
||||
}
|
||||
}
|
||||
cwave = nwave;
|
||||
}
|
||||
addresses_map[c.name] = cpath;
|
||||
//piCout << "map" << c.name << "=" << cpath;
|
||||
}
|
||||
/*int max_dist = -1;
|
||||
self_info._nuses.resize(self_info.neighbours.size());
|
||||
self_info._nuses.fill(0);
|
||||
self_info._first = &self_info;
|
||||
peers_[self_info.name] = &self_info;
|
||||
peers_map[self_info.name] = &self_info;
|
||||
piForeach (PeerInfo & i, peers) {
|
||||
i._nuses.resize(i.neighbours.size());
|
||||
i._nuses.fill(0);
|
||||
i._first = 0;
|
||||
peers_[i.name] = &i;
|
||||
peers_map[i.name] = &i;
|
||||
if (max_dist < i.dist)
|
||||
max_dist = i.dist;
|
||||
if (i.dist > 0) continue;
|
||||
@@ -662,7 +706,7 @@ void PIPeer::buildMap() {
|
||||
for (int n = 0; n < ns; ++n) {
|
||||
if (p->_nuses[n] >= ns) continue;
|
||||
p->_nuses[n]++;
|
||||
npeer = peers_[p->neighbours[n]];
|
||||
npeer = peers_map[p->neighbours[n]];
|
||||
if (npeer == 0) continue;
|
||||
if (d == 0) npeer->_first = npeer;
|
||||
else {
|
||||
@@ -684,7 +728,7 @@ void PIPeer::buildMap() {
|
||||
if (!pl.contains(cwave[i]->_first))
|
||||
pl << cwave[i]->_first;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
/*piCout << " ** addresses map **";
|
||||
piForeachC (napair & i, addresses_map)
|
||||
piCout << i.first << i.second;
|
||||
|
||||
Reference in New Issue
Block a user