mirror of https://github.com/schollz/croc.git
progressbar is not accurate in total
This commit is contained in:
parent
c1c8e39499
commit
42d35898b5
|
@ -13,6 +13,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/schollz/croc/v6/src/croc"
|
"github.com/schollz/croc/v6/src/croc"
|
||||||
|
"github.com/schollz/croc/v6/src/tcp"
|
||||||
"github.com/schollz/croc/v6/src/utils"
|
"github.com/schollz/croc/v6/src/utils"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
@ -47,12 +48,21 @@ func Run() (err error) {
|
||||||
return send(c)
|
return send(c)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "relay",
|
||||||
|
Description: "start relay",
|
||||||
|
HelpName: "croc relay",
|
||||||
|
Action: func(c *cli.Context) error {
|
||||||
|
return relay(c)
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
app.Flags = []cli.Flag{
|
app.Flags = []cli.Flag{
|
||||||
cli.BoolFlag{Name: "debug", Usage: "increase verbosity (a lot)"},
|
cli.BoolFlag{Name: "debug", Usage: "increase verbosity (a lot)"},
|
||||||
cli.BoolFlag{Name: "yes", Usage: "automatically agree to all prompts"},
|
cli.BoolFlag{Name: "yes", Usage: "automatically agree to all prompts"},
|
||||||
cli.BoolFlag{Name: "stdout", Usage: "redirect file to stdout"},
|
cli.BoolFlag{Name: "stdout", Usage: "redirect file to stdout"},
|
||||||
cli.StringFlag{Name: "relay", Value: "198.199.67.130:6372", Usage: "address of the relay"},
|
cli.StringFlag{Name: "relay", Value: "198.199.67.130", Usage: "address of the relay"},
|
||||||
|
cli.StringFlag{Name: "ports", Value: "9009,9010,9011,9012,9013,9014,9015,9016,9017,9018", Usage: "address of the relay"},
|
||||||
cli.StringFlag{Name: "out", Value: ".", Usage: "specify an output folder to receive the file"},
|
cli.StringFlag{Name: "out", Value: ".", Usage: "specify an output folder to receive the file"},
|
||||||
}
|
}
|
||||||
app.EnableBashCompletion = true
|
app.EnableBashCompletion = true
|
||||||
|
@ -153,6 +163,7 @@ func send(c *cli.Context) (err error) {
|
||||||
Debug: c.GlobalBool("debug"),
|
Debug: c.GlobalBool("debug"),
|
||||||
NoPrompt: c.GlobalBool("yes"),
|
NoPrompt: c.GlobalBool("yes"),
|
||||||
RelayAddress: c.GlobalString("relay"),
|
RelayAddress: c.GlobalString("relay"),
|
||||||
|
RelayPorts: strings.Split(c.GlobalString("ports"), ","),
|
||||||
Stdout: c.GlobalBool("stdout"),
|
Stdout: c.GlobalBool("stdout"),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -189,6 +200,7 @@ func receive(c *cli.Context) (err error) {
|
||||||
NoPrompt: c.GlobalBool("yes"),
|
NoPrompt: c.GlobalBool("yes"),
|
||||||
RelayAddress: c.GlobalString("relay"),
|
RelayAddress: c.GlobalString("relay"),
|
||||||
Stdout: c.GlobalBool("stdout"),
|
Stdout: c.GlobalBool("stdout"),
|
||||||
|
RelayPorts: strings.Split(c.GlobalString("ports"), ","),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -197,9 +209,25 @@ func receive(c *cli.Context) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// func relay(c *cli.Context) error {
|
func relay(c *cli.Context) (err error) {
|
||||||
// return cr.Relay()
|
debugString := "warn"
|
||||||
// }
|
if c.GlobalBool("debug") {
|
||||||
|
debugString = "debug"
|
||||||
|
}
|
||||||
|
ports := strings.Split(c.GlobalString("ports"), ",")
|
||||||
|
for i, port := range ports {
|
||||||
|
if i == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
go func(portStr string) {
|
||||||
|
err = tcp.Run(debugString, portStr)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}(port)
|
||||||
|
}
|
||||||
|
return tcp.Run(debugString, ports[0])
|
||||||
|
}
|
||||||
|
|
||||||
// func dirSize(path string) (int64, error) {
|
// func dirSize(path string) (int64, error) {
|
||||||
// var size int64
|
// var size int64
|
||||||
|
|
|
@ -71,6 +71,7 @@ type Client struct {
|
||||||
// send / receive information of current file
|
// send / receive information of current file
|
||||||
CurrentFile *os.File
|
CurrentFile *os.File
|
||||||
CurrentFileChunks []int64
|
CurrentFileChunks []int64
|
||||||
|
TotalSent int64
|
||||||
|
|
||||||
// tcp connections
|
// tcp connections
|
||||||
conn []*comm.Comm
|
conn []*comm.Comm
|
||||||
|
@ -493,6 +494,7 @@ func (c *Client) updateState() (err error) {
|
||||||
progressbar.OptionSetWriter(os.Stderr),
|
progressbar.OptionSetWriter(os.Stderr),
|
||||||
progressbar.OptionThrottle(100*time.Millisecond),
|
progressbar.OptionThrottle(100*time.Millisecond),
|
||||||
)
|
)
|
||||||
|
c.TotalSent = 0
|
||||||
|
|
||||||
// recipient requests the file and chunks (if empty, then should receive all chunks)
|
// recipient requests the file and chunks (if empty, then should receive all chunks)
|
||||||
bRequest, _ := json.Marshal(RemoteFileRequest{
|
bRequest, _ := json.Marshal(RemoteFileRequest{
|
||||||
|
@ -524,6 +526,7 @@ func (c *Client) updateState() (err error) {
|
||||||
progressbar.OptionSetWriter(os.Stderr),
|
progressbar.OptionSetWriter(os.Stderr),
|
||||||
progressbar.OptionThrottle(100*time.Millisecond),
|
progressbar.OptionThrottle(100*time.Millisecond),
|
||||||
)
|
)
|
||||||
|
c.TotalSent = 0
|
||||||
for i := 1; i < len(c.Options.RelayPorts); i++ {
|
for i := 1; i < len(c.Options.RelayPorts); i++ {
|
||||||
go c.sendData(i)
|
go c.sendData(i)
|
||||||
}
|
}
|
||||||
|
@ -532,7 +535,6 @@ func (c *Client) updateState() (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) receiveData(i int) {
|
func (c *Client) receiveData(i int) {
|
||||||
|
|
||||||
for {
|
for {
|
||||||
data, err := c.conn[i].Receive()
|
data, err := c.conn[i].Receive()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -554,13 +556,15 @@ func (c *Client) receiveData(i int) {
|
||||||
positionInt64 := int64(position)
|
positionInt64 := int64(position)
|
||||||
|
|
||||||
c.mutex.Lock()
|
c.mutex.Lock()
|
||||||
n, err := c.CurrentFile.WriteAt(data[8:], positionInt64)
|
_, err = c.CurrentFile.WriteAt(data[8:], positionInt64)
|
||||||
c.mutex.Unlock()
|
c.mutex.Unlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
c.bar.Add(n)
|
c.bar.Add(len(data[8:]))
|
||||||
if c.bar.State().CurrentBytes == float64(c.FilesToTransfer[c.FilesToTransferCurrentNum].Size) {
|
c.TotalSent += int64(len(data[8:]))
|
||||||
|
log.Debugf("state: %+v", c.bar.State())
|
||||||
|
if c.TotalSent == c.FilesToTransfer[c.FilesToTransferCurrentNum].Size {
|
||||||
log.Debug("finished receiving!")
|
log.Debug("finished receiving!")
|
||||||
c.CurrentFile.Close()
|
c.CurrentFile.Close()
|
||||||
log.Debug("sending close-sender")
|
log.Debug("sending close-sender")
|
||||||
|
@ -577,6 +581,9 @@ func (c *Client) receiveData(i int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) sendData(i int) {
|
func (c *Client) sendData(i int) {
|
||||||
|
defer func() {
|
||||||
|
log.Debugf("finished with %d", i)
|
||||||
|
}()
|
||||||
pathToFile := path.Join(
|
pathToFile := path.Join(
|
||||||
c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderSource,
|
c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderSource,
|
||||||
c.FilesToTransfer[c.FilesToTransferCurrentNum].Name,
|
c.FilesToTransfer[c.FilesToTransferCurrentNum].Name,
|
||||||
|
@ -592,7 +599,7 @@ func (c *Client) sendData(i int) {
|
||||||
curi := float64(0)
|
curi := float64(0)
|
||||||
for {
|
for {
|
||||||
// Read file
|
// Read file
|
||||||
data := make([]byte, 1000)
|
data := make([]byte, 40000)
|
||||||
n, err := f.Read(data)
|
n, err := f.Read(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
|
@ -619,6 +626,9 @@ func (c *Client) sendData(i int) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
c.bar.Add(n)
|
c.bar.Add(n)
|
||||||
|
c.TotalSent += int64(n)
|
||||||
|
log.Debug(c.TotalSent)
|
||||||
|
// time.Sleep(10 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
curi++
|
curi++
|
||||||
|
|
|
@ -34,14 +34,14 @@ type roomMap struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run starts a tcp listener, run async
|
// Run starts a tcp listener, run async
|
||||||
func Run(debugLevel, port string) {
|
func Run(debugLevel, port string) (err error) {
|
||||||
s := new(server)
|
s := new(server)
|
||||||
s.port = port
|
s.port = port
|
||||||
s.debugLevel = debugLevel
|
s.debugLevel = debugLevel
|
||||||
s.start()
|
return s.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *server) start() {
|
func (s *server) start() (err error) {
|
||||||
logger.SetLogLevel(s.debugLevel)
|
logger.SetLogLevel(s.debugLevel)
|
||||||
s.rooms.Lock()
|
s.rooms.Lock()
|
||||||
s.rooms.rooms = make(map[string]roomInfo)
|
s.rooms.rooms = make(map[string]roomInfo)
|
||||||
|
@ -61,10 +61,11 @@ func (s *server) start() {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
err := s.run()
|
err = s.run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *server) run() (err error) {
|
func (s *server) run() (err error) {
|
||||||
|
|
Loading…
Reference in New Issue