Handle webseed Client events
This commit is contained in:
parent
ff53ab860c
commit
5602ecd810
|
@ -741,8 +741,8 @@ func (t *Torrent) requestOffset(r request) int64 {
|
||||||
return torrentRequestOffset(*t.length, int64(t.usualPieceSize()), r)
|
return torrentRequestOffset(*t.length, int64(t.usualPieceSize()), r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the request that would include the given offset into the torrent
|
// Return the request that would include the given offset into the torrent data. Returns !ok if
|
||||||
// data. Returns !ok if there is no such request.
|
// there is no such request.
|
||||||
func (t *Torrent) offsetRequest(off int64) (req request, ok bool) {
|
func (t *Torrent) offsetRequest(off int64) (req request, ok bool) {
|
||||||
return torrentOffsetRequest(*t.length, t.info.PieceLength, int64(t.chunkSize), off)
|
return torrentOffsetRequest(*t.length, t.info.PieceLength, int64(t.chunkSize), off)
|
||||||
}
|
}
|
||||||
|
@ -2027,9 +2027,9 @@ func (t *Torrent) addWebSeed(url string) {
|
||||||
Events: make(chan webseed.ClientEvent),
|
Events: make(chan webseed.ClientEvent),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
go ws.eventProcessor()
|
||||||
ws.peer.PeerImpl = &ws
|
ws.peer.PeerImpl = &ws
|
||||||
t.webSeeds[url] = &ws.peer
|
t.webSeeds[url] = &ws.peer
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Torrent) peerIsActive(p *peer) (active bool) {
|
func (t *Torrent) peerIsActive(p *peer) (active bool) {
|
||||||
|
|
24
web_seed.go
24
web_seed.go
|
@ -3,6 +3,7 @@ package torrent
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
pp "github.com/anacrolix/torrent/peer_protocol"
|
||||||
"github.com/anacrolix/torrent/segments"
|
"github.com/anacrolix/torrent/segments"
|
||||||
"github.com/anacrolix/torrent/webseed"
|
"github.com/anacrolix/torrent/webseed"
|
||||||
)
|
)
|
||||||
|
@ -66,3 +67,26 @@ func (ws *webSeed) UpdateRequests() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *webSeed) Close() {}
|
func (ws *webSeed) Close() {}
|
||||||
|
|
||||||
|
func (ws *webSeed) eventProcessor() {
|
||||||
|
for ev := range ws.client.Events {
|
||||||
|
if ev.Err != nil {
|
||||||
|
panic(ev)
|
||||||
|
}
|
||||||
|
r, ok := ws.peer.t.offsetRequest(ev.RequestSpec.Start)
|
||||||
|
if !ok {
|
||||||
|
panic(ev)
|
||||||
|
}
|
||||||
|
ws.peer.t.cl.lock()
|
||||||
|
err := ws.peer.receiveChunk(&pp.Message{
|
||||||
|
Type: pp.Piece,
|
||||||
|
Index: r.Index,
|
||||||
|
Begin: r.Begin,
|
||||||
|
Piece: ev.Bytes,
|
||||||
|
})
|
||||||
|
ws.peer.t.cl.unlock()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue