From 15e5d2af3b080aae77b5405f53d50d161fbcd866 Mon Sep 17 00:00:00 2001 From: liwei Date: Thu, 23 Apr 2020 11:13:10 +0800 Subject: [PATCH] refactor: slice use pointer --- protocol/bt/metainfo/metainfo.go | 10 +++++----- protocol/bt/torrent/peer_conn.go | 6 +++--- protocol/bt/tracker/tracker.go | 16 ++++++++-------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/protocol/bt/metainfo/metainfo.go b/protocol/bt/metainfo/metainfo.go index 2a7f83a6..8f9c55d9 100644 --- a/protocol/bt/metainfo/metainfo.go +++ b/protocol/bt/metainfo/metainfo.go @@ -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), diff --git a/protocol/bt/torrent/peer_conn.go b/protocol/bt/torrent/peer_conn.go index b0349d59..478d2b71 100644 --- a/protocol/bt/torrent/peer_conn.go +++ b/protocol/bt/torrent/peer_conn.go @@ -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 diff --git a/protocol/bt/tracker/tracker.go b/protocol/bt/tracker/tracker.go index f5fa6932..fef4b144 100644 --- a/protocol/bt/tracker/tracker.go +++ b/protocol/bt/tracker/tracker.go @@ -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