diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-30 22:58:31 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-30 22:58:31 +0800 |
commit | 6b7dfa1fb5279407177fb9fb6574ad9760a4e307 (patch) | |
tree | 7c8aca5aaf4355256bf245543842065073e56771 /ethereum.go | |
parent | 2ef3a989298aa8dca7872be07ad0abbc32728cc7 (diff) | |
parent | 17c825f53a2676ffe17fd7731f8f550aebcb56b0 (diff) | |
download | dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.tar dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.tar.gz dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.tar.bz2 dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.tar.lz dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.tar.xz dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.tar.zst dexon-6b7dfa1fb5279407177fb9fb6574ad9760a4e307.zip |
Merge branch 'develop'
Diffstat (limited to 'ethereum.go')
-rw-r--r-- | ethereum.go | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/ethereum.go b/ethereum.go index 3a7202d53..d9281cd57 100644 --- a/ethereum.go +++ b/ethereum.go @@ -165,6 +165,8 @@ func (s *Ethereum) AddPeer(conn net.Conn) { ethutil.Config.Log.Debugf("[SERV] Max connected peers reached. Not adding incoming peer.") } } + + s.reactor.Post("peerList", s.peers) } func (s *Ethereum) ProcessPeerList(addrs []string) { @@ -236,6 +238,7 @@ func (s *Ethereum) ConnectToPeer(addr string) error { s.peers.PushBack(peer) ethutil.Config.Log.Infof("[SERV] Adding peer (%s) %d / %d\n", addr, s.peers.Len(), s.MaxPeers) + s.reactor.Post("peerList", s.peers) } return nil @@ -303,12 +306,26 @@ func (s *Ethereum) Peers() *list.List { } func (s *Ethereum) reapPeers() { + eachPeer(s.peers, func(p *Peer, e *list.Element) { + if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) { + s.removePeerElement(e) + } + }) +} + +func (s *Ethereum) removePeerElement(e *list.Element) { s.peerMut.Lock() defer s.peerMut.Unlock() - eachPeer(s.peers, func(p *Peer, e *list.Element) { - if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) { - s.peers.Remove(e) + s.peers.Remove(e) + + s.reactor.Post("peerList", s.peers) +} + +func (s *Ethereum) RemovePeer(p *Peer) { + eachPeer(s.peers, func(peer *Peer, e *list.Element) { + if peer == p { + s.removePeerElement(e) } }) } |