MCPcopy Create free account
hub / github.com/DNAProject/DNA / syncPeerAddr

Method syncPeerAddr

p2pserver/p2pserver.go:611–668  ·  view source on GitHub ↗

syncPeerAddr compare snapshot of recent peer with current link,then persist the list

()

Source from the content-addressed store, hash-verified

609
610//syncPeerAddr compare snapshot of recent peer with current link,then persist the list
611func (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}

Callers 1

syncUpRecentPeersMethod · 0.95

Calls 8

WarnFunction · 0.92
GetAddr16Method · 0.80
MarshalMethod · 0.80
GetPeerFromAddrMethod · 0.65
GetNpMethod · 0.65
GetPortMethod · 0.65
GetStateMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected