This commit is contained in:
YouROK
2020-11-06 16:49:18 +03:00
parent a1e17b1cf3
commit f92b9eebf3
11 changed files with 83 additions and 60 deletions

1
.gitignore vendored
View File

@@ -25,3 +25,4 @@ dist/
toolchains/ toolchains/
/src/crawshaw.io/ /src/crawshaw.io/
/src/go.etcd.io/ /src/go.etcd.io/
/src/google.golang.org/

View File

@@ -26,15 +26,16 @@ export GOPATH="${PWD}"
GOBIN="/usr/local/go/bin/go" GOBIN="/usr/local/go/bin/go"
[ -d src/github.com/alexflint/go-arg ] && go get -v github.com/alexflint/go-arg [ -d src/github.com/alexflint/go-arg ] && go get -v github.com/alexflint/go-arg
[ -d src/github.com/anacrolix/dht ] && go get -v github.com/anacrolix/dht [ -d src/github.com/anacrolix/dht ] && go get -v github.com/anacrolix/dht
[ -d src/github.com/anacrolix/missinggo/httptoo ] && go get -v github.com/anacrolix/missinggo/httptoo [ -d src/github.com/anacrolix/missinggo/httptoo ] && go get -v github.com/anacrolix/missinggo/httptoo
[ -d src/github.com/anacrolix/torrent ] && go get -v github.com/anacrolix/torrent [ -d src/github.com/anacrolix/torrent ] && go get -v github.com/anacrolix/torrent
[ -d src/github.com/anacrolix/torrent/iplist ] && go get -v github.com/anacrolix/torrent/iplist [ -d src/github.com/anacrolix/torrent/iplist ] && go get -v github.com/anacrolix/torrent/iplist
[ -d src/github.com/anacrolix/torrent/metainfo ] && go get -v github.com/anacrolix/torrent/metainfo [ -d src/github.com/anacrolix/torrent/metainfo ] && go get -v github.com/anacrolix/torrent/metainfo
[ -d src/github.com/anacrolix/utp ] && go get -v github.com/anacrolix/utp [ -d src/github.com/anacrolix/utp ] && go get -v github.com/anacrolix/utp
[ -d src/github.com/labstack/echo ] && go get -v github.com/labstack/echo
[ -d src/github.com/labstack/echo/middleware ] && go get -v github.com/labstack/echo/middleware [ -d src/github.com/gin-gonic/gin ] && go get -u github.com/gin-gonic/gin
[ -d src/github.com/labstack/gommon/bytes ] && go get -v github.com/labstack/gommon/bytes
[ -d src/github.com/pion/webrtc/v2 ] && go get -v github.com/pion/webrtc/v2 [ -d src/github.com/pion/webrtc/v2 ] && go get -v github.com/pion/webrtc/v2
[ -d src/go.etcd.io/bbolt ] && go get -v go.etcd.io/bbolt [ -d src/go.etcd.io/bbolt ] && go get -v go.etcd.io/bbolt

View File

@@ -10,7 +10,6 @@ import (
"github.com/alexflint/go-arg" "github.com/alexflint/go-arg"
"server" "server"
"server/settings"
"server/version" "server/version"
) )
@@ -45,12 +44,7 @@ func main() {
Preconfig(params.Kill) Preconfig(params.Kill)
server.Start(params.Path, params.Port) server.Start(params.Path, params.Port, params.RDB)
if (params.RDB) {
settings.SetRDB()
} else {
settings.SaveSettings()
}
fmt.Println(server.WaitServer()) fmt.Println(server.WaitServer())
time.Sleep(time.Second * 3) time.Sleep(time.Second * 3)
os.Exit(0) os.Exit(0)

View File

@@ -9,10 +9,11 @@ import (
"os" "os"
"os/signal" "os/signal"
"syscall" "syscall"
"server"
) )
func Preconfig(kill bool) { func Preconfig(kill bool) {
if kill {
sigc := make(chan os.Signal, 1) sigc := make(chan os.Signal, 1)
signal.Notify(sigc, signal.Notify(sigc,
syscall.SIGHUP, syscall.SIGHUP,
@@ -23,11 +24,14 @@ func Preconfig(kill bool) {
syscall.SIGQUIT) syscall.SIGQUIT)
go func() { go func() {
for s := range sigc { for s := range sigc {
if kill {
fmt.Println("Signal catched:", s) fmt.Println("Signal catched:", s)
fmt.Println("For stop server, close in web") fmt.Println("For stop server, close in web")
} else {
server.Stop()
}
} }
}() }()
}
//dns resover //dns resover
addrs, err := net.LookupHost("www.themoviedb.org") addrs, err := net.LookupHost("www.themoviedb.org")

View File

@@ -2,6 +2,7 @@ package server
import ( import (
"server/settings" "server/settings"
"server/web"
) )
func Start(settingsPath, port string, roSets bool) { func Start(settingsPath, port string, roSets bool) {
@@ -9,18 +10,18 @@ func Start(settingsPath, port string, roSets bool) {
if port == "" { if port == "" {
port = "8090" port = "8090"
} }
//server.Start(port) web.Start(port)
} }
func WaitServer() string { func WaitServer() string {
//err := server.Wait() err := web.Wait()
// if err != nil { if err != nil {
// return err.Error() return err.Error()
// } }
return "" return ""
} }
func Stop() { func Stop() {
// go server.Stop() web.Stop()
settings.CloseDB() settings.CloseDB()
} }

View File

@@ -38,7 +38,7 @@ func (v *BTSets) String() string {
} }
var ( var (
BTsets = loadBTSets() BTsets *BTSets
) )
func SetBTSets(sets *BTSets) { func SetBTSets(sets *BTSets) {
@@ -54,12 +54,12 @@ func SetBTSets(sets *BTSets) {
tdb.Set("Settings", "BitTorr", buf) tdb.Set("Settings", "BitTorr", buf)
} }
func loadBTSets() *BTSets { func loadBTSets() {
buf := tdb.Get("Settings", "BitTorr") buf := tdb.Get("Settings", "BitTorr")
if len(buf) > 0 { if len(buf) > 0 {
err := json.Unmarshal(buf, &BTsets) err := json.Unmarshal(buf, &BTsets)
if err == nil { if err == nil {
return BTsets return
} }
log.TLogln("Error unmarshal btsets", err) log.TLogln("Error unmarshal btsets", err)
} }
@@ -73,5 +73,5 @@ func loadBTSets() *BTSets {
sets.DhtConnectionLimit = 500 sets.DhtConnectionLimit = 500
sets.RetrackersMode = 1 sets.RetrackersMode = 1
sets.TorrentDisconnectTimeout = 30 sets.TorrentDisconnectTimeout = 30
return sets BTsets = sets
} }

View File

@@ -1,10 +1,9 @@
package reader package torr
import ( import (
"github.com/anacrolix/torrent"
"server/torr"
"io" "io"
"github.com/anacrolix/torrent"
) )
type Reader struct { type Reader struct {
@@ -14,7 +13,7 @@ type Reader struct {
file *torrent.File file *torrent.File
} }
func NewReader(torr *torr.Torrent, file *torrent.File, readahead int64) *Reader { func NewReader(torr *Torrent, file *torrent.File, readahead int64) *Reader {
r := new(Reader) r := new(Reader)
r.file = file r.file = file
r.Reader = file.NewReader() r.Reader = file.NewReader()

View File

@@ -5,8 +5,8 @@ import (
"sort" "sort"
"sync" "sync"
"github.com/anacrolix/torrent"
"server/settings" "server/settings"
"server/torr/reader"
"server/torr/utils" "server/torr/utils"
"github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/metainfo"
@@ -36,7 +36,7 @@ type Cache struct {
prcLoaded int prcLoaded int
readers map[*reader.Reader]struct{} readers map[torrent.Reader]struct{}
} }
func NewCache(capacity int64, storage *Storage) *Cache { func NewCache(capacity int64, storage *Storage) *Cache {
@@ -45,7 +45,7 @@ func NewCache(capacity int64, storage *Storage) *Cache {
filled: 0, filled: 0,
pieces: make(map[int]*Piece), pieces: make(map[int]*Piece),
s: storage, s: storage,
readers: make(map[*reader.Reader]struct{}), readers: make(map[torrent.Reader]struct{}),
} }
return ret return ret
@@ -173,13 +173,13 @@ func prc(val, of int) int {
return int(float64(val) * 100.0 / float64(of)) return int(float64(val) * 100.0 / float64(of))
} }
func (c *Cache) AddReader(r *reader.Reader) { func (c *Cache) AddReader(r torrent.Reader) {
c.muReader.Lock() c.muReader.Lock()
defer c.muReader.Unlock() defer c.muReader.Unlock()
c.readers[r] = struct{}{} c.readers[r] = struct{}{}
} }
func (c *Cache) RemReader(r *reader.Reader) { func (c *Cache) RemReader(r torrent.Reader) {
c.muReader.Lock() c.muReader.Lock()
defer c.muReader.Unlock() defer c.muReader.Unlock()
delete(c.readers, r) delete(c.readers, r)

View File

@@ -10,12 +10,10 @@ import (
"server/torr/utils" "server/torr/utils"
utils2 "server/utils" utils2 "server/utils"
"server/torr/reader"
"server/torr/storage/torrstor" "server/torr/storage/torrstor"
"github.com/anacrolix/torrent" "github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/metainfo"
"github.com/labstack/gommon/bytes"
) )
type TorrentStatus int type TorrentStatus int
@@ -227,15 +225,15 @@ func (t *Torrent) Length() int64 {
return t.Torrent.Length() return t.Torrent.Length()
} }
func (t *Torrent) NewReader(file *torrent.File, readahead int64) *reader.Reader { func (t *Torrent) NewReader(file *torrent.File, readahead int64) *Reader {
if t.status == TorrentClosed { if t.status == TorrentClosed {
return nil return nil
} }
reader := reader.NewReader(t, file, readahead) reader := NewReader(t, file, readahead)
return reader return reader
} }
func (t *Torrent) CloseReader(reader *reader.Reader) { func (t *Torrent) CloseReader(reader *Reader) {
reader.Close() reader.Close()
t.cache.RemReader(reader) t.cache.RemReader(reader)
t.expiredTime = time.Now().Add(time.Second * time.Duration(settings.BTsets.TorrentDisconnectTimeout)) t.expiredTime = time.Now().Add(time.Second * time.Duration(settings.BTsets.TorrentDisconnectTimeout))
@@ -317,7 +315,7 @@ func (t *Torrent) Preload(file *torrent.File, size int64) {
for t.status == TorrentPreload { for t.status == TorrentPreload {
t.expiredTime = time.Now().Add(time.Minute * 5) t.expiredTime = time.Now().Add(time.Minute * 5)
t.PreloadedBytes = t.Torrent.BytesCompleted() t.PreloadedBytes = t.Torrent.BytesCompleted()
log.Println("Preload:", file.Torrent().InfoHash().HexString(), bytes.Format(t.PreloadedBytes), "/", bytes.Format(t.PreloadSize), "Speed:", utils2.Format(t.DownloadSpeed), "Peers:[", t.Torrent.Stats().ConnectedSeeders, "]", t.Torrent.Stats().ActivePeers, "/", t.Torrent.Stats().TotalPeers) log.Println("Preload:", file.Torrent().InfoHash().HexString(), utils2.Format(float64(t.PreloadedBytes)), "/", utils2.Format(float64(t.PreloadSize)), "Speed:", utils2.Format(t.DownloadSpeed), "Peers:[", t.Torrent.Stats().ConnectedSeeders, "]", t.Torrent.Stats().ActivePeers, "/", t.Torrent.Stats().TotalPeers)
if t.PreloadedBytes >= t.PreloadSize { if t.PreloadedBytes >= t.PreloadSize {
return return
} }

View File

@@ -2,20 +2,9 @@ package utils
import ( import (
"fmt" "fmt"
"regexp"
"strconv" "strconv"
"strings"
) )
func CleanFName(file string) string {
re := regexp.MustCompile(`[ !*'();:@&=+$,/?#\[\]~"{}]`)
ret := re.ReplaceAllString(file, `_`)
ret = strings.Replace(ret, "__", "_", -1)
ret = strings.Replace(ret, "._", "_", -1)
ret = strings.Replace(ret, "_.", ".", -1)
return ret
}
const ( const (
_ = 1.0 << (10 * iota) // ignore first value by assigning to blank identifier _ = 1.0 << (10 * iota) // ignore first value by assigning to blank identifier
KB KB

36
src/server/web/server.go Normal file
View File

@@ -0,0 +1,36 @@
package web
import (
"github.com/gin-gonic/gin"
"server/torr"
)
var (
BTS = torr.NewBTS()
waitChan = make(chan error)
)
func Start(port string) {
BTS.Connect()
route := gin.New()
route.Use(gin.Logger(), gin.Recovery())
route.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
waitChan <- route.Run(":" + port)
}
func Wait() error {
return <-waitChan
}
func Stop() {
BTS.Disconnect()
waitChan <- nil
}