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/
/src/crawshaw.io/
/src/go.etcd.io/
/src/google.golang.org/

View File

@@ -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

View File

@@ -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)

View File

@@ -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")

View File

@@ -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()
}

View File

@@ -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
}

View File

@@ -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()

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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

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
}