| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #include "HttpRequestJavaTask.h"
- #include "core/log.h"
- namespace oxygine
- {
- jclass _jHttpRequestsClass = 0;
- jmethodID _jCreateRequestMethod = 0;
- void HttpRequestTask::init()
- {
- JNIEnv *env = jniGetEnv();
- LOCAL_REF_HOLDER(env);
- _jHttpRequestsClass = (jclass) env->NewGlobalRef(env->FindClass("org/oxygine/lib/HttpRequests"));
- JNI_NOT_NULL(_jHttpRequestsClass);
- _jCreateRequestMethod = env->GetStaticMethodID(_jHttpRequestsClass, "createRequest", "(Ljava/lang/String;Ljava/lang/String;[BJ)Lorg/oxygine/lib/HttpRequest;");
- JNI_NOT_NULL(_jCreateRequestMethod);
- jmethodID jInit = env->GetStaticMethodID(_jHttpRequestsClass, "init", "()V");
- JNI_NOT_NULL(jInit);
- env->CallStaticObjectMethod(_jHttpRequestsClass, jInit);
- log::messageln("initialized HttpRequestJavaTask");
- }
-
- void HttpRequestTask::release()
- {
- JNIEnv *env = jniGetEnv();
- LOCAL_REF_HOLDER(env);
-
- jmethodID jRelease = env->GetStaticMethodID(_jHttpRequestsClass, "release", "()V");
- JNI_NOT_NULL(jRelease);
- env->CallStaticObjectMethod(_jHttpRequestsClass, jRelease);
- }
-
- spHttpRequestTask HttpRequestTask::create()
- {
- return new HttpRequestJavaTask();
- }
- HttpRequestJavaTask::HttpRequestJavaTask():_handle(0)
- {
- }
-
- HttpRequestJavaTask::~HttpRequestJavaTask()
- {
- log::messageln("~HttpRequestJavaTask");
- }
- void HttpRequestJavaTask::_run()
- {
- addRef();
- _mainThreadSync = true;
- JNIEnv *env = jniGetEnv();
- LOCAL_REF_HOLDER(env);
- jstring jurl = jniGetEnv()->NewStringUTF(_url.c_str());
- jstring jfname = _fname.empty() ? 0 : jniGetEnv()->NewStringUTF(_fname.c_str());
- jbyteArray jpost = 0;
- if (!_postData.empty())
- {
- jpost = env->NewByteArray(_postData.size());
- env->SetByteArrayRegion(jpost, 0, _postData.size(), (jbyte*)&_postData.front());
- }
- _handle = env->NewGlobalRef(env->CallStaticObjectMethod(_jHttpRequestsClass, _jCreateRequestMethod, jurl, jfname, jpost, (jlong)this));
- }
- void HttpRequestJavaTask::error_()
- {
- onError();
- releaseRef();
- }
- void HttpRequestJavaTask::progress_(int loaded, int total)
- {
- progress(loaded, total);
- }
- void HttpRequestJavaTask::complete_(jbyteArray ar)
- {
- if (ar)
- {
- JNIEnv *env = jniGetEnv();
- jbyte *data = env->GetByteArrayElements(ar, 0);
- jint len = env->GetArrayLength(ar);
- _response.assign((char*)data, (char*)data + len);
- env->ReleaseByteArrayElements(ar, data, 0);
- }
- onComplete();
- releaseRef();
- }
- void HttpRequestJavaTask::_finaliaze(bool)
- {
- JNIEnv *env = jniGetEnv();
- env->DeleteGlobalRef(_handle);
- _handle = 0;
- }
- }
- extern "C"
- {
- JNIEnv* Android_JNI_GetEnv(void);
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestResponseSuccess(JNIEnv *env, jlong handle, jbyteArray array)
- {
- oxygine::HttpRequestJavaTask *task = (oxygine::HttpRequestJavaTask *)handle;
- task->complete_(array);
- }
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestResponseProgress(JNIEnv *env, jlong handle, jint loaded, jint total)
- {
- oxygine::HttpRequestJavaTask *task = (oxygine::HttpRequestJavaTask *)handle;
- task->progress_(loaded, total);
- }
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestResponseError(JNIEnv *env, jlong handle)
- {
- oxygine::HttpRequestJavaTask *task = (oxygine::HttpRequestJavaTask *)handle;
- task->error_();
- }
- }
|