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 HttpRequestTask::release()
    {
        JNIEnv* env = jniGetEnv();
        LOCAL_REF_HOLDER(env);

        jmethodID jRelease = env->GetStaticMethodID(_jHttpRequestsClass, "release", "()V");
        JNI_NOT_NULL(jRelease);
        env->CallStaticObjectMethod(_jHttpRequestsClass, jRelease);
    }
    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 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/HttpRequestHolder;");
        JNI_NOT_NULL(_jCreateRequestMethod);

        jmethodID jInit = env->GetStaticMethodID(_jHttpRequestsClass, "init", "()V");
        JNI_NOT_NULL(jInit);
        env->CallStaticVoidMethod(_jHttpRequestsClass, jInit);

        log::messageln("initialized HttpRequestJavaTask");
    }
示例#5
0
void android_main(struct android_app* state) {
  struct engine engine;

  // Make sure glue isn't stripped.
  app_dummy();

  LOGI("android_main");

  memset(&engine, 0, sizeof(engine));
  state->userData = &engine;
  state->onAppCmd = cmdHandler;
  state->onInputEvent = inputHandler;

  // Dynamically load lua library
  //  void *handle = dlopen("/data/data/com.example.luanative/lib/liblua.so", RTLD_LAZY);

  engine.app = state;
  engine.L = luaL_newstate();

  luaL_openlibs(engine.L);

  jniSetJavaVM(state->activity->vm);
  jniSetContext(state->activity->clazz);
  JNIEnv* env = jniGetEnv();

  luaopen_asset(engine.L);
  luaopen_vibrator(engine.L);
  luaopen_toast(engine.L);

  luaL_doasset(engine.L, "main.lua");

  if (state->savedState != NULL) {

  }

  while (1) {
    // Read all pending events.
    int ident;
    int events;
    struct android_poll_source* source;

    // If not animating, we will block forever waiting for events.
    // If animating, we loop until all events are read, then continue
    // to draw the next frame of animation.
      
    while ((ident=ALooper_pollAll(0, NULL, &events,
				  (void**)&source)) >= 0) {

      LOGI("ident: %d, events %d", ident, events);

      // Process this event.
      if (source != NULL) {
	source->process(state, source);
      }

      // Check if we are exiting.
      if (state->destroyRequested != 0) {

	return;
      }
    }

    usleep(100000);

  }
}
 void HttpRequestJavaTask::_finaliaze(bool)
 {
     JNIEnv* env = jniGetEnv();
     env->DeleteGlobalRef(_handle);
     _handle = 0;
 }