@@ -113,8 +113,9 @@ var (
113113// -------------------------------------------
114114
115115const (
116- reliableDataChannelName = "_reliable"
117- lossyDataChannelName = "_lossy"
116+ signallingDataChannelName = "_signalling"
117+ reliableDataChannelName = "_reliable"
118+ lossyDataChannelName = "_lossy"
118119
119120 maxReconnectCount = 10
120121 initialReconnectInterval = 300 * time .Millisecond
@@ -124,6 +125,8 @@ const (
124125type RTCEngine struct {
125126 log protoLogger.Logger
126127
128+ signallingVersion signalling.SignallingVersion
129+
127130 engineHandler engineHandler
128131 cbGetLocalParticipantSID func () string
129132
@@ -136,6 +139,7 @@ type RTCEngine struct {
136139 signalTransport signalling.SignalTransport
137140
138141 dclock sync.RWMutex
142+ signallingDC * webrtc.DataChannel
139143 reliableDC * webrtc.DataChannel
140144 lossyDC * webrtc.DataChannel
141145 reliableDCSub * webrtc.DataChannel
@@ -163,32 +167,39 @@ type RTCEngine struct {
163167 onCloseLock sync.Mutex
164168}
165169
166- func NewRTCEngine (engineHandler engineHandler , getLocalParticipantSID func () string ) * RTCEngine {
170+ func NewRTCEngine (
171+ signallingVersion signalling.SignallingVersion ,
172+ engineHandler engineHandler ,
173+ getLocalParticipantSID func () string ,
174+ ) * RTCEngine {
167175 e := & RTCEngine {
168176 log : logger ,
177+ signallingVersion : signallingVersion ,
169178 engineHandler : engineHandler ,
170179 cbGetLocalParticipantSID : getLocalParticipantSID ,
171180 trackPublishedListeners : make (map [string ]chan * livekit.TrackPublishedResponse ),
172181 joinTimeout : 15 * time .Second ,
173182 reliableMsgSeq : 1 ,
174183 }
175- // SIGNALLING-V2-TODO: have to instantiate objects based on signal version & transport
176- e .signalling = signalling .NewSignalling (signalling.SignallingParams {
177- Logger : e .log ,
178- })
179- e .signalHandler = signalling .NewSignalHandler (signalling.SignalHandlerParams {
180- Logger : e .log ,
181- Processor : e ,
182- })
183- e .signalTransport = signalling .NewSignalTransportWebSocket (signalling.SignalTransportWebSocketParams {
184- Logger : e .log ,
185- Version : Version ,
186- Protocol : PROTOCOL ,
187- Signalling : e .signalling ,
188- SignalTransportHandler : e ,
189- SignalHandler : e .signalHandler ,
190- })
191- /*
184+ switch signallingVersion {
185+ case signalling .SignallingVersionV1 :
186+ e .signalling = signalling .NewSignalling (signalling.SignallingParams {
187+ Logger : e .log ,
188+ })
189+ e .signalHandler = signalling .NewSignalHandler (signalling.SignalHandlerParams {
190+ Logger : e .log ,
191+ Processor : e ,
192+ })
193+ e .signalTransport = signalling .NewSignalTransportWebSocket (signalling.SignalTransportWebSocketParams {
194+ Logger : e .log ,
195+ Version : Version ,
196+ Protocol : PROTOCOL ,
197+ Signalling : e .signalling ,
198+ SignalTransportHandler : e ,
199+ SignalHandler : e .signalHandler ,
200+ })
201+
202+ case signalling .SignallingVersionV2 :
192203 e .signalling = signalling .NewSignallingv2 (signalling.Signallingv2Params {
193204 Logger : e .log ,
194205 })
@@ -204,7 +215,10 @@ func NewRTCEngine(engineHandler engineHandler, getLocalParticipantSID func() str
204215 Signalling : e .signalling ,
205216 SignalHandler : e .signalHandler ,
206217 })
207- */
218+
219+ default :
220+ return nil
221+ }
208222
209223 e .onClose = []func (){}
210224 return e
@@ -319,8 +333,8 @@ func (e *RTCEngine) setRTT(rtt uint32) {
319333func (e * RTCEngine ) configure (
320334 iceServers []* livekit.ICEServer ,
321335 clientConfig * livekit.ClientConfiguration ,
322- subscriberPrimary * bool ) error {
323-
336+ subscriberPrimary * bool ,
337+ ) error {
324338 configuration := e .makeRTCConfiguration (iceServers , clientConfig )
325339
326340 // reset reliable message sequence
@@ -468,6 +482,7 @@ func (e *RTCEngine) configure(
468482 return err
469483 }
470484 e .lossyDC .OnMessage (e .handleDataPacket )
485+
471486 e .reliableDC , err = e .publisher .PeerConnection ().CreateDataChannel (reliableDataChannelName , & webrtc.DataChannelInit {
472487 Ordered : & trueVal ,
473488 })
@@ -476,6 +491,30 @@ func (e *RTCEngine) configure(
476491 return err
477492 }
478493 e .reliableDC .OnMessage (e .handleDataPacket )
494+
495+ // SIGNALLING-V2-TODO: instantiating this rely on signal transport strategy rather than signalling version
496+ // SIGNALLING-V2-TODO: for signalling v2 instantiate publisher PC before connect and then do just SetConfiguration in OnConnectResponse
497+ if e .signallingVersion == signalling .SignallingVersionV2 {
498+ e .signallingDC , err = e .publisher .PeerConnection ().CreateDataChannel (signallingDataChannelName , & webrtc.DataChannelInit {
499+ Ordered : & trueVal ,
500+ })
501+ if err != nil {
502+ e .dclock .Unlock ()
503+ return err
504+ }
505+ e .signallingDC .OnOpen (func () {
506+ signallingTransportDataChannel := signalling .NewSignalTransportDataChannel (signalling.SignalTransportDataChannelParams {
507+ Logger : e .log ,
508+ DataChannel : e .signallingDC ,
509+ SignalHandler : e .signalHandler ,
510+ })
511+ e .signalTransport .SetAsyncTransport (signallingTransportDataChannel )
512+ })
513+ e .signallingDC .OnClose (func () {
514+ // SIGNALLING-V2-TODO: should call SignalTransportHandler.OnClose
515+ })
516+ e .signallingDC .OnMessage (e .handleSignalling )
517+ }
479518 e .dclock .Unlock ()
480519
481520 return nil
@@ -640,6 +679,10 @@ func (e *RTCEngine) readDataPacket(msg webrtc.DataChannelMessage) (*livekit.Data
640679 return dataPacket , err
641680}
642681
682+ func (e * RTCEngine ) handleSignalling (msg webrtc.DataChannelMessage ) {
683+ e .signalHandler .HandleEncodedMessage (msg .Data )
684+ }
685+
643686func (e * RTCEngine ) handleDisconnect (fullReconnect bool ) {
644687 // do not retry until fully connected
645688 if e .closed .Load () || ! e .hasConnected .Load () {
0 commit comments