github.com/pion/webrtc/v4@v4.0.1/gathering_complete_promise.go (about) 1 // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly> 2 // SPDX-License-Identifier: MIT 3 4 package webrtc 5 6 import ( 7 "context" 8 ) 9 10 // GatheringCompletePromise is a Pion specific helper function that returns a channel that is closed when gathering is complete. 11 // This function may be helpful in cases where you are unable to trickle your ICE Candidates. 12 // 13 // It is better to not use this function, and instead trickle candidates. If you use this function you will see longer connection startup times. 14 // When the call is connected you will see no impact however. 15 func GatheringCompletePromise(pc *PeerConnection) (gatherComplete <-chan struct{}) { 16 gatheringComplete, done := context.WithCancel(context.Background()) 17 18 // It's possible to miss the GatherComplete event since setGatherCompleteHandler is an atomic operation and the 19 // promise might have been created after the gathering is finished. Therefore, we need to check if the ICE gathering 20 // state has changed to complete so that we don't block the caller forever. 21 pc.setGatherCompleteHandler(func() { done() }) 22 if pc.ICEGatheringState() == ICEGatheringStateComplete { 23 done() 24 } 25 26 return gatheringComplete.Done() 27 }