snapshot of https://github.com/pion/webrtc.git (main, 2026-09-15; blobs > 131072B omitted)
Some checks failed
REUSE Compliance Check / lint (push) Failing after 0s
Browser E2E / Test (push) Failing after 3s
Test / test (1.24) (push) Failing after 0s
Test / test-i386 (1.25) (push) Failing after 0s
Test / test-i386 (1.24) (push) Failing after 0s
Test / test-windows (1.25) (push) Failing after 0s
Test / test-windows (1.24) (push) Failing after 0s
Test / test (1.25) (push) Failing after 0s
Examples Tests / Test (push) Failing after 3s
Test / test-macos (1.25) (push) Failing after 0s
Test / test-macos (1.24) (push) Failing after 0s
Go mod tidy / tidy (push) Failing after 0s
Test / test-wasm (push) Failing after 0s
CodeQL / analyze (push) Failing after 1s
Fuzz / fuzz (push) Failing after 0s
Some checks failed
REUSE Compliance Check / lint (push) Failing after 0s
Browser E2E / Test (push) Failing after 3s
Test / test (1.24) (push) Failing after 0s
Test / test-i386 (1.25) (push) Failing after 0s
Test / test-i386 (1.24) (push) Failing after 0s
Test / test-windows (1.25) (push) Failing after 0s
Test / test-windows (1.24) (push) Failing after 0s
Test / test (1.25) (push) Failing after 0s
Examples Tests / Test (push) Failing after 3s
Test / test-macos (1.25) (push) Failing after 0s
Test / test-macos (1.24) (push) Failing after 0s
Go mod tidy / tidy (push) Failing after 0s
Test / test-wasm (push) Failing after 0s
CodeQL / analyze (push) Failing after 1s
Fuzz / fuzz (push) Failing after 0s
This commit is contained in:
75
datachannel_js_detach.go
Normal file
75
datachannel_js_detach.go
Normal file
@@ -0,0 +1,75 @@
|
||||
// SPDX-FileCopyrightText: 2026 The Pion community <https://pion.ly>
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package webrtc
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
type detachedDataChannel struct {
|
||||
dc *DataChannel
|
||||
|
||||
read chan DataChannelMessage
|
||||
done chan struct{}
|
||||
}
|
||||
|
||||
func newDetachedDataChannel(dc *DataChannel) *detachedDataChannel {
|
||||
read := make(chan DataChannelMessage)
|
||||
done := make(chan struct{})
|
||||
|
||||
// Wire up callbacks
|
||||
dc.OnMessage(func(msg DataChannelMessage) {
|
||||
read <- msg // pion/webrtc/projects/15
|
||||
})
|
||||
|
||||
// pion/webrtc/projects/15
|
||||
|
||||
return &detachedDataChannel{
|
||||
dc: dc,
|
||||
read: read,
|
||||
done: done,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *detachedDataChannel) Read(p []byte) (int, error) {
|
||||
n, _, err := c.ReadDataChannel(p)
|
||||
return n, err
|
||||
}
|
||||
|
||||
func (c *detachedDataChannel) ReadDataChannel(p []byte) (int, bool, error) {
|
||||
select {
|
||||
case <-c.done:
|
||||
return 0, false, errors.New("Reader closed")
|
||||
case msg := <-c.read:
|
||||
n := copy(p, msg.Data)
|
||||
if n < len(msg.Data) {
|
||||
return n, msg.IsString, errors.New("Read buffer to small")
|
||||
}
|
||||
return n, msg.IsString, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (c *detachedDataChannel) Write(p []byte) (n int, err error) {
|
||||
return c.WriteDataChannel(p, false)
|
||||
}
|
||||
|
||||
func (c *detachedDataChannel) WriteDataChannel(p []byte, isString bool) (n int, err error) {
|
||||
if isString {
|
||||
err = c.dc.SendText(string(p))
|
||||
return len(p), err
|
||||
}
|
||||
|
||||
err = c.dc.Send(p)
|
||||
|
||||
return len(p), err
|
||||
}
|
||||
|
||||
func (c *detachedDataChannel) Close() error {
|
||||
close(c.done)
|
||||
|
||||
return c.dc.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user