From f92b9eebf3533dfda51894866b84610232751c15 Mon Sep 17 00:00:00 2001 From: YouROK <8yourok8@mail.ru> Date: Fri, 6 Nov 2020 16:49:18 +0300 Subject: [PATCH] migrate --- .gitignore | 1 + build-all.sh | 7 +++-- src/main/main.go | 8 +---- src/main/preconfig_pos.go | 30 +++++++++++-------- src/server/server.go | 13 ++++---- src/server/settings/torrbt.go | 8 ++--- src/server/torr/{reader => }/reader.go | 9 +++--- src/server/torr/storage/torrstor/cache.go | 10 +++---- src/server/torr/torrent.go | 10 +++---- src/server/utils/strings.go | 11 ------- src/server/web/server.go | 36 +++++++++++++++++++++++ 11 files changed, 83 insertions(+), 60 deletions(-) rename src/server/torr/{reader => }/reader.go (89%) create mode 100644 src/server/web/server.go diff --git a/.gitignore b/.gitignore index 81458b3..6833f5f 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ dist/ toolchains/ /src/crawshaw.io/ /src/go.etcd.io/ +/src/google.golang.org/ diff --git a/build-all.sh b/build-all.sh index 585af0c..8392969 100755 --- a/build-all.sh +++ b/build-all.sh @@ -26,15 +26,16 @@ export GOPATH="${PWD}" 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/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/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/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/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/labstack/gommon/bytes ] && go get -v github.com/labstack/gommon/bytes + +[ -d src/github.com/gin-gonic/gin ] && go get -u github.com/gin-gonic/gin + [ -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 diff --git a/src/main/main.go b/src/main/main.go index 72f9604..341670d 100644 --- a/src/main/main.go +++ b/src/main/main.go @@ -10,7 +10,6 @@ import ( "github.com/alexflint/go-arg" "server" - "server/settings" "server/version" ) @@ -45,12 +44,7 @@ func main() { Preconfig(params.Kill) - server.Start(params.Path, params.Port) - if (params.RDB) { - settings.SetRDB() - } else { - settings.SaveSettings() - } + server.Start(params.Path, params.Port, params.RDB) fmt.Println(server.WaitServer()) time.Sleep(time.Second * 3) os.Exit(0) diff --git a/src/main/preconfig_pos.go b/src/main/preconfig_pos.go index 0c6e380..1cdd4c2 100644 --- a/src/main/preconfig_pos.go +++ b/src/main/preconfig_pos.go @@ -9,25 +9,29 @@ import ( "os" "os/signal" "syscall" + + "server" ) func Preconfig(kill bool) { - if kill { - sigc := make(chan os.Signal, 1) - signal.Notify(sigc, - syscall.SIGHUP, - syscall.SIGINT, - syscall.SIGSTOP, - syscall.SIGPIPE, - syscall.SIGTERM, - syscall.SIGQUIT) - go func() { - for s := range sigc { + sigc := make(chan os.Signal, 1) + signal.Notify(sigc, + syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGSTOP, + syscall.SIGPIPE, + syscall.SIGTERM, + syscall.SIGQUIT) + go func() { + for s := range sigc { + if kill { fmt.Println("Signal catched:", s) fmt.Println("For stop server, close in web") + } else { + server.Stop() } - }() - } + } + }() //dns resover addrs, err := net.LookupHost("www.themoviedb.org") diff --git a/src/server/server.go b/src/server/server.go index 8573c44..cdf5941 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -2,6 +2,7 @@ package server import ( "server/settings" + "server/web" ) func Start(settingsPath, port string, roSets bool) { @@ -9,18 +10,18 @@ func Start(settingsPath, port string, roSets bool) { if port == "" { port = "8090" } - //server.Start(port) + web.Start(port) } func WaitServer() string { - //err := server.Wait() - // if err != nil { - // return err.Error() - // } + err := web.Wait() + if err != nil { + return err.Error() + } return "" } func Stop() { - // go server.Stop() + web.Stop() settings.CloseDB() } diff --git a/src/server/settings/torrbt.go b/src/server/settings/torrbt.go index 040c823..23dbaad 100644 --- a/src/server/settings/torrbt.go +++ b/src/server/settings/torrbt.go @@ -38,7 +38,7 @@ func (v *BTSets) String() string { } var ( - BTsets = loadBTSets() + BTsets *BTSets ) func SetBTSets(sets *BTSets) { @@ -54,12 +54,12 @@ func SetBTSets(sets *BTSets) { tdb.Set("Settings", "BitTorr", buf) } -func loadBTSets() *BTSets { +func loadBTSets() { buf := tdb.Get("Settings", "BitTorr") if len(buf) > 0 { err := json.Unmarshal(buf, &BTsets) if err == nil { - return BTsets + return } log.TLogln("Error unmarshal btsets", err) } @@ -73,5 +73,5 @@ func loadBTSets() *BTSets { sets.DhtConnectionLimit = 500 sets.RetrackersMode = 1 sets.TorrentDisconnectTimeout = 30 - return sets + BTsets = sets } diff --git a/src/server/torr/reader/reader.go b/src/server/torr/reader.go similarity index 89% rename from src/server/torr/reader/reader.go rename to src/server/torr/reader.go index dfcd325..f7dc260 100644 --- a/src/server/torr/reader/reader.go +++ b/src/server/torr/reader.go @@ -1,10 +1,9 @@ -package reader +package torr import ( - "github.com/anacrolix/torrent" - "server/torr" - "io" + + "github.com/anacrolix/torrent" ) type Reader struct { @@ -14,7 +13,7 @@ type Reader struct { 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.file = file r.Reader = file.NewReader() diff --git a/src/server/torr/storage/torrstor/cache.go b/src/server/torr/storage/torrstor/cache.go index 58cfbfa..4ac7cd9 100644 --- a/src/server/torr/storage/torrstor/cache.go +++ b/src/server/torr/storage/torrstor/cache.go @@ -5,8 +5,8 @@ import ( "sort" "sync" + "github.com/anacrolix/torrent" "server/settings" - "server/torr/reader" "server/torr/utils" "github.com/anacrolix/torrent/metainfo" @@ -36,7 +36,7 @@ type Cache struct { prcLoaded int - readers map[*reader.Reader]struct{} + readers map[torrent.Reader]struct{} } func NewCache(capacity int64, storage *Storage) *Cache { @@ -45,7 +45,7 @@ func NewCache(capacity int64, storage *Storage) *Cache { filled: 0, pieces: make(map[int]*Piece), s: storage, - readers: make(map[*reader.Reader]struct{}), + readers: make(map[torrent.Reader]struct{}), } return ret @@ -173,13 +173,13 @@ func prc(val, of int) int { 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() defer c.muReader.Unlock() c.readers[r] = struct{}{} } -func (c *Cache) RemReader(r *reader.Reader) { +func (c *Cache) RemReader(r torrent.Reader) { c.muReader.Lock() defer c.muReader.Unlock() delete(c.readers, r) diff --git a/src/server/torr/torrent.go b/src/server/torr/torrent.go index d19dfc0..8d78c09 100644 --- a/src/server/torr/torrent.go +++ b/src/server/torr/torrent.go @@ -10,12 +10,10 @@ import ( "server/torr/utils" utils2 "server/utils" - "server/torr/reader" "server/torr/storage/torrstor" "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" - "github.com/labstack/gommon/bytes" ) type TorrentStatus int @@ -227,15 +225,15 @@ func (t *Torrent) Length() int64 { 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 { return nil } - reader := reader.NewReader(t, file, readahead) + reader := NewReader(t, file, readahead) return reader } -func (t *Torrent) CloseReader(reader *reader.Reader) { +func (t *Torrent) CloseReader(reader *Reader) { reader.Close() t.cache.RemReader(reader) 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 { t.expiredTime = time.Now().Add(time.Minute * 5) 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 { return } diff --git a/src/server/utils/strings.go b/src/server/utils/strings.go index 929ef40..0660520 100644 --- a/src/server/utils/strings.go +++ b/src/server/utils/strings.go @@ -2,20 +2,9 @@ package utils import ( "fmt" - "regexp" "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 ( _ = 1.0 << (10 * iota) // ignore first value by assigning to blank identifier KB diff --git a/src/server/web/server.go b/src/server/web/server.go new file mode 100644 index 0000000..cfe610f --- /dev/null +++ b/src/server/web/server.go @@ -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 +}