Server implementation. ()

* Server implementation.

- Share the content of a folder as a magnet file.
- Web interface with all data needed for sharing data.
- New configuration to add several servers
- Every time the content of the server folder is changed, the magnet
file will be generated again.

Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>

* Update dependencies

Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>

* Use boltdb piece completion storage.

Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
This commit is contained in:
Antonio Navarro Perez 2021-11-21 05:03:18 -08:00 committed by GitHub
parent 5d4e48f0f9
commit ddda39b22a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 541 additions and 67 deletions
cmd/distribyted

View file

@ -121,6 +121,25 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
return fmt.Errorf("error starting torrent client: %w", err)
}
pcp := filepath.Join(conf.Torrent.MetadataFolder, "piece-completion")
if err := os.MkdirAll(pcp, 0744); err != nil {
return fmt.Errorf("error creating piece completion folder: %w", err)
}
pc, err := storage.NewBoltPieceCompletion(pcp)
if err != nil {
return fmt.Errorf("error creating servers piece completion: %w", err)
}
var servers []*torrent.Server
for _, s := range conf.Servers {
server := torrent.NewServer(c, pc, s)
servers = append(servers, server)
if err := server.Start(); err != nil {
return fmt.Errorf("error starting server: %w", err)
}
}
cl := loader.NewConfig(conf.Routes)
ss := torrent.NewStats()
@ -139,6 +158,12 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
go func() {
<-sigChan
log.Info().Msg("closing servers...")
for _, s := range servers {
if err := s.Close(); err != nil {
log.Warn().Err(err).Msg("problem closing server")
}
}
log.Info().Msg("closing items database...")
fis.Close()
log.Info().Msg("closing magnet database...")
@ -189,7 +214,7 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
logFilename := filepath.Join(conf.Log.Path, dlog.FileName)
err = http.New(fc, ss, ts, ch, port, logFilename)
err = http.New(fc, ss, ts, ch, servers, port, logFilename)
log.Error().Err(err).Msg("error initializing HTTP server")
return err
}