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

Method setupWebrtcConnection

overlay/receive.go:454–574  ·  view source on GitHub ↗
(src key.NodePublic, res *overlayMessage, offer webrtc.SessionDescription)

Source from the content-addressed store, hash-verified

452}
453
454func (r *Receive) setupWebrtcConnection(src key.NodePublic, res *overlayMessage, offer webrtc.SessionDescription) {
455 // Configure larger buffer sizes
456 settingEngine := webrtc.SettingEngine{}
457 // Set maximum message size to 16MB
458 settingEngine.SetSCTPMaxReceiveBufferSize(64 * 1024 * 1024)
459
460 api := webrtc.NewAPI(webrtc.WithSettingEngine(settingEngine))
461
462 // Use the custom API to create the peer connection
463 peerConnection, err := api.NewPeerConnection(getWebRTCConfig())
464 if err != nil {
465 panic(err)
466 }
467
468 peerConnection.OnConnectionStateChange(func(s webrtc.PeerConnectionState) {
469 switch s {
470 case webrtc.PeerConnectionStateConnected:
471 case webrtc.PeerConnectionStateDisconnected:
472 case webrtc.PeerConnectionStateFailed:
473 case webrtc.PeerConnectionStateClosed:
474 }
475 })
476
477 peerConnection.OnDataChannel(func(d *webrtc.DataChannel) {
478 // Increase buffer sizes
479 d.SetBufferedAmountLowThreshold(65535)
480
481 var (
482 fi *os.File
483 bar *progressbar.ProgressBar
484 mw io.Writer
485 fiSize int
486 read int
487 )
488
489 d.OnMessage(func(msg webrtc.DataChannelMessage) {
490 if msg.IsString {
491 meta := RtcMetadata{}
492
493 err := json.Unmarshal(msg.Data, &meta)
494 if err != nil {
495 fmt.Println("failed to unmarshal file metadata:")
496 d.Close()
497 return
498 }
499
500 if meta.Type == RtcMetadataTypeFileMetadata {
501 fiSize = meta.FileMetadata.FileSize
502 fi, err = os.OpenFile(meta.FileMetadata.FileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0644)
503 if err != nil {
504 fmt.Println("failed to open file", err)
505 }
506
507 bar = progressbar.DefaultBytes(
508 int64(fiSize),
509 fmt.Sprintf("Downloading %q", meta.FileMetadata.FileName),
510 )
511 mw = io.MultiWriter(fi, bar)

Callers 1

handleNextMessageMethod · 0.95

Calls 3

getWebRTCConfigFunction · 0.85
CloseMethod · 0.45
WriteMethod · 0.45

Tested by

no test coverage detected