httprequest_emscripten.monkey2 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. Namespace httprequest
  2. #Import "<emscripten>"
  3. Using emscripten..
  4. Class HttpRequest Extends HttpRequestBase
  5. Method New()
  6. End
  7. Protected
  8. Method OnSend( text:String ) Override
  9. Local attr:emscripten_fetch_attr_t
  10. emscripten_fetch_attr_init( Varptr attr )
  11. _req.ToCString( attr.requestMethod,4 )
  12. attr.attributes=EMSCRIPTEN_FETCH_LOAD_TO_MEMORY
  13. attr.onsuccess=FetchSuccess
  14. attr.onerror=FetchError
  15. SetReadyState( ReadyState.Loading )
  16. _fetch=emscripten_fetch( Varptr attr,_url )
  17. _sending.Add( Self )
  18. End
  19. Method OnCancel() Override
  20. If Not _fetch Return
  21. Close()
  22. SetReadyState( ReadyState.Error )
  23. End
  24. Private
  25. Field _fetch:emscripten_fetch_t Ptr
  26. Global _sending:=New Stack<HttpRequest>
  27. Method Close()
  28. If Not _fetch Return
  29. _sending.Remove( Self )
  30. emscripten_fetch_close( _fetch )
  31. _fetch=Null
  32. End
  33. Method Success()
  34. _response=String.FromCString( _fetch->data,_fetch->numBytes )
  35. _status=_fetch->status
  36. SetReadyState( ReadyState.Done )
  37. Close()
  38. End
  39. Method Error()
  40. _status=_fetch->status
  41. SetReadyState( ReadyState.Error )
  42. Close()
  43. End
  44. Function FindRequest:HttpRequest( fetch:emscripten_fetch_t Ptr )
  45. For Local request:=Eachin _sending
  46. If request._fetch=fetch Return request
  47. Next
  48. Return Null
  49. End
  50. Function FetchSuccess( fetch:emscripten_fetch_t Ptr )
  51. FindRequest( fetch )?.Success()
  52. End
  53. Function FetchError( fetch:emscripten_fetch_t Ptr )
  54. FindRequest( fetch )?.Error()
  55. End
  56. End