mirror of
https://github.com/nlepage/go-wasm-http-server.git
synced 2025-03-10 17:29:10 +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
|
||||
controller safejs.Value
|
||||
ctx context.Context
|
||||
cancelled bool
|
||||
}
|
||||
|
||||
var _ io.WriteCloser = (*Writer)(nil)
|
||||
@ -54,14 +55,25 @@ func NewWriter() (*Writer, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Writer{
|
||||
rs := &Writer{
|
||||
Value: value,
|
||||
controller: controller,
|
||||
ctx: ctx,
|
||||
}, nil
|
||||
}
|
||||
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
rs.cancelled = true
|
||||
}()
|
||||
|
||||
return rs, nil
|
||||
}
|
||||
|
||||
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?
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@ -78,6 +90,10 @@ func (rs *Writer) Write(b []byte) (int, error) {
|
||||
}
|
||||
|
||||
func (rs *Writer) Close() error {
|
||||
if rs.cancelled {
|
||||
return nil
|
||||
}
|
||||
|
||||
_, err := rs.controller.Call("close")
|
||||
return err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user