aboutsummaryrefslogtreecommitdiffstats
path: root/peer.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-07-24 23:10:54 +0800
committerobscuren <geffobscura@gmail.com>2014-07-24 23:10:54 +0800
commit7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c (patch)
tree98c6f4b0cda79a65519aa995a33627a8fb1e9176 /peer.go
parent702cf5a3e19e33616e7e98ec8ab7a00d56dd7e85 (diff)
downloadgo-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.tar
go-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.tar.gz
go-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.tar.bz2
go-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.tar.lz
go-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.tar.xz
go-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.tar.zst
go-tangerine-7ee49c32b70b0bd3e9709865c0b9c43d16c8f18c.zip
Added update method and general service timer
* disable catching up if no block received for longer than 10 seconds
Diffstat (limited to 'peer.go')
-rw-r--r--peer.go29
1 files changed, 25 insertions, 4 deletions
diff --git a/peer.go b/peer.go
index c73617ed5..ffba695ca 100644
--- a/peer.go
+++ b/peer.go
@@ -121,7 +121,8 @@ type Peer struct {
versionKnown bool
// Last received pong message
- lastPong int64
+ lastPong int64
+ lastBlockReceived time.Time
host []byte
port uint16
@@ -408,10 +409,7 @@ func (p *Peer) HandleInbound() {
for i := msg.Data.Len() - 1; i >= 0; i-- {
block = ethchain.NewBlockFromRlpValue(msg.Data.Get(i))
- //p.ethereum.StateManager().PrepareDefault(block)
- //state := p.ethereum.StateManager().CurrentState()
err = p.ethereum.StateManager().Process(block, false)
-
if err != nil {
if ethutil.Config.Debug {
peerlogger.Infof("Block %x failed\n", block.Hash())
@@ -422,6 +420,8 @@ func (p *Peer) HandleInbound() {
} else {
lastBlock = block
}
+
+ p.lastBlockReceived = time.Now()
}
if msg.Data.Len() <= 1 {
@@ -561,6 +561,25 @@ func (p *Peer) HandleInbound() {
p.Stop()
}
+// General update method
+func (self *Peer) update() {
+ serviceTimer := time.NewTicker(5 * time.Second)
+
+out:
+ for {
+ select {
+ case <-serviceTimer.C:
+ if time.Since(self.lastBlockReceived) > 10*time.Second {
+ self.catchingUp = false
+ }
+ case <-self.quit:
+ break out
+ }
+ }
+
+ serviceTimer.Stop()
+}
+
func (p *Peer) Start() {
peerHost, peerPort, _ := net.SplitHostPort(p.conn.LocalAddr().String())
servHost, servPort, _ := net.SplitHostPort(p.conn.RemoteAddr().String())
@@ -583,6 +602,8 @@ func (p *Peer) Start() {
go p.HandleOutbound()
// Run the inbound handler in a new goroutine
go p.HandleInbound()
+ // Run the general update handler
+ go p.update()
// Wait a few seconds for startup and then ask for an initial ping
time.Sleep(2 * time.Second)