|
@@ -1,8 +1,10 @@
|
|
|
package p2p
|
|
package p2p
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "blockchain-go/common/gopool"
|
|
|
"blockchain-go/common/mclock"
|
|
"blockchain-go/common/mclock"
|
|
|
"blockchain-go/p2p/enode"
|
|
"blockchain-go/p2p/enode"
|
|
|
|
|
+ "blockchain-go/rlp"
|
|
|
"errors"
|
|
"errors"
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"net"
|
|
"net"
|
|
@@ -189,9 +191,21 @@ func (p *Peer) readLoop(errc chan<- error) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (p *Peer) handle(msg Msg) 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
|
|
return nil
|
|
|
}
|
|
}
|