relay.go
func NewRelay(ctx context.Context, h host.Host, upgrader *tptu.Upgrader, opts ...RelayOpt) (*Relay, error) {
	r := &Relay{
		upgrader: upgrader,
		host:     h,
		ctx:      ctx,
		self:     h.ID(),
		incoming: make(chan *Conn),
		relays:   make(map[peer.ID]struct{}),
		liveHops: make(map[peer.ID]map[peer.ID]int),
	}

	for _, opt := range opts {
		switch opt {
		case OptActive:
			r.active = true
		case OptHop:
			r.hop = true
		case OptDiscovery:
			r.discovery = true
		default:
			return nil, fmt.Errorf("unrecognized option: %d", opt)
		}
	}

	h.SetStreamHandler(ProtoID, r.handleNewStream)

	if r.discovery {
		h.Network().Notify(r.notifiee())
	}

	return r, nil
}
func NewRelay(ctx context.Context, h host.Host, upgrader *tptu.Upgrader, opts ...RelayOpt) (*Relay, error) {
	r := &Relay{
		upgrader: upgrader,
		host:     h,
		ctx:      ctx,
		self:     h.ID(),
		incoming: make(chan *Conn),
		relays:   make(map[peer.ID]struct{}),
		liveHops: make(map[peer.ID]map[peer.ID]int),
	}

	for _, opt := range opts {
		switch opt {
		case OptActive:
			r.active = true
		case OptHop:
			r.hop = true
		case OptDiscovery:
			r.discovery = true
		default:
			return nil, fmt.Errorf("unrecognized option: %d", opt)
		}
	}

	h.SetStreamHandler(ProtoID, r.handleNewStream)

	if r.discovery {
		h.Network().Notify(r.notifiee())
	}

	return r, nil
}
func NewRelay ( ctx context . Context , h host . Host , upgrader * tptu . Upgrader , opts ... RelayOpt ) ( * Relay , error ) { r := & Relay { upgrader : upgrader , host : h , ctx : ctx , self : h . ID ( ) , incoming : make ( chan * Conn ) , relays : make ( map [ peer . ID ] struct { } ) , liveHops : make ( map [ peer . ID ] map [ peer . ID ] int ) , } for _ , opt := range opts { switch opt { case OptActive : r . active = true case OptHop : r . hop = true case OptDiscovery : r . discovery = true default : return nil , fmt . Errorf ( " " , opt ) } } h . SetStreamHandler ( ProtoID , r . handleNewStream ) if r . discovery { h . Network ( ) . Notify ( r . notifiee ( ) ) } return r , nil }
// NewRelay constructs a new relay.
NewRelay constructs a new relay .