9 type AnnounceRequest struct {
18 NumWant int32 // How many peer addresses are desired. -1 for default.
22 type AnnounceResponse struct {
23 Interval int32 // Minimum seconds the local peer should wait before next announce.
29 type AnnounceEvent int32
31 func (me AnnounceEvent) String() string {
32 // See BEP 3, "event".
33 return []string{"empty", "completed", "started", "stopped"}[me]
42 None AnnounceEvent = iota
43 Completed // The local peer just completed the torrent.
44 Started // The local peer has just resumed this torrent.
45 Stopped // The local peer is leaving the swarm.
48 type Client interface {
49 // Returns ErrNotConnected if Connect needs to be called.
50 Announce(*AnnounceRequest) (AnnounceResponse, error)
57 ErrNotConnected = errors.New("not connected")
58 ErrBadScheme = errors.New("unknown scheme")
60 schemes = make(map[string]func(*url.URL) Client)
63 func RegisterClientScheme(scheme string, newFunc func(*url.URL) Client) {
64 schemes[scheme] = newFunc
67 // Returns ErrBadScheme if the tracker scheme isn't recognised.
68 func New(rawurl string) (cl Client, err error) {
69 url_s, err := url.Parse(rawurl)
73 newFunc, ok := schemes[url_s.Scheme]