0
0
Fork 0
mirror of https://github.com/schollz/croc.git synced 2025-10-11 21:30:16 +02:00

fix receiver

This commit is contained in:
Zack Scholl 2019-04-08 15:34:29 -07:00
parent 8645685173
commit b8689c8eeb
3 changed files with 24 additions and 24 deletions

View file

@ -2,6 +2,7 @@ package receiver
import ( import (
"fmt" "fmt"
"os"
"github.com/pion/webrtc/v2" "github.com/pion/webrtc/v2"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@ -51,15 +52,21 @@ func (s *Session) CreateDataHandler() {
}) })
} }
func (s *Session) ReceiveData() { func (s *Session) ReceiveData(pathToFile string) {
s.receiveData() s.receiveData(pathToFile)
s.sess.OnCompletion() s.sess.OnCompletion()
} }
func (s *Session) receiveData() { func (s *Session) receiveData(pathToFile string) error {
log.Infoln("Starting to receive data...") log.Infoln("Starting to receive data...")
defer log.Infoln("Stopped receiving data...") f, err := os.OpenFile(pathToFile, os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
return err
}
defer func() {
log.Infoln("Stopped receiving data...")
f.Close()
}()
// Consume the message channel, until done // Consume the message channel, until done
// Does not stop on error // Does not stop on error
for { for {
@ -67,12 +74,12 @@ func (s *Session) receiveData() {
case <-s.sess.Done: case <-s.sess.Done:
s.sess.NetworkStats.Stop() s.sess.NetworkStats.Stop()
fmt.Printf("\nNetwork: %s\n", s.sess.NetworkStats.String()) fmt.Printf("\nNetwork: %s\n", s.sess.NetworkStats.String())
return return nil
case msg := <-s.msgChannel: case msg := <-s.msgChannel:
n, err := s.stream.Write(msg.Data) n, err := f.Write(msg.Data)
if err != nil { if err != nil {
log.Errorln(err) return err
} else { } else {
currentSpeed := s.sess.NetworkStats.Bandwidth() currentSpeed := s.sess.NetworkStats.Bandwidth()
fmt.Printf("Transferring at %.2f MB/s\r", currentSpeed) fmt.Printf("Transferring at %.2f MB/s\r", currentSpeed)
@ -80,6 +87,7 @@ func (s *Session) receiveData() {
} }
} }
} }
return nil
} }
func (s *Session) CreateConnection() (err error) { func (s *Session) CreateConnection() (err error) {

View file

@ -3,31 +3,29 @@ package receiver
import ( import (
"io" "io"
"github.com/pion/webrtc/v2"
internalSess "github.com/schollz/croc/v5/internal/session" internalSess "github.com/schollz/croc/v5/internal/session"
"github.com/schollz/croc/v5/pkg/session/common" "github.com/schollz/croc/v5/pkg/session/common"
"github.com/pion/webrtc/v2"
) )
// Session is a receiver session // Session is a receiver session
type Session struct { type Session struct {
sess internalSess.Session sess internalSess.Session
stream io.Writer
msgChannel chan webrtc.DataChannelMessage msgChannel chan webrtc.DataChannelMessage
initialized bool initialized bool
} }
func new(s internalSess.Session, f io.Writer) *Session { func new(s internalSess.Session) *Session {
return &Session{ return &Session{
sess: s, sess: s,
stream: f,
msgChannel: make(chan webrtc.DataChannelMessage, 4096*2), msgChannel: make(chan webrtc.DataChannelMessage, 4096*2),
initialized: false, initialized: false,
} }
} }
// New creates a new receiver session // New creates a new receiver session
func New(f io.Writer) *Session { func New() *Session {
return new(internalSess.New(nil, nil), f) return new(internalSess.New(nil, nil))
} }
// Config contains custom configuration for a session // Config contains custom configuration for a session
@ -38,10 +36,5 @@ type Config struct {
// NewWith createa a new receiver Session with custom configuration // NewWith createa a new receiver Session with custom configuration
func NewWith(c Config) *Session { func NewWith(c Config) *Session {
return new(internalSess.New(c.SDPProvider, c.SDPOutput), c.Stream) return new(internalSess.New(c.SDPProvider, c.SDPOutput))
}
// SetStream changes the stream, useful for WASM integration
func (s *Session) SetStream(stream io.Writer) {
s.stream = stream
} }

View file

@ -390,7 +390,8 @@ func (c *Client) processMessage(m Message) (err error) {
Num: m.Num, Num: m.Num,
}.String()).Err() }.String()).Err()
// start receiving data // start receiving data
c.recvSess.ReceiveData() pathToFile := path.Join(c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderRemote, c.FilesToTransfer[c.FilesToTransferCurrentNum].Name)
c.recvSess.ReceiveData(pathToFile)
case "datachannel-answer": case "datachannel-answer":
c.log.Debug("got answer:", m.Message) c.log.Debug("got answer:", m.Message)
@ -533,9 +534,7 @@ func (c *Client) dataChannelReceive() (err error) {
return err return err
} }
c.recvSess = recvSess.NewWith(recvSess.Config{ c.recvSess = recvSess.NewWith(recvSess.Config{})
Stream: c.CurrentFile,
})
err = c.recvSess.CreateConnection() err = c.recvSess.CreateConnection()
if err != nil { if err != nil {