فهرست منبع

handle实现了一半

skyfffire 2 سال پیش
والد
کامیت
b89e916f0a
1فایلهای تغییر یافته به همراه17 افزوده شده و 3 حذف شده
  1. 17 3
      p2p/peer.go

+ 17 - 3
p2p/peer.go

@@ -1,8 +1,10 @@
 package p2p
 
 import (
+	"blockchain-go/common/gopool"
 	"blockchain-go/common/mclock"
 	"blockchain-go/p2p/enode"
+	"blockchain-go/rlp"
 	"errors"
 	"fmt"
 	"net"
@@ -189,9 +191,21 @@ func (p *Peer) readLoop(errc chan<- error) {
 }
 
 func (p *Peer) handle(msg Msg) error {
-	fmt.Printf("msg: %v\n", msg)
-
-	// TODO 实现handle
+	fmt.Printf("code: %v, msg: %v.\n", msg.Code, msg.Payload)
+
+	switch {
+	case msg.Code == pingMsg:
+		msg.Discard()
+		gopool.Submit(func() {
+			SendItems(p.rw, pongMsg)
+		})
+	case msg.Code == discMsg:
+		var m struct{ R DiscReason }
+		rlp.Decode(msg.Payload, &m)
+		return m.R
+	case msg.Code < baseProtocolLength:
+		return msg.Discard()
+	}
 
 	return nil
 }