server.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package p2p
  2. import (
  3. "blockchain-go/p2p/enode"
  4. "errors"
  5. "fmt"
  6. "github.com/ethereum/go-ethereum/crypto"
  7. "net"
  8. "sync"
  9. )
  10. var (
  11. ErrServerStopped = errors.New("server stopped")
  12. )
  13. // Server manages all peer connections.
  14. type Server struct {
  15. // Config fields may not be modified while the server is running.
  16. Config
  17. // Hooks for testing. These are useful because we can inhibit
  18. // the whole protocol stack.
  19. //newTransport func(net.Conn, *ecdsa.PublicKey) transport
  20. //newPeerHook func(*Peer)
  21. //listenFunc func(network, addr string) (net.Listener, error)
  22. lock sync.Mutex // protects running
  23. running bool
  24. //listener net.Listener
  25. ourHandshake *protoHandshake
  26. //loopWG sync.WaitGroup // loop, listenLoop
  27. //peerFeed event.Feed
  28. //log log.Logger
  29. //nodedb *enode.DB
  30. localnode *enode.LocalNode
  31. //ntab *discover.UDPv4
  32. //DiscV5 *discover.UDPv5
  33. //discmix *enode.FairMix
  34. //dialsched *dialScheduler
  35. // Channels into the run loop.
  36. //quit chan struct{}
  37. //addtrusted chan *enode.Node
  38. //removetrusted chan *enode.Node
  39. //peerOp chan peerOpFunc
  40. //peerOpDone chan struct{}
  41. //delpeer chan peerDrop
  42. //checkpointPostHandshake chan *conn
  43. //checkpointAddPeer chan *conn
  44. // State of run loop and listenLoop.
  45. //inboundHistory expHeap
  46. }
  47. func (server *Server) Start() (err error) {
  48. if err := server.setupLocalNode(); err != nil {
  49. return err
  50. }
  51. fmt.Println(server.localnode.Node().String())
  52. return nil
  53. }
  54. // 配置本地节点
  55. func (server *Server) setupLocalNode() (err error) {
  56. // 创建握手所需对象
  57. publicKey := crypto.FromECDSAPub(&server.PrivateKey.PublicKey)
  58. server.ourHandshake = &protoHandshake{
  59. Version: baseProtocolVersion,
  60. Name: server.Name,
  61. ID: publicKey[1:],
  62. }
  63. // 创建本地节点
  64. server.localnode = enode.NewLocalNode(server.PrivateKey)
  65. server.localnode.SetFallbackIP(net.IP{127, 0, 0, 1})
  66. // 配置本地静态IP
  67. ip, _ := server.NAT.ExternalIP()
  68. server.localnode.SetStaticIP(ip)
  69. return nil
  70. }
  71. // 配置节点发现逻辑
  72. func (server *Server) setupDiscovery() (err error) {
  73. return nil
  74. }
  75. // 监听器
  76. func (server *Server) setupListening() (err error) {
  77. return nil
  78. }
  79. // 设置拨号调度器
  80. func (server *Server) setupDialScheduler() (err error) {
  81. return nil
  82. }