Stop using OnIceComplete in server-webrtc

Similar to c28c8ca for proxy-goc
This commit is contained in:
Arlo Breault 2019-05-14 16:36:27 -04:00
parent 2e4383434f
commit d7676d2b9e

View file

@ -113,9 +113,6 @@ func datachannelHandler(conn *webRTCConn) {
// Installs an OnDataChannel callback that creates a webRTCConn and passes it to // Installs an OnDataChannel callback that creates a webRTCConn and passes it to
// datachannelHandler. // datachannelHandler.
func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.Configuration) (*webrtc.PeerConnection, error) { func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.Configuration) (*webrtc.PeerConnection, error) {
errChan := make(chan error)
answerChan := make(chan struct{})
pc, err := webrtc.NewPeerConnection(config) pc, err := webrtc.NewPeerConnection(config)
if err != nil { if err != nil {
return nil, fmt.Errorf("accept: NewPeerConnection: %s", err) return nil, fmt.Errorf("accept: NewPeerConnection: %s", err)
@ -123,9 +120,6 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
pc.OnNegotiationNeeded = func() { pc.OnNegotiationNeeded = func() {
panic("OnNegotiationNeeded") panic("OnNegotiationNeeded")
} }
pc.OnIceComplete = func() {
answerChan <- struct{}{}
}
pc.OnDataChannel = func(dc *webrtc.DataChannel) { pc.OnDataChannel = func(dc *webrtc.DataChannel) {
log.Println("OnDataChannel") log.Println("OnDataChannel")
@ -164,30 +158,22 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
} }
log.Println("sdp offer successfully received.") log.Println("sdp offer successfully received.")
go func() {
log.Println("Generating answer...") log.Println("Generating answer...")
answer, err := pc.CreateAnswer() // blocking answer, err := pc.CreateAnswer()
if err != nil { if err != nil {
errChan <- err
return
}
err = pc.SetLocalDescription(answer)
if err != nil {
errChan <- err
return
}
}()
// Wait until answer is ready.
select {
case err = <-errChan:
pc.Destroy() pc.Destroy()
return nil, err return nil, err
case _, ok := <-answerChan: }
if !ok {
if answer == nil {
pc.Destroy() pc.Destroy()
return nil, fmt.Errorf("Failed gathering ICE candidates.") return nil, fmt.Errorf("Failed gathering ICE candidates.")
} }
err = pc.SetLocalDescription(answer)
if err != nil {
pc.Destroy()
return nil, err
} }
return pc, nil return pc, nil