| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #include "HttpRequestJavaTask.h"
- #include "core/log.h"
- namespace oxygine
- {
- jclass _jHttpRequestsClass = 0;
- jmethodID _jCreateRequestMethod = 0;
- static HttpRequestTask* createTask()
- {
- return new HttpRequestJavaTask;
- }
- void HttpRequestTask::init()
- {
- setCustomRequests(createTask);
- 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;[Ljava/lang/String;[BJ)Lorg/oxygine/lib/HttpRequestHolder;");
- JNI_NOT_NULL(_jCreateRequestMethod);
- jmethodID jInit = env->GetStaticMethodID(_jHttpRequestsClass, "init", "()V");
- JNI_NOT_NULL(jInit);
- env->CallStaticVoidMethod(_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->CallStaticVoidMethod(_jHttpRequestsClass, jRelease);
- env->DeleteGlobalRef(_jHttpRequestsClass);
- _jHttpRequestsClass = 0;
- _jCreateRequestMethod = 0;
- }
- HttpRequestJavaTask::HttpRequestJavaTask(): _handle(0)
- {
- }
- HttpRequestJavaTask::~HttpRequestJavaTask()
- {
- }
- void HttpRequestJavaTask::_run()
- {
- JNIEnv* env = jniGetEnv();
- LOCAL_REF_HOLDER(env);
- jstring jurl = env->NewStringUTF(_url.c_str());
- jbyteArray jpost = 0;
- if (!_postData.empty())
- {
- jpost = env->NewByteArray(_postData.size());
- env->SetByteArrayRegion(jpost, 0, _postData.size(), (jbyte*)&_postData.front());
- }
- jobjectArray jkeys = (jobjectArray)env->NewObjectArray(_headers.size(), env->FindClass("java/lang/String"), 0);
- jobjectArray jvalues = (jobjectArray)env->NewObjectArray(_headers.size(), env->FindClass("java/lang/String"), 0);
- for (size_t i = 0; i < _headers.size(); ++i)
- {
- jstring jkey = env->NewStringUTF(_headers[i].first.c_str());
- jstring jvalue = env->NewStringUTF(_headers[i].second.c_str());
- env->SetObjectArrayElement(jkeys, i, jkey);
- env->SetObjectArrayElement(jvalues, i, jvalue);
- }
- //addRef();
- void* ptr = new spAsyncTask(shared_from_this());
- _handle = env->NewGlobalRef(env->CallStaticObjectMethod(_jHttpRequestsClass, _jCreateRequestMethod,
- jurl, jkeys, jvalues, jpost, (jlong)ptr));
- }
- void HttpRequestJavaTask::error_()
- {
- onError();
- //releaseRef();
- }
- void HttpRequestJavaTask::gotHeader_(int respCode, int contentLen)
- {
- _responseCode = respCode;
- _expectedContentSize = contentLen;
- gotHeaders();
- }
- void HttpRequestJavaTask::write_(jbyteArray jdata, int size)
- {
- JNIEnv* env = jniGetEnv();
- jbyte* data = env->GetByteArrayElements(jdata, 0);
- write(data, size);
- env->ReleaseByteArrayElements(jdata, data, JNI_ABORT);
- }
- void HttpRequestJavaTask::complete_()
- {
- onComplete();
- //releaseRef();
- }
- void HttpRequestJavaTask::_finaliaze(bool)
- {
- JNIEnv* env = jniGetEnv();
- env->DeleteGlobalRef(_handle);
- _handle = 0;
- }
- }
- extern "C"
- {
- /*
- public static native void nativeHttpRequestSuccess(long handle);
- public static native void nativeHttpRequestError(long handle);
- public static native void nativeHttpRequestGotHeader(long handle, int code, int contentLength);
- public static native void nativeHttpRequestWrite(long handle, byte[] data, int size);
- */
- JNIEnv* Android_JNI_GetEnv(void);
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestSuccess(JNIEnv* env, jclass, jlong handle)
- {
- oxygine::spAsyncTask* task = (oxygine::spAsyncTask*)handle;
- static_cast<oxygine::HttpRequestJavaTask*>(task->get())->complete_();
- delete task;
- //task->complete_();
- }
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestError(JNIEnv* env, jclass, jlong handle)
- {
- oxygine::spAsyncTask* task = (oxygine::spAsyncTask*)handle;
- static_cast<oxygine::HttpRequestJavaTask*>(task->get())->error_();
- delete task;
- }
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestWrite(JNIEnv* env, jclass,
- jlong handle, jbyteArray array, jint size)
- {
- oxygine::spAsyncTask* task = (oxygine::spAsyncTask*)handle;
- static_cast<oxygine::HttpRequestJavaTask*>(task->get())->write_(array, size);
- }
- JNIEXPORT void JNICALL Java_org_oxygine_lib_HttpRequest_nativeHttpRequestGotHeader(JNIEnv* env, jclass,
- jlong handle, jint respCode, jint contentLen)
- {
- oxygine::spAsyncTask* task = (oxygine::spAsyncTask*)handle;
- static_cast<oxygine::HttpRequestJavaTask*>(task->get())->gotHeader_(respCode, contentLen);
- }
- }
|