httprequest_android.monkey2 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. Namespace httprequest
  2. #Import "<jni>"
  3. #Import "<std>"
  4. #Import "<mojo>"
  5. #Import "<sdl2>"
  6. #Import "native/Monkey2HttpRequest.java"
  7. #Import "native/httprequest.cpp"
  8. #Import "native/httprequest.h"
  9. Using jni..
  10. Using std..
  11. Using mojo..
  12. Using sdl2..
  13. Extern Private
  14. Global onReadyStateChanged:Void(jobject,Int)="bbHttpRequest::onReadyStateChanged"
  15. Global onResponseReceived:Void(jobject,String,Int,Int)="bbHttpRequest::onResponseReceived"
  16. Public
  17. Class HttpRequest Extends HttpRequestBase
  18. Method New()
  19. Init()
  20. Local env:=Android_JNI_GetEnv()
  21. Local obj:=env.AllocObject( _class )
  22. _obj=env.NewGlobalRef( obj )
  23. _requests.Add( Self )
  24. End
  25. Protected
  26. Method OnOpen( req:String,url:String ) Override
  27. If Not _obj Return
  28. Local env:=Android_JNI_GetEnv()
  29. env.CallVoidMethod( _obj,_open,New Variant[]( req,url ) )
  30. End
  31. Method OnSetHeader( header:String,value:String ) Override
  32. If Not _obj Return
  33. Local env:=Android_JNI_GetEnv()
  34. env.CallVoidMethod( _obj,_setHeader,New Variant[]( header,value ) )
  35. End
  36. Method OnSend( text:String ) Override
  37. If Not _obj Return
  38. Local env:=Android_JNI_GetEnv()
  39. Local timeout:=Int( _timeout * 1000 )
  40. env.CallVoidMethod( _obj,_send,New Variant[]( text,timeout ) )
  41. End
  42. Method OnCancel() Override
  43. If Not _obj Return
  44. Local env:=Android_JNI_GetEnv()
  45. env.CallVoidMethod( _obj,_cancel,Null )
  46. End
  47. Private
  48. Field _obj:jobject
  49. Global _class:jclass
  50. Global _open:jmethodID
  51. Global _setHeader:jmethodID
  52. Global _send:jmethodID
  53. Global _cancel:jmethodID
  54. Global _requests:=New Stack<HttpRequest>
  55. Method Close()
  56. If Not _obj Return
  57. _requests.Remove( Self )
  58. Local env:=Android_JNI_GetEnv()
  59. env.DeleteGlobalRef( _obj )
  60. _obj=Null
  61. End
  62. Function OnReadyStateChanged( obj:jobject,state:Int )
  63. Local env:=Android_JNI_GetEnv()
  64. For Local request:=Eachin _requests
  65. If Not env.IsSameObject( obj,request._obj ) Continue
  66. request.SetReadyState( Cast<ReadyState>( state ) )
  67. If state=4 Or state=5 request.Close()
  68. Exit
  69. Next
  70. End
  71. Function OnResponseReceived( obj:jobject,response:String,status:Int,state:Int )
  72. Local env:=Android_JNI_GetEnv()
  73. For Local request:=Eachin _requests
  74. If Not env.IsSameObject( obj,request._obj ) Continue
  75. request._response=response
  76. request._status=status
  77. request.SetReadyState( Cast<ReadyState>( state ) )
  78. Exit
  79. Next
  80. End
  81. Function Init()
  82. If _class Return
  83. Local env:=Android_JNI_GetEnv()
  84. _class=env.FindClass( "com/monkey2/lib/Monkey2HttpRequest" )
  85. If Not _class RuntimeError( "Can't find com.monkey2.lib.Monkey2HttpRequest class" )
  86. _open=env.GetMethodID( _class,"open","(Ljava/lang/String;Ljava/lang/String;)V" )
  87. _setHeader=env.GetMethodID( _class,"setHeader","(Ljava/lang/String;Ljava/lang/String;)V" )
  88. _send=env.GetMethodID( _class,"send","(Ljava/lang/String;I)V" )
  89. _cancel=env.GetMethodID( _class,"cancel","()V" )
  90. onReadyStateChanged=OnReadyStateChanged
  91. onResponseReceived=OnResponseReceived
  92. End
  93. End