WASM: use persistent writer, fix connection lost from lock churn

This commit is contained in:
realrasengan
2026-03-30 16:19:17 -07:00
parent 30eb6a82a5
commit 37159d31bd
+5 -3
View File
@@ -12,6 +12,7 @@ import (
// wtConn wraps a browser WebTransport connection as a mosh.Conn.
type wtConn struct {
transport js.Value
writer js.Value // persistent writable stream writer
incoming chan []byte
done chan struct{}
once sync.Once
@@ -56,8 +57,11 @@ func dialWebTransport(url string) (*wtConn, error) {
onReady.Release()
onFail.Release()
writer := wt.Get("datagrams").Get("writable").Call("getWriter")
c := &wtConn{
transport: wt,
writer: writer,
incoming: make(chan []byte, 256),
done: make(chan struct{}),
}
@@ -132,11 +136,9 @@ func (c *wtConn) Read(b []byte) (int, error) {
}
func (c *wtConn) Write(b []byte) (int, error) {
writer := c.transport.Get("datagrams").Get("writable").Call("getWriter")
arr := js.Global().Get("Uint8Array").New(len(b))
js.CopyBytesToJS(arr, b)
writer.Call("write", arr)
writer.Call("releaseLock")
c.writer.Call("write", arr)
return len(b), nil
}