diff options
Diffstat (limited to 'Android')
-rw-r--r-- | Android/.classpath | 8 | ||||
-rw-r--r-- | Android/.project | 33 | ||||
-rw-r--r-- | Android/.settings/org.eclipse.jdt.core.prefs | 4 | ||||
-rw-r--r-- | Android/AndroidManifest.xml | 27 | ||||
-rw-r--r-- | Android/jni/Android.mk | 44 | ||||
-rw-r--r-- | Android/jni/Application.mk | 4 | ||||
-rw-r--r-- | Android/jni/ToJava.cpp | 3 | ||||
-rw-r--r-- | Android/jni/ToJava.h | 59 | ||||
-rw-r--r-- | Android/jni/app-android.cpp | 119 | ||||
-rw-r--r-- | Android/proguard-project.txt | 20 | ||||
-rw-r--r-- | Android/project.properties | 14 | ||||
-rw-r--r-- | Android/res/drawable-hdpi/ic_launcher.png | bin | 0 -> 9397 bytes | |||
-rw-r--r-- | Android/res/drawable-ldpi/ic_launcher.png | bin | 0 -> 2729 bytes | |||
-rw-r--r-- | Android/res/drawable-mdpi/ic_launcher.png | bin | 0 -> 5237 bytes | |||
-rw-r--r-- | Android/res/drawable-xhdpi/ic_launcher.png | bin | 0 -> 14383 bytes | |||
-rw-r--r-- | Android/res/layout/main.xml | 46 | ||||
-rw-r--r-- | Android/res/values/strings.xml | 12 | ||||
-rw-r--r-- | Android/src/com/mcserver/MCServerActivity.java | 265 |
18 files changed, 658 insertions, 0 deletions
diff --git a/Android/.classpath b/Android/.classpath new file mode 100644 index 000000000..a4f1e4054 --- /dev/null +++ b/Android/.classpath @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="gen"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/Android/.project b/Android/.project new file mode 100644 index 000000000..34dd17184 --- /dev/null +++ b/Android/.project @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>MCServer</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.android.ide.eclipse.adt.ApkBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/Android/.settings/org.eclipse.jdt.core.prefs b/Android/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..da5d06089 --- /dev/null +++ b/Android/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/Android/AndroidManifest.xml b/Android/AndroidManifest.xml new file mode 100644 index 000000000..d59d6e054 --- /dev/null +++ b/Android/AndroidManifest.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.mcserver"
+ android:versionCode="1"
+ android:versionName="1.0" >
+
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.READ_LOGS"/>
+
+ <uses-sdk android:minSdkVersion="10" />
+
+ <application
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name" >
+ <activity
+ android:name=".MCServerActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest>
\ No newline at end of file diff --git a/Android/jni/Android.mk b/Android/jni/Android.mk new file mode 100644 index 000000000..6fd8d3a14 --- /dev/null +++ b/Android/jni/Android.mk @@ -0,0 +1,44 @@ +LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := mcserver
+
+
+
+LOCAL_SRC_FILES := $(shell find ../lua-5.1.4 ../jsoncpp-src-0.5.0 ../zlib-1.2.7 ../source ../squirrel_3_0_1_stable ../tolua++-1.0.93 ../iniFile ../WebServer '(' -name '*.cpp' -o -name '*.c' ')')
+LOCAL_SRC_FILES := $(filter-out %SquirrelFunctions.cpp %SquirrelBindings.cpp %cPlugin_Squirrel.cpp %cSquirrelCommandBinder.cpp %minigzip.c %lua.c %tolua.c %toluabind.c %LeakFinder.cpp %StackWalker.cpp %example.c,$(LOCAL_SRC_FILES))
+LOCAL_SRC_FILES := $(patsubst %.cpp,../%.cpp,$(LOCAL_SRC_FILES))
+LOCAL_SRC_FILES := $(patsubst %.c,../%.c,$(LOCAL_SRC_FILES))
+LOCAL_SRC_FILES += app-android.cpp ToJava.cpp
+
+LOCAL_CFLAGS := -DANDROID_NDK \
+ -ffast-math \
+ -O3 \
+ -funroll-loops \
+ -mfloat-abi=softfp -mfpu=neon \
+
+
+LOCAL_STATIC_LIBRARIES := cpufeatures
+
+LOCAL_C_INCLUDES := ../source \
+ ../source/md5 \
+ ../WebServer \
+ ../source/packets \
+ ../source/items \
+ ../source/blocks \
+ ../tolua++-1.0.93/src/lib \
+ ../lua-5.1.4/src \
+ ../zlib-1.2.7 \
+ ../iniFile \
+ ../tolua++-1.0.93/include \
+ ../jsoncpp-src-0.5.0/include \
+ ../jsoncpp-src-0.5.0/src/lib_json \
+ ../squirrel_3_0_1_stable/include \
+ ../squirrel_3_0_1_stable \
+ ../squirrel_3_0_1_stable/sqrat \
+
+
+LOCAL_LDLIBS := -ldl -llog
+
+include $(BUILD_SHARED_LIBRARY)
+$(call import-module,cpufeatures)
diff --git a/Android/jni/Application.mk b/Android/jni/Application.mk new file mode 100644 index 000000000..c68dfe204 --- /dev/null +++ b/Android/jni/Application.mk @@ -0,0 +1,4 @@ +# Build both ARMv5TE and ARMv7-A machine code. +APP_MODULES := mcserver +# APP_ABI := armeabi armeabi-v7a +APP_STL := stlport_static
\ No newline at end of file diff --git a/Android/jni/ToJava.cpp b/Android/jni/ToJava.cpp new file mode 100644 index 000000000..10d4e84a0 --- /dev/null +++ b/Android/jni/ToJava.cpp @@ -0,0 +1,3 @@ +#include "Globals.h"
+
+#include "ToJava.h"
\ No newline at end of file diff --git a/Android/jni/ToJava.h b/Android/jni/ToJava.h new file mode 100644 index 000000000..bc10f01e3 --- /dev/null +++ b/Android/jni/ToJava.h @@ -0,0 +1,59 @@ +#pragma once
+
+#include <jni.h>
+#include <android/log.h>
+extern JNIEnv* g_CurrentJNIEnv;
+extern JavaVM* g_JavaVM;
+extern jobject g_JavaThread;
+//extern jobject g_JavaActivity;
+
+//__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList);
+
+static void CallJavaFunction_Void_String( jobject a_Object, const std::string & a_FunctionName, const std::string & a_StringParam )
+{
+ JNIEnv * oldEnv = g_CurrentJNIEnv;
+ int status = g_JavaVM->AttachCurrentThread(&g_CurrentJNIEnv, NULL);
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "STATUS: %i old: %p new: %p", status, oldEnv, g_CurrentJNIEnv );
+ jstring str = g_CurrentJNIEnv->NewStringUTF( a_StringParam.c_str() );
+
+
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
+ jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
+ jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "(Ljava/lang/String;)V"); // void a_FunctionName( String )
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
+ if (mid != 0)
+ {
+
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
+ g_CurrentJNIEnv->CallVoidMethod( a_Object, mid, str );
+ }
+ else
+ {
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
+ }
+
+ if( oldEnv != g_CurrentJNIEnv )
+ {
+ g_JavaVM->DetachCurrentThread();
+ }
+}
+
+
+static void CallJavaFunction_Void_Void( jobject a_Object, const std::string & a_FunctionName )
+{
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
+ jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
+ jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "()V"); // void a_FunctionName( String )
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
+ if (mid != 0)
+ {
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
+ g_CurrentJNIEnv->CallVoidMethod( a_Object, mid );
+ }
+ else
+ {
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
+ }
+}
\ No newline at end of file diff --git a/Android/jni/app-android.cpp b/Android/jni/app-android.cpp new file mode 100644 index 000000000..a6fb1baf2 --- /dev/null +++ b/Android/jni/app-android.cpp @@ -0,0 +1,119 @@ +#include "Globals.h"
+
+#include <jni.h>
+#include <sys/time.h>
+#include <time.h>
+#include <stdint.h>
+
+#include <stdlib.h>
+#include <math.h>
+#include <float.h>
+#include <assert.h>
+
+#include "cCriticalSection.h"
+#include "cRoot.h"
+#include "cMakeDir.h"
+#include "ToJava.h"
+
+#include <android/log.h>
+
+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_MCServerActivity_NativeOnCreate( JNIEnv* env, jobject thiz )
+{
+ g_CriticalSection.Lock();
+ g_CurrentJNIEnv = env;
+ g_JavaThread = thiz;
+ //if( !cLogger::GetSingletonPtr() ) new cLogger();
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Logging from C++!");
+ g_CriticalSection.Unlock();
+
+ //CallJavaFunction_Void_Void(g_JavaActivity, "TestTest" );
+ //CallJavaFunction_Void_String(g_JavaThread, "AddToLog", "herpderpderp!!" );
+
+ 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; pRoot = NULL;
+}
+
+
+
+
+
+extern "C" void Java_com_mcserver_MCServerActivity_NativeCleanUp( JNIEnv* env, jobject thiz )
+{
+ g_CriticalSection.Lock();
+ g_CurrentJNIEnv = env;
+ g_JavaThread = thiz;
+ g_CriticalSection.Unlock();
+
+ __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 diff --git a/Android/proguard-project.txt b/Android/proguard-project.txt new file mode 100644 index 000000000..f2fe1559a --- /dev/null +++ b/Android/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/Android/project.properties b/Android/project.properties new file mode 100644 index 000000000..7a6518b77 --- /dev/null +++ b/Android/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt + +# Project target. +target=android-12 diff --git a/Android/res/drawable-hdpi/ic_launcher.png b/Android/res/drawable-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..96a442e5b --- /dev/null +++ b/Android/res/drawable-hdpi/ic_launcher.png diff --git a/Android/res/drawable-ldpi/ic_launcher.png b/Android/res/drawable-ldpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..99238729d --- /dev/null +++ b/Android/res/drawable-ldpi/ic_launcher.png diff --git a/Android/res/drawable-mdpi/ic_launcher.png b/Android/res/drawable-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..359047dfa --- /dev/null +++ b/Android/res/drawable-mdpi/ic_launcher.png diff --git a/Android/res/drawable-xhdpi/ic_launcher.png b/Android/res/drawable-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 000000000..71c6d760f --- /dev/null +++ b/Android/res/drawable-xhdpi/ic_launcher.png diff --git a/Android/res/layout/main.xml b/Android/res/layout/main.xml new file mode 100644 index 000000000..dd5ee0e8f --- /dev/null +++ b/Android/res/layout/main.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:gravity="center_horizontal"
+ android:orientation="vertical" >
+
+ <TextView
+ android:id="@+id/textView2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/app_name"
+ android:textAppearance="?android:attr/textAppearanceLarge" />
+
+ <Button
+ android:id="@+id/start_server"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/start" />
+
+ <Button
+ android:id="@+id/stop_server"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:enabled="true"
+ android:text="@string/stop" />
+
+ <TextView
+ android:id="@+id/server_status_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/mcserver_is_not_running"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ android:id="@+id/ip_address"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/your_ip" />
+ <ListView
+ android:id="@+id/listView1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ </ListView>
+
+</LinearLayout>
\ No newline at end of file diff --git a/Android/res/values/strings.xml b/Android/res/values/strings.xml new file mode 100644 index 000000000..9fce753a4 --- /dev/null +++ b/Android/res/values/strings.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="hello">Hello World, MCServerActivity!</string>
+ <string name="app_name">MCServer</string> + <string name="start">Start</string> + <string name="stop">Stop</string> + <string name="mcserver_is_running">MCServer is running</string> + <string name="mcserver_is_not_running">MCServer is not running</string> + <string name="your_ip">Your IP …</string>
+
+</resources>
\ No newline at end of file diff --git a/Android/src/com/mcserver/MCServerActivity.java b/Android/src/com/mcserver/MCServerActivity.java new file mode 100644 index 000000000..0a686c882 --- /dev/null +++ b/Android/src/com/mcserver/MCServerActivity.java @@ -0,0 +1,265 @@ +package com.mcserver; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; + +import android.app.Activity; +import android.graphics.Color; +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.TextView; + +public class MCServerActivity extends Activity { + MainThread mThread = null; + Thread ServerStatusThread = null; + boolean mbExiting = false; + boolean mbEnabledLogging = false; + + ArrayList<String> mLogList = new ArrayList<String>(); + ArrayAdapter<String> mAdapter; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + Log.e("MCServer", "p id: " + android.os.Process.myPid() ); + + + ((Button)findViewById(R.id.start_server)).setOnClickListener( new View.OnClickListener() { + public void onClick(View v) { + mbEnabledLogging = true; + if( mThread == null || mThread.isAlive() == false ) { + mThread = new MainThread( (MCServerActivity)v.getContext() ); + mThread.start(); + } + } + }); + + ((Button)findViewById(R.id.stop_server)).setOnClickListener( new View.OnClickListener() { + public void onClick(View v) { + mbEnabledLogging = true; + NativeCleanUp(); + } + }); + + + + ListView lv = (ListView)this.findViewById(R.id.listView1); + mAdapter = new ArrayAdapter<String>(this, + R.layout.list_item, + mLogList); + lv.setAdapter(mAdapter); + + + mLogList.add("---- LOG ----"); + + ServerStatusThread = new Thread( new Runnable() { + public void run() { + for(;;) + { + try { + runOnUiThread( new Runnable() { + public void run() { + UpdateServerStatus(); + } + }); + Thread.sleep(1000); + } catch (InterruptedException e) { + } + } + } + }); + ServerStatusThread.start(); + + + + + + + + Thread loggerThread = new Thread( new Runnable() { + public void run() { + Process process = null; + + try { + process = Runtime.getRuntime().exec("logcat -v raw *:s MCServer ");// Verbose filter + } catch (IOException e) { + } + + BufferedReader reader = null; + + try { + InputStreamReader isr = new InputStreamReader(process.getInputStream()); + reader = new BufferedReader( isr ); + + String line; + + while( mbExiting == false ) { + line = reader.readLine(); + if( mbEnabledLogging == true && line != null ) + { + AddToLog( line ); + } + } + + Log.i("MCServer", "Prepping thread for termination"); + reader.close(); + process.destroy(); + process = null; + reader = null; + } catch (IOException e) { + } + } + }); + loggerThread.start(); + + + + + + + ((TextView)findViewById(R.id.ip_address)).setText("Connect to: " + getLocalIpAddress()); + } + + + + public String getLocalIpAddress() { + try { + for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { + NetworkInterface intf = en.nextElement(); + for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { + InetAddress inetAddress = enumIpAddr.nextElement(); + if (!inetAddress.isLoopbackAddress()) { + return inetAddress.getHostAddress().toString(); + } + } + } + } catch (SocketException ex) { + Log.e("MCServer", ex.toString()); + } + return null; + } + + + + public void UpdateServerStatus() + { + if( NativeIsServerRunning() ) { + ((TextView)findViewById(R.id.server_status_text)).setText(R.string.mcserver_is_running); + ((TextView)findViewById(R.id.server_status_text)).setTextColor(Color.GREEN); + ((Button)findViewById(R.id.stop_server)).setEnabled(true); + ((Button)findViewById(R.id.start_server)).setEnabled(false); + } else { + ((TextView)findViewById(R.id.server_status_text)).setText(R.string.mcserver_is_not_running); + ((TextView)findViewById(R.id.server_status_text)).setTextColor(Color.RED); + ((Button)findViewById(R.id.stop_server)).setEnabled(false); + ((Button)findViewById(R.id.start_server)).setEnabled(true); + } + } + + + + + + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode==KeyEvent.KEYCODE_BACK) + { + //android.os.Process.killProcess(android.os.Process.myPid()); + NativeCleanUp(); + return super.onKeyDown(keyCode, event); + } + return false; + } + + + + + public void onDestroy() { + mbExiting = true; + super.onDestroy(); + } + + + + + + public void AddToLog( final String logMessage ) { + final ListView lv = ((ListView)findViewById(R.id.listView1)); + lv.post(new Runnable() { + public void run() { + //final boolean bAutoscroll = lv.getLastVisiblePosition() >= mAdapter.getCount() - 1 ? true : false; + + mLogList.add(logMessage); + while( mLogList.size() > 100 ) // only allow 100 messages in the list, otherwise it might slow the GUI down + { + mLogList.remove(0); + } + mAdapter.notifyDataSetChanged(); + + + // Autoscroll detection is dodgy + //if( bAutoscroll ) + { + lv.setSelection(mAdapter.getCount() - 1); + } + } + }); + } + + + + + + public void Testtt() + { + //Log.d("MCServer", "in Testtt"); + } + + + + + + static { + System.loadLibrary("mcserver"); + } + + + public native void NativeOnCreate(); + public native void NativeCleanUp(); + public native boolean NativeIsServerRunning(); + +} + + +class MainThread extends Thread { + MCServerActivity mContext = null; + int numlogs = 0; + + MainThread( MCServerActivity aContext ) { + mContext = aContext; + } + + public void run() { + mContext.NativeOnCreate(); + } + +} + + + + + + |