MCPcopy Create free account
hub / github.com/coder/wush / setupWebrtcConnection

Method setupWebrtcConnection

overlay/send.go:313–368  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

311}
312
313func (s *Send) setupWebrtcConnection() {
314 var err error
315 s.RtcConn, err = webrtc.NewPeerConnection(getWebRTCConfig())
316 if err != nil {
317 panic("failed to create webrtc connection: " + err.Error())
318 }
319
320 s.RtcConn.OnICECandidate(func(i *webrtc.ICECandidate) {
321 if i == nil {
322 return
323 }
324 ic := i.ToJSON()
325
326 <-s.waitIce
327 s.out <- &overlayMessage{
328 Typ: messageTypeWebRTCCandidate,
329 WebrtcCandidate: &ic,
330 }
331 })
332
333 s.RtcDc, err = s.RtcConn.CreateDataChannel("fileTransfer", nil)
334 if err != nil {
335 fmt.Println("failed to create dc:", err)
336 }
337
338 // Add message handler to our created data channel
339 s.RtcDc.OnMessage(func(msg webrtc.DataChannelMessage) {
340 if msg.IsString {
341 meta := RtcMetadata{}
342
343 err := json.Unmarshal(msg.Data, &meta)
344 if err != nil {
345 fmt.Println("failed to unmarshal metadata:", err)
346 return
347 }
348
349 if meta.Type == RtcMetadataTypeFileAck {
350 close(s.WaitTransferDone)
351 return
352 }
353 return
354 }
355 })
356
357 answer, err := s.RtcConn.CreateOffer(nil)
358 if err != nil {
359 fmt.Println("failed to create answer:", err)
360 }
361
362 err = s.RtcConn.SetLocalDescription(answer)
363 if err != nil {
364 fmt.Println("failed to set local description:", err)
365 }
366
367 s.offer = answer
368}

Callers 1

NewSendOverlayFunction · 0.95

Calls 1

getWebRTCConfigFunction · 0.85

Tested by

no test coverage detected