FedP2P/storage/interface.go

60 lines
1.7 KiB
Go
Raw Normal View History

2016-03-28 17:38:30 +08:00
package storage
2016-03-28 17:38:30 +08:00
import (
"io"
"github.com/anacrolix/torrent/metainfo"
)
type ClientImplCloser interface {
ClientImpl
Close() error
}
// Represents data storage for an unspecified torrent.
type ClientImpl interface {
OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
}
type TorrentCapacity *func() (cap int64, capped bool)
// Data storage bound to a torrent.
type TorrentImpl struct {
Piece func(p metainfo.Piece) PieceImpl
Close func() error
Flush func() error
// Storages that share the same space, will provide equal pointers. The function is called once
// to determine the storage for torrents sharing the same function pointer, and mutated in
// place.
Capacity TorrentCapacity
2016-03-28 17:38:30 +08:00
}
// Interacts with torrent piece data. Optional interfaces to implement include:
2022-12-05 14:49:27 +08:00
//
// io.WriterTo, such as when a piece supports a more efficient way to write out incomplete chunks.
// SelfHashing, such as when a piece supports a more efficient way to hash its contents.
type PieceImpl interface {
// These interfaces are not as strict as normally required. They can
2016-10-25 16:57:35 +08:00
// assume that the parameters are appropriate for the dimensions of the
// piece.
io.ReaderAt
io.WriterAt
2016-03-26 15:27:28 +08:00
// Called when the client believes the piece data will pass a hash check.
// The storage can move or mark the piece data as read-only as it sees
// fit.
2016-03-28 17:38:30 +08:00
MarkComplete() error
MarkNotComplete() error
// Returns true if the piece is complete.
Completion() Completion
}
type Completion struct {
Complete bool
Ok bool
}
// Allows a storage backend to override hashing (i.e. if it can do it more efficiently than the torrent client can)
type SelfHashing interface {
SelfHash() (metainfo.Hash, error)
}