From b6138129e668681d2c16146dea3d66b0ea2f0381 Mon Sep 17 00:00:00 2001 From: faketruth Date: Sat, 18 Aug 2012 21:00:51 +0000 Subject: Android: I'm probably using a lot of bad practices, but the app looks somewhat better now and polls the server status Android: Put quite some testing code in ToJava.h and app-android.cpp ... I still can't send log messages to Java. The issue is threads, I can't use JNI stuff from threads that were not created by Java (at least not easily) git-svn-id: http://mc-server.googlecode.com/svn/trunk@752 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- jni/app-android.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 6 deletions(-) (limited to 'jni/app-android.cpp') diff --git a/jni/app-android.cpp b/jni/app-android.cpp index 461f433bf..a6fb1baf2 100644 --- a/jni/app-android.cpp +++ b/jni/app-android.cpp @@ -21,16 +21,52 @@ cCriticalSection g_CriticalSection; JNIEnv* g_CurrentJNIEnv = 0; jobject g_JavaThread = 0; +JavaVM* g_JavaVM = 0; //jobject g_JavaActivity = 0; cRoot * pRoot = NULL; - - +class cMainThread : + public cIsThread +{ +public: + cMainThread() : + cIsThread("cMainThread") + { + //Start(); + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "cMainThread"); + } + + void Stop(void) + { + m_ShouldTerminate = true; + Wait(); + } + +protected: + + virtual void Execute(void) override + { + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Execute"); + pRoot = new cRoot(); + pRoot->Start(); + delete pRoot; + } + +} ; + +cMainThread * pMainThread = NULL; + +jint JNI_OnLoad(JavaVM* vm, void* reserved) +{ + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "JNI_OnLoad JNI_OnLoad JNI_OnLoad JNI_OnLoad"); + g_JavaVM = vm; + return JNI_VERSION_1_4; +} /* Called when program/activity is created */ -extern "C" void Java_com_mcserver_MainThread_NativeOnCreate( JNIEnv* env, jobject thiz ) +extern "C" void Java_com_mcserver_MCServerActivity_NativeOnCreate( JNIEnv* env, jobject thiz ) { g_CriticalSection.Lock(); g_CurrentJNIEnv = env; @@ -44,25 +80,40 @@ extern "C" void Java_com_mcserver_MainThread_NativeOnCreate( JNIEnv* env, jobje mkdir("/sdcard/mcserver", S_IRWXU | S_IRWXG | S_IRWXO); +// __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Before mainthread"); +// pMainThread = new cMainThread(); +// pMainThread->Start(); +// __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "AFter mainthread"); + pRoot = new cRoot(); pRoot->Start(); - delete pRoot; + delete pRoot; pRoot = NULL; } -extern "C" void Java_com_mcserver_MainThread_NativeCleanUp( JNIEnv* env, jobject thiz ) +extern "C" void Java_com_mcserver_MCServerActivity_NativeCleanUp( JNIEnv* env, jobject thiz ) { g_CriticalSection.Lock(); g_CurrentJNIEnv = env; g_JavaThread = thiz; g_CriticalSection.Unlock(); - pRoot->ServerCommand("stop"); + __android_log_print(ANDROID_LOG_ERROR,"MCServer", "pRoot: %p", pRoot); + if( pRoot != NULL ) + { + pRoot->ServerCommand("stop"); + } +// pMainThread->Stop(); +// delete pMainThread; pMainThread = NULL; } +extern "C" jboolean Java_com_mcserver_MCServerActivity_NativeIsServerRunning( JNIEnv* env, jobject thiz ) +{ + return pRoot != NULL; +} \ No newline at end of file -- cgit v1.2.3