JNIEXPORT void JNICALL
Java_io_jxcore_node_jxcore_prepareEngine(JNIEnv *env, jobject thiz,
                                         jstring home, jstring files) {
  static bool initialized = false;

  const char *hfiles = env->GetStringUTFChars(files, 0);
  const char *hfolder = env->GetStringUTFChars(home, 0);

  if (!initialized) {  // silly but does the job
    initialized = true;
    JX_Initialize(hfolder, callback);
  }

  JX_InitializeNewEngine();
  files_json = hfiles;

  env->ReleaseStringUTFChars(home, hfolder);
  env->ReleaseStringUTFChars(files, hfiles);

  JX_DefineExtension("assetExistsSync", assetExistsSync);
  JX_DefineExtension("assetReadSync", assetReadSync);
  JX_DefineExtension("assetReadDirSync", assetReadDirSync);
  JX_DefineExtension("defineEventCB", defineEventCB);
  JX_DefineExtension("callJXcoreNative", callJXcoreNative);
}
예제 #2
0
int main(int argc, char **args) {
  JX_Initialize(args[0], callback);
  JX_InitializeNewEngine();

  JX_DefineMainFile(contents);
  JX_DefineExtension("sampleMethod", sampleMethod);
  JX_StartEngine();

  while (JX_LoopOnce() != 0) usleep(1);

  JXValue *params[2] = {param1, param2};
  JXValue out;

  // call fnc -> JS side function
  // we had made this variable persistent inside sampleMethod
  JX_CallFunction(fnc, *params, 2, &out);

  // we need to clear persistent and then free whenever we
  // are done with persistent values to not to leak
  JX_ClearPersistent(fnc);
  JX_Free(fnc);
  JX_ClearPersistent(param1);
  JX_Free(param1);
  JX_ClearPersistent(param2);
  JX_Free(param2);

  assert(JX_GetDataLength(&out) == 11 &&
         "Expected return value was 'test{\"a\":3}");
  JX_Free(&out);
  assert(out.data_ == NULL && out.size_ == 0 && "JX_FreeResultData leaks?");

  JX_StopEngine();
}
예제 #3
0
JNIEXPORT void JNICALL
Java_org_capriza_jxcore_jxcore_prepareEngine(JNIEnv *env, jobject thiz,
                                                  jstring home, jstring files) {
  static bool initialized = false;

  const char *hfiles = env->GetStringUTFChars(files, 0);
  const char *hfolder = env->GetStringUTFChars(home, 0);

  std::thread::id thread_id = std::this_thread::get_id();


  try {
    int* isAlive = (int*) pthread_getspecific(tlsKey);

      std::ostringstream oss;
      oss << "prepareEngineOri called thread id: " << thread_id << " isAlive is: " << isAlive;
      std::string var = oss.str();

      __android_log_print(ANDROID_LOG_DEBUG, APPNAME, var.c_str(), 1);
  }
  catch (int e) {
    __android_log_print(ANDROID_LOG_ERROR, APPNAME, "EXCEPTION in prepare. yes Ori.", 1);
  }


  if (!initialized) {  // silly but does the job
    __android_log_print(ANDROID_LOG_DEBUG, APPNAME, "Initializing engine capriza", 1);
    initialized = true;
    JX_Initialize(hfolder, callback);
  }
  else {
    __android_log_print(ANDROID_LOG_DEBUG, APPNAME, "NOT!! Initializing engine capriza", 1);
  }



  JX_InitializeNewEngine();
  files_json = hfiles;

  env->ReleaseStringUTFChars(home, hfolder);
  env->ReleaseStringUTFChars(files, hfiles);

  JX_DefineExtension("assetExistsSync", assetExistsSync);
  JX_DefineExtension("assetReadSync", assetReadSync);
  JX_DefineExtension("assetReadDirSync", assetReadDirSync);
  JX_DefineExtension("stopBGS", stopBGS);
  JX_DefineExtension("getTaskOptions", getTaskOptions);
  JX_DefineExtension("defineEventCB", defineEventCB);

  bool isSpider = JX_IsSpiderMonkey();
  bool isV8 = JX_IsV8();

  std::ostringstream oss2;
  oss2 << "prepareEngineOri ended spidermonkey?: " << isSpider << " v8?: " << isV8;
  std::string var2 = oss2.str();
  __android_log_print(ANDROID_LOG_DEBUG, APPNAME, var2.c_str(), 1);

}
예제 #4
0
int main(int argc, char **args) {
  JX_Initialize(args[0], callback);
  JX_InitializeNewEngine();

  JX_DefineMainFile(contents);
  JX_DefineExtension("crashMe", crashMe);
  JX_DefineExtension("sampleMethod", sampleMethod);
  JX_StartEngine();

  while (JX_LoopOnce() != 0) usleep(1);

  JX_StopEngine();
}
예제 #5
0
int main(int argc, char **args) {
  JX_InitializeOnce("/test/bin/cpp/");
  JX_InitializeNewEngine();

  JX_DefineMainFile(contents);
  JX_StartEngine();

  JXValue ret_val;
  JX_Evaluate("process.callMe()", "eval", &ret_val);

  while (JX_LoopOnce() != 0) usleep(1);

  assert(JX_IsError(&ret_val) && "error was expected");

  std::string str;
  ConvertResult(&ret_val, str);
  assert(!strcmp("TypeError: this is type exception", str.c_str()) &&
         "Exception output doesn't match");

  JX_Free(&ret_val);

  JX_StopEngine();
}
예제 #6
0
int main(int argc, char **args) {
  JX_Initialize(args[0], callback);
  JX_InitializeNewEngine();

  JX_DefineMainFile(contents);
  JX_DefineExtension("sampleMethod", sampleMethod);
  JX_StartEngine();

  // loop for possible IO
  // or JX_Loop() without usleep / while
  while (JX_LoopOnce() != 0) usleep(1);

  JXValue result;
  JX_Evaluate(eval_str, "myscript", &result);
  JX_Free(&result);

  // loop for possible IO
  // or JX_Loop() without usleep / while
  while (JX_LoopOnce() != 0) usleep(1);

  JX_StopEngine();

  assert(counter == 3 && "sampleMethod is expected to recive 3 calls (2 sub instance, 1 main)");
}
예제 #7
0
int main(int argc, char **args) {
  JX_Initialize(args[0], callback);
  JX_InitializeNewEngine();

  JX_DefineMainFile(contents);
  
  JX_StartEngine();

  JXValue ret_val;
  
  // this is not a function, it shouldn't return. 
  // exception is expected
  JX_Evaluate("return process.x", "eval", &ret_val);
  
  while (JX_LoopOnce() != 0) usleep(1);
  
  assert(JX_IsError(&ret_val) && "error was expected");
  
  JX_Free(&ret_val);

  JX_StopEngine();
  
  return 0;
}