syncPeerAddr compare snapshot of recent peer with current link,then persist the list
()
| 609 | |
| 610 | //syncPeerAddr compare snapshot of recent peer with current link,then persist the list |
| 611 | func (this *P2PServer) syncPeerAddr() { |
| 612 | changed := false |
| 613 | netID := config.DefConfig.P2PNode.NetworkMagic |
| 614 | for i := 0; i < len(this.recentPeers[netID]); i++ { |
| 615 | p := this.network.GetPeerFromAddr(this.recentPeers[netID][i]) |
| 616 | if p == nil || (p != nil && p.GetState() != common.ESTABLISH) { |
| 617 | this.recentPeers[netID] = append(this.recentPeers[netID][:i], this.recentPeers[netID][i+1:]...) |
| 618 | changed = true |
| 619 | i-- |
| 620 | } |
| 621 | } |
| 622 | left := common.RECENT_LIMIT - len(this.recentPeers[netID]) |
| 623 | if left > 0 { |
| 624 | np := this.network.GetNp() |
| 625 | np.Lock() |
| 626 | var ip net.IP |
| 627 | for _, p := range np.List { |
| 628 | addr, _ := p.GetAddr16() |
| 629 | ip = addr[:] |
| 630 | nodeAddr := ip.To16().String() + ":" + |
| 631 | strconv.Itoa(int(p.GetPort())) |
| 632 | found := false |
| 633 | for i := 0; i < len(this.recentPeers[netID]); i++ { |
| 634 | if nodeAddr == this.recentPeers[netID][i] { |
| 635 | found = true |
| 636 | break |
| 637 | } |
| 638 | } |
| 639 | if !found { |
| 640 | this.recentPeers[netID] = append(this.recentPeers[netID], nodeAddr) |
| 641 | left-- |
| 642 | changed = true |
| 643 | if left == 0 { |
| 644 | break |
| 645 | } |
| 646 | } |
| 647 | } |
| 648 | np.Unlock() |
| 649 | } else { |
| 650 | if left < 0 { |
| 651 | left = -left |
| 652 | this.recentPeers[netID] = append(this.recentPeers[netID][:0], this.recentPeers[netID][0+left:]...) |
| 653 | changed = true |
| 654 | } |
| 655 | |
| 656 | } |
| 657 | if changed { |
| 658 | buf, err := json.Marshal(this.recentPeers) |
| 659 | if err != nil { |
| 660 | log.Warn("[p2p]package recent peer fail: ", err) |
| 661 | return |
| 662 | } |
| 663 | err = ioutil.WriteFile(common.RECENT_FILE_NAME, buf, os.ModePerm) |
| 664 | if err != nil { |
| 665 | log.Warn("[p2p]write recent peer fail: ", err) |
| 666 | } |
| 667 | } |
| 668 | } |
no test coverage detected