void RhoRubyStart() { const char* szRoot = rho_native_rhopath(); //VALUE moduleRhom; #ifdef HAVE_LOCALE_H setlocale(LC_CTYPE, ""); #endif { #ifdef ENABLE_RUBY_VM_STAT g_collect_stat = 1; #endif RUBY_INIT_STACK; ruby_init(); #if defined(WIN32) rb_w32_sysinit(NULL,NULL); #endif #if defined(DEBUG) //enable_gc_profile(); #endif //rb_funcall(rb_mGC, rb_intern("stress="), 1, Qtrue); ruby_init_loadpath(szRoot); #if defined(RHODES_EMULATOR) || defined(APP_BUILD_CAPABILITY_MOTOROLA) || defined(OS_WP8) { VALUE load_path = GET_VM()->load_path; char* app_path = malloc(strlen(szRoot)+100); rb_ary_clear(load_path); strcpy(app_path, szRoot); #if defined(RHODES_EMULATOR) strcat(app_path, "app"); #elif defined(OS_WP8) strcat(app_path, "/apps/app"); #else strcat(app_path, "apps/app"); #endif rb_ary_push(load_path, rb_str_new2(app_path) ); #if defined(APP_BUILD_CAPABILITY_MOTOROLA) strcpy(app_path, rho_native_reruntimepath()); strcat(app_path, "lib"); #elif defined(OS_WP8) strcpy(app_path, szRoot); strcat(app_path, "/lib"); #else strcpy(app_path, rho_simconf_getRhodesPath()); strcat(app_path, "/lib/framework"); #endif rb_ary_push(load_path, rb_str_new2(app_path) ); } #endif //DO not use it! Keeps for backward compatibility with ruby extensions. Use Rho::System.isRhoSimulator #ifdef RHODES_EMULATOR rb_const_set(rb_cObject, rb_intern("RHODES_EMULATOR"), Qtrue); #endif #if !defined(OS_WP8) Init_strscan(); //+ Init_GeoLocation(); //+ Init_Phonebook(); #if !defined(OS_MACOSX) && !defined( OS_WINDOWS_DESKTOP ) && !defined(OS_WINCE) && !defined(OS_ANDROID) Init_WebView(); //+ #endif #if !defined(RHO_NO_RUBY) Init_RhoConf(); //+ #endif //#if !defined(OS_WINDOWS_DESKTOP) || defined(RHODES_EMULATOR) // Init_Alert(); //#endif #if defined(WINDOWS_PLATFORM) init_rhoext_Signature(); #else //Init_SignatureCapture(); #endif Init_RhoBluetooth(); Init_RhodesNativeViewManager(); #if !defined(OS_MACOSX) Init_Camera(); #endif Init_stringio(); //+ Init_DateTimePicker(); //#if !defined(WINDOWS_PLATFORM) && !defined(RHODES_EMULATOR) && !defined(OS_ANDROID) && !defined(OS_MACOSX) // Init_NativeBar(); //#endif Init_RhoSupport(); //+ Init_MapView(); Init_RingtoneManager(); Init_socket(); //+ //#if !defined(WINDOWS_PLATFORM) && !defined(RHODES_EMULATOR) && !defined(OS_MACOSX) // Init_NavBar(); //#endif Init_RhoEvent(); Init_Calendar(); //#if !defined(OS_WINDOWS_DESKTOP) && !defined(RHODES_EMULATOR) && ! defined(OS_WINCE) // Init_Alert(); //#endif #if defined(OS_MACOSX) #ifndef RHO_DISABLE_OLD_CAMERA_SIGNATURE_API Init_Camera(); Init_SignatureCapture(); #endif #endif #if defined(OS_ANDROID) #ifndef RHO_DISABLE_OLD_CAMERA_SIGNATURE_API Init_SignatureCapture(); #endif #endif //TODO: RhoSimulator - load extensions dll dynamically #if !defined(RHO_SYMBIAN) Init_Extensions(); #endif //RHO_SYMBIAN #else // OS_WP8 is set Init_strscan(); Init_GeoLocation(); Init_NavBar(); Init_RhoSupport(); Init_RhoConf(); Init_Alert(); Init_socket(); Init_stringio(); Init_Extensions(); #endif //OS_WP8 extensions_loaded = 1; if ( rho_rcclient_have_rhoconnect_client() ) { rb_const_set(rb_cObject, rb_intern("RHOCONNECT_CLIENT_PRESENT"), Qtrue); } #if defined(APP_BUILD_CAPABILITY_MOTOROLA) rb_require("rhomotoapi"); #endif //APP_BUILD_CAPABILITY_MOTOROLA #ifdef ENABLE_RUBY_VM_STAT struct timeval start; struct timeval end; gettimeofday (&start, NULL); #endif #ifdef RHODES_EMULATOR require_compiled(rb_str_new2("rhoframework"), &framework ); framework = rb_const_get(rb_cObject,rb_intern("RHO_FRAMEWORK")); #else { VALUE res = rho_ruby_disable_gc(); require_compiled(rb_str_new2("rhoframework"), &framework ); rho_ruby_enable_gc(res); } #endif //RHODES_EMULATOR if ( framework == 0 || framework == Qnil ) { RAWLOG_FATAL("RHO framework creating failed. Application will exit."); } #ifdef ENABLE_RUBY_VM_STAT gettimeofday (&end, NULL); if ( end.tv_sec > 0 ) g_require_compiled_msec += (end.tv_sec - start.tv_sec) * 1000; else g_require_compiled_msec += (end.tv_usec - start.tv_usec)/1000; #endif rb_gc_register_mark_object(framework); CONST_ID(framework_mid, "serve"); CONST_ID(framework_mid2, "serve_index"); CONST_ID(initApp_mid, "init_app"); CONST_ID(onConfigConflicts_mid, "on_config_conflicts"); CONST_ID(activateApp_mid, "activate_app"); CONST_ID(deactivateApp_mid, "deactivate_app"); CONST_ID(uiCreated_mid, "ui_created"); CONST_ID(uiDestroyed_mid, "ui_destroyed"); CONST_ID(loadServerSources_mid,"load_server_sources"); CONST_ID(loadAllSyncSources_mid,"load_all_sync_sources"); CONST_ID(resetDBOnSyncUserChanged_mid, "reset_db_on_sync_user_changed"); //moduleRhom = rb_const_get(rb_cObject, rb_intern("Rhom")); #ifdef ENABLE_RUBY_VM_STAT g_collect_stat = 0; #endif } }
std::string MethodResultJni::toJson() { std::string res = "{}"; JNIEnv *env = jniInit(); if (!env) { RAWLOG_FATAL("JNI initialization failed"); rb_raise(rb_eRuntimeError,"JNI initialization failed"); return res; } int type = getResultType(env); switch(type) { case typeNone: break; case typeBoolean: // { // bool booleanResult = static_cast<bool>(getBooleanResult(env)); // res = booleanResult ? Qtrue : Qfalse; // } break; case typeInteger: // { // int intResult = static_cast<int>(getIntegerResult(env)); // res = rho_ruby_create_integer(intResult); // } break; case typeDouble: // { // double doubleResult = static_cast<double>(getDoubleResult(env)); // res = rho_ruby_create_double(doubleResult); // } break; case typeString: // { // jhstring jhStrResult = getStringResult(env); // res = rho_cast<VALUE>(env, jhStrResult); // } break; case typeList: // { // jhobject jhListResult = getListResult(env); // res = rho_cast<VALUE>(env, jhListResult); // } break; case typeMap: // { // jhobject jhMapResult = getMapResult(env); // res = rho_cast<VALUE>(env, jhMapResult); // } break; case typeArgError: case typeError: { res = "{'error' : { 'message' : '"; res += getErrorMessage(env) + "' } }"; } break; default: RAWLOG_ERROR("Unknown runtime error in MethodResultJni class"); res = "{'error' : { 'message' : 'Unknown runtime error in MethodResultJni class' } }"; } reset(env); return res; }
void RhoRubyStart() { const char* szRoot = rho_native_rhopath(); //VALUE moduleRhom; #ifdef HAVE_LOCALE_H setlocale(LC_CTYPE, ""); #endif { #ifdef ENABLE_RUBY_VM_STAT g_collect_stat = 1; #endif RUBY_INIT_STACK; ruby_init(); #if defined(WIN32) rb_w32_sysinit(NULL,NULL); #endif #if defined(DEBUG) //enable_gc_profile(); #endif //rb_funcall(rb_mGC, rb_intern("stress="), 1, Qtrue); ruby_init_loadpath(szRoot); #ifdef RHODES_EMULATOR { VALUE load_path = GET_VM()->load_path; char* app_path = malloc(strlen(szRoot)+100); rb_ary_clear(load_path); strcpy(app_path, szRoot); strcat(app_path, "app"); rb_ary_push(load_path, rb_str_new2(app_path) ); strcpy(app_path, rho_simconf_getRhodesPath()); strcat(app_path, "/lib/framework"); rb_ary_push(load_path, rb_str_new2(app_path) ); } #endif Init_strscan(); Init_sqlite3_api(); Init_GeoLocation(); Init_SyncEngine(); Init_AsyncHttp(); Init_System(); Init_Phonebook(); Init_WebView(); Init_RhoConf(); Init_Alert(); Init_SignatureCapture(); Init_RhoBluetooth(); Init_RhodesNativeViewManager(); Init_Camera(); Init_stringio(); Init_DateTimePicker(); Init_NativeBar(); Init_RhoSupport(); Init_MapView(); Init_RingtoneManager(); Init_socket(); Init_NavBar(); Init_RhoEvent(); Init_Calendar(); //TODO: RhoSimulator - load extensions dll dynamically #if !defined(RHODES_EMULATOR) && !defined(RHO_SYMBIAN) Init_Extensions(); #endif //RHODES_EMULATOR #ifdef ENABLE_RUBY_VM_STAT struct timeval start; struct timeval end; gettimeofday (&start, NULL); #endif #ifdef RHODES_EMULATOR rb_const_set(rb_cObject, rb_intern("RHODES_EMULATOR"), Qtrue); require_compiled(rb_str_new2("rhoframework"), &framework ); framework = rb_const_get(rb_cObject,rb_intern("RHO_FRAMEWORK")); #else { VALUE res = rho_ruby_disable_gc(); require_compiled(rb_str_new2("rhoframework"), &framework ); rho_ruby_enable_gc(res); } #endif //RHODES_EMULATOR if ( framework == 0 || framework == Qnil ) { RAWLOG_FATAL("RHO framework creating failed. Application will exit."); } #ifdef ENABLE_RUBY_VM_STAT gettimeofday (&end, NULL); if ( end.tv_sec > 0 ) g_require_compiled_msec += (end.tv_sec - start.tv_sec) * 1000; else g_require_compiled_msec += (end.tv_usec - start.tv_usec)/1000; #endif rb_gc_register_mark_object(framework); CONST_ID(framework_mid, "serve"); CONST_ID(framework_mid2, "serve_index"); CONST_ID(initApp_mid, "init_app"); CONST_ID(onConfigConflicts_mid, "on_config_conflicts"); CONST_ID(activateApp_mid, "activate_app"); CONST_ID(deactivateApp_mid, "deactivate_app"); CONST_ID(uiCreated_mid, "ui_created"); CONST_ID(uiDestroyed_mid, "ui_destroyed"); CONST_ID(loadServerSources_mid,"load_server_sources"); CONST_ID(loadAllSyncSources_mid,"load_all_sync_sources"); CONST_ID(resetDBOnSyncUserChanged_mid, "reset_db_on_sync_user_changed"); //moduleRhom = rb_const_get(rb_cObject, rb_intern("Rhom")); #ifdef ENABLE_RUBY_VM_STAT g_collect_stat = 0; #endif } }
VALUE MethodResultJni::toRuby() { RAWTRACE("toRuby"); VALUE res = Qnil; JNIEnv *env = jniInit(); if (!env) { RAWLOG_FATAL("JNI initialization failed"); rb_raise(rb_eRuntimeError,"JNI initialization failed"); return Qnil; } int type = getResultType(env); switch(type) { case typeNone: break; case typeBoolean: { bool booleanResult = static_cast<bool>(getBooleanResult(env)); res = booleanResult ? Qtrue : Qfalse; } break; case typeInteger: { int intResult = static_cast<int>(getIntegerResult(env)); res = rho_ruby_create_integer(intResult); } break; case typeDouble: { double doubleResult = static_cast<double>(getDoubleResult(env)); res = rho_ruby_create_double(doubleResult); } break; case typeString: { jhstring jhStrResult = getStringResult(env); res = rho_cast<VALUE>(env, jhStrResult); } break; case typeList: { jhobject jhListResult = getListResult(env); res = rho_cast<VALUE>(env, jhListResult); } break; case typeMap: { jhobject jhMapResult = getMapResult(env); res = rho_cast<VALUE>(env, jhMapResult); } break; case typeArgError: rho_ruby_raise_argerror(getErrorMessage(env).c_str()); break; case typeError: rb_raise(rb_eRuntimeError, getErrorMessage(env).c_str()); break; default: RAWLOG_FATAL("Unknown runtime error in MethodResultJni class"); rb_raise(rb_eRuntimeError,"Unknown runtime error in MethodResultJni class"); } reset(env); return res; }