From f965df5ef215c609c790e4c164b4c6b22c41c28b Mon Sep 17 00:00:00 2001 From: Nicolas Lepage <19571875+nlepage@users.noreply.github.com> Date: Wed, 27 Nov 2019 00:58:05 +0100 Subject: [PATCH] :construction: --- serve.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 serve.go diff --git a/serve.go b/serve.go new file mode 100644 index 0000000..2a67d12 --- /dev/null +++ b/serve.go @@ -0,0 +1,44 @@ +package wasmhttp + +import ( + "net/http" + "os" + "syscall/js" +) + +// Serve serves HTTP requests using handler or http.DefaultServeMux if handler is nil +func Serve(handler http.Handler) func() { + h := handler + if h == nil { + h = http.DefaultServeMux + } + + cb := js.FuncOf(func(_ js.Value, args []js.Value) interface{} { + jsReq := Request(args[0]) + + var resolveRes func(interface{}) + var res = NewPromise(func(resolve, _ func(interface{})) { + resolveRes = resolve + }) + + go func() { + req, err := jsReq.HTTPRequest() + if err != nil { + //FIXME reject + panic(err) + } + + res := NewResponseWriter() + + handler.ServeHTTP(res, req) + + resolveRes(res.JSResponse()) + }() + + return res.Value() + }) + + js.Global().Get("wasmhttp").Call("RegisterHandler", os.Getenv("WASMHTTP_HANDLER_ID"), cb) + + return cb.Release +}