httprequest.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "httprequest.h"
  2. #include "../../std/async/native/async.h"
  3. extern "C" JNIEnv *Android_JNI_GetEnv(); //SDL2
  4. namespace bbHttpRequest{
  5. bbFunction<void( jobject,bbInt )> onReadyStateChanged;
  6. bbFunction<void( jobject,bbString,bbInt,bbInt )> onResponseReceived;
  7. }
  8. namespace{
  9. struct ReadyStateChangedEvent : public bbAsync::Event{
  10. jobject obj;
  11. int state;
  12. ReadyStateChangedEvent( jobject obj,int state ):obj( obj ),state( state ){
  13. }
  14. void dispatch(){
  15. bbHttpRequest::onReadyStateChanged( obj,state );
  16. JNIEnv *env=Android_JNI_GetEnv();
  17. env->DeleteGlobalRef( obj );
  18. delete this;
  19. }
  20. };
  21. struct ResponseReceivedEvent : public bbAsync::Event{
  22. jobject obj;
  23. jstring response;
  24. int status;
  25. int state;
  26. ResponseReceivedEvent( jobject obj,jstring response,int status,int state ):obj( obj ),response( response ),status( status ),state( state ){
  27. }
  28. void dispatch(){
  29. JNIEnv *env=Android_JNI_GetEnv();
  30. const char *cstr=env->GetStringUTFChars( response,0 );
  31. bbString str=bbString::fromCString( cstr );
  32. env->ReleaseStringUTFChars( response,cstr );
  33. bbHttpRequest::onResponseReceived( obj,str,status,state );
  34. env->DeleteGlobalRef( response );
  35. env->DeleteGlobalRef( obj );
  36. delete this;
  37. }
  38. };
  39. }
  40. extern "C"{
  41. JNIEXPORT void JNICALL Java_com_monkey2_lib_Monkey2HttpRequest_onNativeReadyStateChanged( JNIEnv *env,jobject obj,int state ){
  42. obj=env->NewGlobalRef( obj );
  43. ReadyStateChangedEvent *ev=new ReadyStateChangedEvent( obj,state );
  44. ev->post();
  45. }
  46. JNIEXPORT void JNICALL Java_com_monkey2_lib_Monkey2HttpRequest_onNativeResponseReceived( JNIEnv *env,jobject obj,jstring response,int status,int state ){
  47. obj=env->NewGlobalRef( obj );
  48. response=(jstring)env->NewGlobalRef( response );
  49. ResponseReceivedEvent *ev=new ResponseReceivedEvent( obj,response,status,state );
  50. ev->post();
  51. }
  52. }