mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-04 23:57:54 +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
|
||||
totalSize uint64
|
||||
fileDetails []FileDetail
|
||||
fileDetails []*FileDetail
|
||||
}
|
||||
|
||||
type Info struct {
|
||||
@@ -35,7 +35,7 @@ type Info struct {
|
||||
// 单个文件时,length为该文件的长度
|
||||
Length uint64 `json:"length"`
|
||||
// 多个文件
|
||||
Files []File `json:"files"`
|
||||
Files []*File `json:"files"`
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@@ -125,10 +125,10 @@ func calcFileSize(metaInfo *MetaInfo) {
|
||||
if metaInfo.Info != nil {
|
||||
fileCount := len(metaInfo.Info.Files)
|
||||
if fileCount > 0 {
|
||||
metaInfo.fileDetails = make([]FileDetail, fileCount)
|
||||
metaInfo.fileDetails = make([]*FileDetail, fileCount)
|
||||
var length uint64
|
||||
for i, f := range metaInfo.Info.Files {
|
||||
metaInfo.fileDetails[i] = FileDetail{
|
||||
metaInfo.fileDetails[i] = &FileDetail{
|
||||
Length: f.Length,
|
||||
Path: f.Path,
|
||||
Begin: int64(length),
|
||||
|
||||
@@ -303,10 +303,10 @@ func (pc *peerConn) handlePiece(buf []byte) {
|
||||
pieceBegin := int64(piece.Index) * int64(info.PieceLength)
|
||||
blockBegin := pieceBegin + int64(piece.Begin)
|
||||
// 计算block对应要写到的文件偏移
|
||||
var fileBlocks []fileBlock
|
||||
var fileBlocks []*fileBlock
|
||||
if len(info.Files) == 0 {
|
||||
// 单文件
|
||||
fileBlocks = append(fileBlocks, fileBlock{
|
||||
fileBlocks = append(fileBlocks, &fileBlock{
|
||||
filepath: info.Name,
|
||||
fileSeek: blockBegin,
|
||||
blockBegin: 0,
|
||||
@@ -420,7 +420,7 @@ func (pc *peerConn) handlePiece(buf []byte) {
|
||||
}
|
||||
|
||||
// 获取piece对应要写入的文件
|
||||
func getWriteFile(pieceBegin int64, fds []metainfo.FileDetail) int {
|
||||
func getWriteFile(pieceBegin int64, fds []*metainfo.FileDetail) int {
|
||||
for i, f := range fds {
|
||||
if f.Begin <= pieceBegin && f.End > pieceBegin {
|
||||
return i
|
||||
|
||||
@@ -158,7 +158,7 @@ type udpAnnounceResponse struct {
|
||||
interval uint32
|
||||
leechers uint32
|
||||
seeders uint32
|
||||
peers []peer.Peer
|
||||
peers []*peer.Peer
|
||||
}
|
||||
|
||||
func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
|
||||
@@ -170,11 +170,11 @@ func newUdpAnnounceResponse(buf []byte) *udpAnnounceResponse {
|
||||
seeders: binary.BigEndian.Uint32(buf[16:20]),
|
||||
}
|
||||
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++ {
|
||||
ipBegin := 20 + 6*i
|
||||
portBegin := ipBegin + 4
|
||||
response.peers[i] = peer.Peer{
|
||||
response.peers[i] = &peer.Peer{
|
||||
IP: binary.BigEndian.Uint32(buf[ipBegin:portBegin]),
|
||||
Port: binary.BigEndian.Uint16(buf[portBegin : portBegin+2]),
|
||||
}
|
||||
@@ -233,8 +233,8 @@ func (tracker *Tracker) announce(conn *net.UDPConn, timeout int64, connectionId
|
||||
}
|
||||
|
||||
// 通过tracker服务器获取peer信息
|
||||
func (tracker *Tracker) Tracker() <-chan []peer.Peer {
|
||||
peersCh := make(chan []peer.Peer)
|
||||
func (tracker *Tracker) Tracker() <-chan []*peer.Peer {
|
||||
peersCh := make(chan []*peer.Peer)
|
||||
metaInfo := tracker.MetaInfo
|
||||
|
||||
checkAnnounceList := func(announceList [][]string) bool {
|
||||
@@ -281,7 +281,7 @@ func (tracker *Tracker) Tracker() <-chan []peer.Peer {
|
||||
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 != "" {
|
||||
url, _ := url.Parse(announce)
|
||||
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
|
||||
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
|
||||
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
|
||||
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)
|
||||
if err != nil {
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user