| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package p2p
- import (
- "blockchain-go/p2p/enode"
- "errors"
- "fmt"
- "github.com/ethereum/go-ethereum/crypto"
- "net"
- "sync"
- )
- var (
- ErrServerStopped = errors.New("server stopped")
- )
- // Server manages all peer connections.
- type Server struct {
- // Config fields may not be modified while the server is running.
- Config
- // Hooks for testing. These are useful because we can inhibit
- // the whole protocol stack.
- //newTransport func(net.Conn, *ecdsa.PublicKey) transport
- //newPeerHook func(*Peer)
- //listenFunc func(network, addr string) (net.Listener, error)
- lock sync.Mutex // protects running
- running bool
- //listener net.Listener
- ourHandshake *protoHandshake
- //loopWG sync.WaitGroup // loop, listenLoop
- //peerFeed event.Feed
- //log log.Logger
- //nodedb *enode.DB
- localnode *enode.LocalNode
- //ntab *discover.UDPv4
- //DiscV5 *discover.UDPv5
- //discmix *enode.FairMix
- //dialsched *dialScheduler
- // Channels into the run loop.
- //quit chan struct{}
- //addtrusted chan *enode.Node
- //removetrusted chan *enode.Node
- //peerOp chan peerOpFunc
- //peerOpDone chan struct{}
- //delpeer chan peerDrop
- //checkpointPostHandshake chan *conn
- //checkpointAddPeer chan *conn
- // State of run loop and listenLoop.
- //inboundHistory expHeap
- }
- func (server *Server) Start() (err error) {
- fmt.Println("Hello World.")
- return nil
- }
- // 配置本地节点
- func (server *Server) setupLocalNode() (err error) {
- // 创建握手所需对象
- publicKey := crypto.FromECDSAPub(&server.PrivateKey.PublicKey)
- server.ourHandshake = &protoHandshake{
- Version: baseProtocolVersion,
- Name: server.Name,
- ID: publicKey[1:],
- }
- // TODO 新增协议,欺骗对等节点,先尝试没有协议的版本
- // 创建本地节点
- server.localnode = enode.NewLocalNode(server.PrivateKey)
- server.localnode.SetFallbackIP(net.IP{127, 0, 0, 1})
- // 配置本地静态IP
- ip, _ := server.NAT.ExternalIP()
- server.localnode.SetStaticIP(ip)
- return nil
- }
- // 配置节点发现逻辑
- func (server *Server) setupDiscovery() (err error) {
- return nil
- }
- // 监听器
- func (server *Server) setupListening() (err error) {
- return nil
- }
- // 设置拨号调度器
- func (server *Server) setupDialScheduler() (err error) {
- return nil
- }
|