Browse Source

握手成功了,不需要peer???

skyfffire 2 years ago
parent
commit
cd66b2bf62
1 changed files with 25 additions and 7 deletions
  1. 25 7
      p2p/server.go

+ 25 - 7
p2p/server.go

@@ -111,10 +111,11 @@ func (server *Server) run() {
 
 	fmt.Printf("Started P2P networking, self: %v.\n", server.localnode.Node().URLv4())
 
-	//var (
-	//	peers        = make(map[enode.ID]*Peer)
-	//	inboundCount = 0
-	//)
+	var (
+		peers        = make(map[enode.ID]*Peer)
+		inboundCount = 0
+	)
+
 running:
 	for {
 		select {
@@ -123,14 +124,31 @@ running:
 
 			break running
 		case c := <-server.checkpointPostHandshake:
-			p := server.launchPeer(c)
-			fmt.Printf("launchPeer: %v\n", p.rw.node.IP())
+			//p := server.launchPeer(c)
+			//fmt.Printf("Check peer in local: %v\n", p.rw.node.IP())
+
+			c.cont <- server.postHandshakeChecks(peers, inboundCount, c)
 		case c := <-server.checkpointAddPeer:
 			fmt.Printf("checkpointAddPeer: %v.\n", c.name)
 		}
 	}
 }
 
+func (server *Server) postHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error {
+	switch {
+	case !c.is(trustedConn) && len(peers) >= server.MaxPeers:
+		return DiscTooManyPeers
+	//case !c.is(trustedConn) && c.is(inboundConn) && inboundCount >= server.maxInboundConns():
+	//	return DiscTooManyPeers
+	case peers[c.node.ID()] != nil:
+		return DiscAlreadyConnected
+	case c.node.ID() == server.localnode.ID():
+		return DiscSelf
+	default:
+		return nil
+	}
+}
+
 func (server *Server) launchPeer(c *conn) *Peer {
 	p := newPeer(c, server.Protocols)
 	// ❌ 首先完成eth协议,封装在在eth/protocols/eth/handler.go
@@ -434,7 +452,7 @@ func (server *Server) setupConn(c *conn, dialDest *enode.Node) error {
 		return err
 	}
 	c.caps, c.name = phs.Caps, phs.Name
-	//fmt.Printf("Handshake ok, id: %v, addr: %v.\n", c.node.ID(), c.fd.RemoteAddr())
+	fmt.Printf("Handshake ok, id: %v, addr: %v.\n", c.node.ID(), c.fd.RemoteAddr())
 
 	// 握手成功后将此链接放入addPeer的检查点
 	err = server.checkpoint(c, server.checkpointAddPeer)