server.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. fmt.Println("Hello World.")
  49. return nil
  50. }
  51. // 配置本地节点
  52. func (server *Server) setupLocalNode() (err error) {
  53. // 创建握手所需对象
  54. publicKey := crypto.FromECDSAPub(&server.PrivateKey.PublicKey)
  55. server.ourHandshake = &protoHandshake{
  56. Version: baseProtocolVersion,
  57. Name: server.Name,
  58. ID: publicKey[1:],
  59. }
  60. // TODO 新增协议,欺骗对等节点,先尝试没有协议的版本
  61. // 创建本地节点
  62. server.localnode = enode.NewLocalNode(server.PrivateKey)
  63. server.localnode.SetFallbackIP(net.IP{127, 0, 0, 1})
  64. // 配置本地静态IP
  65. ip, _ := server.NAT.ExternalIP()
  66. server.localnode.SetStaticIP(ip)
  67. return nil
  68. }
  69. // 配置节点发现逻辑
  70. func (server *Server) setupDiscovery() (err error) {
  71. return nil
  72. }
  73. // 监听器
  74. func (server *Server) setupListening() (err error) {
  75. return nil
  76. }
  77. // 设置拨号调度器
  78. func (server *Server) setupDialScheduler() (err error) {
  79. return nil
  80. }