mirror of
https://github.com/nlepage/go-wasm-http-server.git
synced 2026-01-12 10:09:12 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3cf36c41e2 | ||
|
|
30a6ef67f9 | ||
|
|
669f82020d | ||
|
|
c94dcd965d | ||
|
|
2d786bdb14 |
@@ -97,7 +97,7 @@ Create a ServiceWorker file with the following code:
|
|||||||
📄 `sw.js`
|
📄 `sw.js`
|
||||||
```js
|
```js
|
||||||
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.18.4/misc/wasm/wasm_exec.js')
|
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.18.4/misc/wasm/wasm_exec.js')
|
||||||
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.3/sw.js')
|
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.5/sw.js')
|
||||||
|
|
||||||
registerWasmHTTPListener('path/to/server.wasm')
|
registerWasmHTTPListener('path/to/server.wasm')
|
||||||
```
|
```
|
||||||
|
|||||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.23.1/misc/wasm/wasm_exec.js')
|
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.23.1/misc/wasm/wasm_exec.js')
|
||||||
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.3/sw.js')
|
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.5/sw.js')
|
||||||
|
|
||||||
const wasm = 'api.wasm'
|
const wasm = 'api.wasm'
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.23.1/misc/wasm/wasm_exec.js')
|
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.23.1/misc/wasm/wasm_exec.js')
|
||||||
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.3/sw.js')
|
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.5/sw.js')
|
||||||
|
|
||||||
const wasm = 'api.wasm'
|
const wasm = 'api.wasm'
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.23.1/misc/wasm/wasm_exec.js')
|
importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.23.1/misc/wasm/wasm_exec.js')
|
||||||
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.3/sw.js')
|
importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v2.0.5/sw.js')
|
||||||
|
|
||||||
const wasm = 'api.wasm'
|
const wasm = 'api.wasm'
|
||||||
|
|
||||||
|
|||||||
@@ -12,11 +12,14 @@ 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)
|
||||||
|
|
||||||
func NewWriter() (*Writer, error) {
|
func NewWriter() (*Writer, error) {
|
||||||
|
var rs *Writer
|
||||||
|
|
||||||
var start safejs.Func
|
var start safejs.Func
|
||||||
var controller safejs.Value
|
var controller safejs.Value
|
||||||
|
|
||||||
@@ -34,6 +37,7 @@ func NewWriter() (*Writer, error) {
|
|||||||
|
|
||||||
cancel, err = safejs.FuncOf(func(_ safejs.Value, _ []safejs.Value) any {
|
cancel, err = safejs.FuncOf(func(_ safejs.Value, _ []safejs.Value) any {
|
||||||
defer cancel.Release()
|
defer cancel.Release()
|
||||||
|
rs.cancelled = true
|
||||||
cancelCtx()
|
cancelCtx()
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
@@ -54,14 +58,20 @@ 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
|
}
|
||||||
|
|
||||||
|
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 +88,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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user