MCPcopy Index your code
hub / github.com/EngoEngine/engo / openFile

Function openFile

engo_js.go:390–433  ·  view source on GitHub ↗
(url string)

Source from the content-addressed store, hash-verified

388}
389
390func openFile(url string) (io.ReadCloser, error) {
391 if Headless() { // Headless would be node.js
392 return os.Open(url)
393 }
394 var err error
395 var resp js.Value
396 ch := make(chan struct{})
397 req := js.Global().Get("XMLHttpRequest").New()
398 req.Call("open", "GET", url, true)
399 req.Set("responseType", "arraybuffer")
400 loadf := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
401 defer close(ch)
402 status := req.Get("status").Int()
403 if 200 <= status && status < 400 {
404 resp = req.Get("response")
405 return nil
406 }
407 err = errors.New(fmt.Sprintf("http error: %d", status))
408 return nil
409 })
410 defer loadf.Release()
411 req.Call("addEventListener", "load", loadf)
412 errorf := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
413 defer close(ch)
414 err = errors.New(fmt.Sprintf("XMLHttpRequest error: %s", req.Get("statusText").String()))
415 return nil
416 })
417 req.Call("addEventListener", "error", errorf)
418 defer errorf.Release()
419 req.Call("send")
420 t := time.NewTicker(time.Duration(int(time.Second) * 10))
421 select {
422 case <-ch:
423 if err != nil {
424 return nil, err
425 }
426 buf := make([]byte, resp.Get("byteLength").Int())
427 js.CopyBytesToGo(buf, js.Global().Get("Uint8Array").New(resp))
428 f := &noCloseReadCloser{bytes.NewReader(buf)}
429 return f, nil
430 case <-t.C:
431 return nil, errors.New("Did not recieve a response in 10 seconds.")
432 }
433}
434
435type noCloseReadCloser struct {
436 r io.Reader

Callers 1

loadMethod · 0.70

Calls 5

HeadlessFunction · 0.85
OpenMethod · 0.80
GetMethod · 0.80
NewMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected