mirror of
https://github.com/nlepage/go-wasm-http-server.git
synced 2025-03-11 01:29:11 +00:00
fix: listen for ReadableStream cancellation
This commit is contained in:
parent
c561826125
commit
2d786bdb14
@ -12,6 +12,7 @@ type Writer struct {
|
|||||||
Value safejs.Value
|
Value safejs.Value
|
||||||
controller safejs.Value
|
controller safejs.Value
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
|
cancelled bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ io.WriteCloser = (*Writer)(nil)
|
var _ io.WriteCloser = (*Writer)(nil)
|
||||||
@ -54,14 +55,25 @@ func NewWriter() (*Writer, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Writer{
|
rs := &Writer{
|
||||||
Value: value,
|
Value: value,
|
||||||
controller: controller,
|
controller: controller,
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
}, nil
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
<-ctx.Done()
|
||||||
|
rs.cancelled = true
|
||||||
|
}()
|
||||||
|
|
||||||
|
return rs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *Writer) Write(b []byte) (int, error) {
|
func (rs *Writer) Write(b []byte) (int, error) {
|
||||||
|
if rs.cancelled {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
chunk, err := jstype.Uint8Array.New(len(b)) // FIXME reuse same Uint8Array?
|
chunk, err := jstype.Uint8Array.New(len(b)) // FIXME reuse same Uint8Array?
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@ -78,6 +90,10 @@ func (rs *Writer) Write(b []byte) (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rs *Writer) Close() error {
|
func (rs *Writer) Close() error {
|
||||||
|
if rs.cancelled {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
_, err := rs.controller.Call("close")
|
_, err := rs.controller.Call("close")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user