mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-14 04:13:43 +00:00
refactor: slice use pointer
This commit is contained in:
1 parent
d6d411f48c
commit
15e5d2af3b
3 files changed
+16
-16
No files matched your search
@@ -25,7 +25,7 @@ type MetaInfo struct {
|
|||||||
|
|
||||||
infoHash [20]byte
|
infoHash [20]byte
|
||||||
totalSize uint64
|
totalSize uint64
|
||||||
fileDetails []FileDetail
|
fileDetails []*FileDetail
|
||||||
}
|
}
|
||||||
|
|
||||||
type Info struct {
|
type Info struct {
|
||||||
@@ -35,7 +35,7 @@ type Info struct {
|
|||||||
// 单个文件时,length为该文件的长度
|
// 单个文件时,length为该文件的长度
|
||||||
Length uint64 `json:"length"`
|
Length uint64 `json:"length"`
|
||||||
// 多个文件
|
// 多个文件
|
||||||
Files []File `json:"files"`
|
Files []*File `json:"files"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type File struct {
|
type File struct {
|
||||||
@@ -116,7 +116,7 @@ func (metaInfo *MetaInfo) GetInfoHash() [20]byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取所有文件的开始偏移字节
|
// 获取所有文件的开始偏移字节
|
||||||
func (metaInfo *MetaInfo) GetFileDetails() []FileDetail {
|
func (metaInfo *MetaInfo) GetFileDetails() []*FileDetail {
|
||||||
return metaInfo.fileDetails
|
return metaInfo.fileDetails
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,10 +125,10 @@ func calcFileSize(metaInfo *MetaInfo) {
|
|||||||
if metaInfo.Info != nil {
|
if metaInfo.Info != nil {
|
||||||
fileCount := len(metaInfo.Info.Files)
|
fileCount := len(metaInfo.Info.Files)
|
||||||
if fileCount > 0 {
|
if fileCount > 0 {
|
||||||
metaInfo.fileDetails = make([]FileDetail, fileCount)
|
metaInfo.fileDetails = make([]*FileDetail, fileCount)
|
||||||
var length uint64
|
var length uint64
|
||||||
for i, f := range metaInfo.Info.Files {
|
for i, f := range metaInfo.Info.Files {
|
||||||
metaInfo.fileDetails[i] = FileDetail{
|
metaInfo.fileDetails[i] = &FileDetail{
|
||||||
Length: f.Length,
|
Length: f.Length,
|
||||||
Path: f.Path,
|
Path: f.Path,
|
||||||
Begin: int64(length),
|
Begin: int64(length),
|
||||||
|
|||||||
@@ -303,10 +303,10 @@ func (pc *peerConn) handlePiece(buf []byte) {
|
|||||||
pieceBegin := int64(piece.Index) * int64(info.PieceLength)
|
pieceBegin := int64(piece.Index) * int64(info.PieceLength)
|
||||||
blockBegin := pieceBegin + int64(piece.Begin)
|
blockBegin := pieceBegin + int64(piece.Begin)
|
||||||
// 计算block对应要写到的文件偏移
|
// 计算block对应要写到的文件偏移
|
||||||
var fileBlocks []fileBlock
|
var fileBlocks []*fileBlock
|
||||||
if len(info.Files) == 0 {
|
if len(info.Files) == 0 {
|
||||||
// 单文件
|
// 单文件
|
||||||
fileBlocks = append(fileBlocks, fileBlock{
|
fileBlocks = append(fileBlocks, &fileBlock{
|
||||||
filepath: info.Name,
|
filepath: info.Name,
|
||||||
fileSeek: blockBegin,
|
fileSeek: blockBegin,
|
||||||
blockBegin: 0,
|
blockBegin: 0,
|
||||||
@@ -420,7 +420,7 @@ func (pc *peerConn) handlePiece(buf []byte) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取piece对应要写入的文件
|
// 获取piece对应要写入的文件
|
||||||
func getWriteFile(pieceBegin int64, fds []metainfo.FileDetail) int {
|
func getWriteFile(pieceBegin int64, fds []*metainfo.FileDetail) int {
|
||||||
for i, f := range fds {
|
for i, f := range fds {
|
||||||
if f.Begin <= pieceBegin && f.End > pieceBegin {
|
if f.Begin <= pieceBegin && f.End > pieceBegin {
|
||||||
return i
|
return i
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ type udpAnnounceResponse struct {
|
|||||||
interval uint32
|
interval uint32
|
||||||
leechers uint32
|
leechers uint32
|
||||||
seeders uint32
|
seeders uint32
|
||||||
peers []peer.Peer
|
peers []*peer.Peer
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
|
func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
|
||||||
@@ -170,11 +170,11 @@ func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
|
|||||||
seeders: binary.BigEndian.Uint32(buf[16:20]),
|
seeders: binary.BigEndian.Uint32(buf[16:20]),
|
||||||
}
|
}
|
||||||
count := (len(buf) - 20) / 6
|
count := (len(buf) - 20) / 6
|
||||||
response.peers = make([]peer.Peer, count, count)
|
response.peers = make([]*peer.Peer, count, count)
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
ipBegin := 20 + 6*i
|
ipBegin := 20 + 6*i
|
||||||
portBegin := ipBegin + 4
|
portBegin := ipBegin + 4
|
||||||
response.peers[i] = peer.Peer{
|
response.peers[i] = &peer.Peer{
|
||||||
IP: binary.BigEndian.Uint32(buf[ipBegin:portBegin]),
|
IP: binary.BigEndian.Uint32(buf[ipBegin:portBegin]),
|
||||||
Port: binary.BigEndian.Uint16(buf[portBegin : portBegin+2]),
|
Port: binary.BigEndian.Uint16(buf[portBegin : portBegin+2]),
|
||||||
}
|
}
|
||||||
@@ -233,8 +233,8 @@ func (tracker *Tracker) announce(conn *net.UDPConn, timeout int64, connectionId
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 通过tracker服务器获取peer信息
|
// 通过tracker服务器获取peer信息
|
||||||
func (tracker *Tracker) Tracker() <-chan []peer.Peer {
|
func (tracker *Tracker) Tracker() <-chan []*peer.Peer {
|
||||||
peersCh := make(chan []peer.Peer)
|
peersCh := make(chan []*peer.Peer)
|
||||||
metaInfo := tracker.MetaInfo
|
metaInfo := tracker.MetaInfo
|
||||||
|
|
||||||
checkAnnounceList := func(announceList [][]string) bool {
|
checkAnnounceList := func(announceList [][]string) bool {
|
||||||
@@ -281,7 +281,7 @@ func (tracker *Tracker) Tracker() <-chan []peer.Peer {
|
|||||||
return peersCh
|
return peersCh
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tracker *Tracker) DoTracker(announce string) (peers []peer.Peer, err error) {
|
func (tracker *Tracker) DoTracker(announce string) (peers []*peer.Peer, err error) {
|
||||||
if announce != "" {
|
if announce != "" {
|
||||||
url, _ := url.Parse(announce)
|
url, _ := url.Parse(announce)
|
||||||
switch url.Scheme {
|
switch url.Scheme {
|
||||||
@@ -297,7 +297,7 @@ func (tracker *Tracker) DoTracker(announce string) (peers []peer.Peer, err error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// http://bittorrent.org/beps/bep_0003.html#trackers
|
// http://bittorrent.org/beps/bep_0003.html#trackers
|
||||||
func (tracker *Tracker) httpTracker(url *url.URL) (peers []peer.Peer, err error) {
|
func (tracker *Tracker) httpTracker(url *url.URL) (peers []*peer.Peer, err error) {
|
||||||
metaInfo := tracker.MetaInfo
|
metaInfo := tracker.MetaInfo
|
||||||
peerID := tracker.PeerID
|
peerID := tracker.PeerID
|
||||||
|
|
||||||
@@ -335,7 +335,7 @@ func (tracker *Tracker) httpTracker(url *url.URL) (peers []peer.Peer, err error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// http://bittorrent.org/beps/bep_0015.html
|
// http://bittorrent.org/beps/bep_0015.html
|
||||||
func (tracker *Tracker) udpTracker(url *url.URL) (peers []peer.Peer, err error) {
|
func (tracker *Tracker) udpTracker(url *url.URL) (peers []*peer.Peer, err error) {
|
||||||
conn, err := dial(url)
|
conn, err := dial(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in new issue
Block a user