diff --git a/docs/api.go b/docs/api.go index bc7d1e7..887e569 100644 --- a/docs/api.go +++ b/docs/api.go @@ -1,6 +1,7 @@ package main import ( + "context" "encoding/json" "fmt" "net/http" @@ -24,5 +25,8 @@ func main() { } }) - wasmhttp.ServeOnce(nil) + var release = wasmhttp.Serve(nil) + defer release() + + <-context.Background().Done() } diff --git a/docs/api.wasm b/docs/api.wasm index 1071ae9..6d697eb 100755 Binary files a/docs/api.wasm and b/docs/api.wasm differ diff --git a/docs/index.html b/docs/index.html index cf9b3ea..51c2ad5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -19,7 +19,7 @@ - + \ No newline at end of file diff --git a/serve.go b/serve.go index 49983cc..56f990d 100644 --- a/serve.go +++ b/serve.go @@ -1,7 +1,6 @@ package wasmhttp import ( - "context" "fmt" "net/http" "os" @@ -69,67 +68,3 @@ func Serve(handler http.Handler) func() { return cb.Release } - -func ServeOnce(handler http.Handler) { - var ctx, cancel = context.WithCancel(context.Background()) - - var h = handler - if h == nil { - h = http.DefaultServeMux - } - - var path = os.Getenv("WASMHTTP_PATH") - if !strings.HasSuffix(path, "/") { - path = path + "/" - } - - if path != "" { // FIXME always true since / suffix is added to path - var prefix = os.Getenv("WASMHTTP_PATH") - for strings.HasSuffix(prefix, "/") { - prefix = strings.TrimSuffix(prefix, "/") - } - - var mux = http.NewServeMux() - mux.Handle(path, http.StripPrefix(prefix, h)) - h = mux - } - - var cb = js.FuncOf(func(_ js.Value, args []js.Value) interface{} { - var jsReq = whutil.Request{args[0]} - - var resPromise = whutil.NewPromise(func(resolve whutil.PromiseResolve, reject whutil.PromiseReject) { - go func() { - defer cancel() - - defer func() { - if r := recover(); r != nil { - if err, ok := r.(error); ok { - reject(fmt.Sprintf("wasmhttp: panic: %+v\n", err)) - } else { - reject(fmt.Sprintf("wasmhttp: panic: %v\n", r)) - } - } - }() - - var req, err = jsReq.HTTPRequest() - if err != nil { - panic(err) - } - - var res = whutil.NewResponseWriter() - - fmt.Printf("serving %s\n", req.URL.String()) - - h.ServeHTTP(res, req) - - resolve(res) - }() - }) - - return resPromise - }) - - js.Global().Get("wasmhttp").Call("registerHandler", os.Getenv("WASMHTTP_HANDLER_ID"), cb) - - <-ctx.Done() -}