|
|
@@ -2,6 +2,7 @@ package p2p
|
|
|
|
|
|
import (
|
|
|
"blockchain-go/common/gopool"
|
|
|
+ "blockchain-go/event"
|
|
|
"blockchain-go/p2p/discover"
|
|
|
"blockchain-go/p2p/enode"
|
|
|
"blockchain-go/p2p/enr"
|
|
|
@@ -40,7 +41,7 @@ type Server struct {
|
|
|
listener net.Listener
|
|
|
ourHandshake *protoHandshake
|
|
|
loopWG sync.WaitGroup // loop, listenLoop
|
|
|
- //peerFeed event.Feed
|
|
|
+ peerFeed event.Feed
|
|
|
//log log.Logger
|
|
|
|
|
|
//nodedb *enode.DB
|
|
|
@@ -55,7 +56,7 @@ type Server struct {
|
|
|
//removetrusted chan *enode.Node
|
|
|
//peerOp chan peerOpFunc
|
|
|
//peerOpDone chan struct{}
|
|
|
- //delpeer chan peerDrop
|
|
|
+ delpeer chan peerDrop
|
|
|
checkpointPostHandshake chan *conn
|
|
|
checkpointAddPeer chan *conn
|
|
|
sigs chan os.Signal
|
|
|
@@ -169,7 +170,24 @@ func (server *Server) launchPeer(c *conn) *Peer {
|
|
|
}
|
|
|
|
|
|
func (server *Server) runPeer(p *Peer) {
|
|
|
- // TODO 实现peer的细节
|
|
|
+ server.peerFeed.Send(&PeerEvent{
|
|
|
+ Type: PeerEventTypeAdd,
|
|
|
+ Peer: p.ID(),
|
|
|
+ RemoteAddress: p.RemoteAddr().String(),
|
|
|
+ LocalAddress: p.LocalAddr().String(),
|
|
|
+ })
|
|
|
+
|
|
|
+ remoteRequested, err := p.run()
|
|
|
+
|
|
|
+ server.delpeer <- peerDrop{p, err, remoteRequested}
|
|
|
+
|
|
|
+ server.peerFeed.Send(&PeerEvent{
|
|
|
+ Type: PeerEventTypeDrop,
|
|
|
+ Peer: p.ID(),
|
|
|
+ Error: err.Error(),
|
|
|
+ RemoteAddress: p.RemoteAddr().String(),
|
|
|
+ LocalAddress: p.LocalAddr().String(),
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
func (server *Server) StopListener() {
|