croc/pkg/session/receiver/init.go

91 lines
2.0 KiB
Go

package receiver
import (
"fmt"
"github.com/pion/webrtc/v2"
log "github.com/sirupsen/logrus"
)
// // Initialize creates the connection, the datachannel and creates the offer
// func (s *Session) Initialize() error {
// if s.initialized {
// return nil
// }
// if err := s.sess.CreateConnection(s.onConnectionStateChange()); err != nil {
// log.Errorln(err)
// return err
// }
// s.createDataHandler()
// if err := s.sess.ReadSDP(); err != nil {
// log.Errorln(err)
// return err
// }
// if err := s.sess.CreateAnswer(); err != nil {
// log.Errorln(err)
// return err
// }
// s.initialized = true
// return nil
// }
// // Start initializes the connection and the file transfer
// func (s *Session) Start() error {
// if err := s.Initialize(); err != nil {
// return err
// }
// // Handle data
// s.receiveData()
// s.sess.OnCompletion()
// return nil
// }
func (s *Session) CreateDataHandler() {
s.sess.OnDataChannel(func(d *webrtc.DataChannel) {
log.Debugf("New DataChannel %s %d\n", d.Label(), d.ID())
s.sess.NetworkStats.Start()
d.OnMessage(s.onMessage())
d.OnClose(s.onClose())
})
}
func (s *Session) receiveData() {
log.Infoln("Starting to receive data...")
defer log.Infoln("Stopped receiving data...")
// Consume the message channel, until done
// Does not stop on error
for {
select {
case <-s.sess.Done:
s.sess.NetworkStats.Stop()
fmt.Printf("\nNetwork: %s\n", s.sess.NetworkStats.String())
return
case msg := <-s.msgChannel:
n, err := s.stream.Write(msg.Data)
if err != nil {
log.Errorln(err)
} else {
currentSpeed := s.sess.NetworkStats.Bandwidth()
fmt.Printf("Transferring at %.2f MB/s\r", currentSpeed)
s.sess.NetworkStats.AddBytes(uint64(n))
}
}
}
}
func (s *Session) CreateConnection() (err error) {
return s.sess.CreateConnection(s.onConnectionStateChange())
}
func (s *Session) SetSDP(sdp string) error {
return s.sess.SetSDP(sdp)
}
func (s *Session) CreateAnswer() (string, error) {
return s.sess.CreateAnswer()
}