Changed everyting to Unix line endings.
This commit is contained in:
@@ -1,8 +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>
|
||||
<?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>
|
||||
|
||||
@@ -1,33 +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>
|
||||
<?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>
|
||||
|
||||
@@ -1,4 +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
|
||||
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
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.mcserver"
|
||||
android:versionCode="3"
|
||||
android:versionName="r1375" >
|
||||
|
||||
<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>
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.mcserver"
|
||||
android:versionCode="3"
|
||||
android:versionName="r1375" >
|
||||
|
||||
<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>
|
||||
@@ -1,2 +1,2 @@
|
||||
Put all pre-packaged plugins in here such as Core.
|
||||
Put all pre-packaged plugins in here such as Core.
|
||||
The user will be able to install each plugin in here separately.
|
||||
@@ -1,10 +1,10 @@
|
||||
Put all pre-packaged settings/preferences and license files in here.
|
||||
Such as:
|
||||
|
||||
settings.example.ini
|
||||
groups.example.ini
|
||||
users.example.ini
|
||||
webadmin.example.ini
|
||||
Lua-LICENSE.txt
|
||||
MersenneTwister-LICENSE.txt
|
||||
Put all pre-packaged settings/preferences and license files in here.
|
||||
Such as:
|
||||
|
||||
settings.example.ini
|
||||
groups.example.ini
|
||||
users.example.ini
|
||||
webadmin.example.ini
|
||||
Lua-LICENSE.txt
|
||||
MersenneTwister-LICENSE.txt
|
||||
etc.etc
|
||||
@@ -1,39 +1,39 @@
|
||||
/* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*
|
||||
* This class was automatically generated by the
|
||||
* aapt tool from the resource data it found. It
|
||||
* should not be modified by hand.
|
||||
*/
|
||||
|
||||
package com.mcserver;
|
||||
|
||||
public final class R {
|
||||
public static final class attr {
|
||||
}
|
||||
public static final class drawable {
|
||||
public static final int ic_launcher=0x7f020000;
|
||||
}
|
||||
public static final class id {
|
||||
public static final int configure_server=0x7f050003;
|
||||
public static final int ip_address=0x7f050005;
|
||||
public static final int listView1=0x7f050006;
|
||||
public static final int server_status_text=0x7f050004;
|
||||
public static final int start_server=0x7f050002;
|
||||
public static final int stop_server=0x7f050001;
|
||||
public static final int textView2=0x7f050000;
|
||||
}
|
||||
public static final class layout {
|
||||
public static final int list_item=0x7f030000;
|
||||
public static final int main=0x7f030001;
|
||||
}
|
||||
public static final class string {
|
||||
public static final int app_name=0x7f040001;
|
||||
public static final int configure=0x7f040007;
|
||||
public static final int hello=0x7f040000;
|
||||
public static final int mcserver_is_not_running=0x7f040005;
|
||||
public static final int mcserver_is_running=0x7f040004;
|
||||
public static final int start=0x7f040002;
|
||||
public static final int stop=0x7f040003;
|
||||
public static final int your_ip=0x7f040006;
|
||||
}
|
||||
}
|
||||
/* AUTO-GENERATED FILE. DO NOT MODIFY.
|
||||
*
|
||||
* This class was automatically generated by the
|
||||
* aapt tool from the resource data it found. It
|
||||
* should not be modified by hand.
|
||||
*/
|
||||
|
||||
package com.mcserver;
|
||||
|
||||
public final class R {
|
||||
public static final class attr {
|
||||
}
|
||||
public static final class drawable {
|
||||
public static final int ic_launcher=0x7f020000;
|
||||
}
|
||||
public static final class id {
|
||||
public static final int configure_server=0x7f050003;
|
||||
public static final int ip_address=0x7f050005;
|
||||
public static final int listView1=0x7f050006;
|
||||
public static final int server_status_text=0x7f050004;
|
||||
public static final int start_server=0x7f050002;
|
||||
public static final int stop_server=0x7f050001;
|
||||
public static final int textView2=0x7f050000;
|
||||
}
|
||||
public static final class layout {
|
||||
public static final int list_item=0x7f030000;
|
||||
public static final int main=0x7f030001;
|
||||
}
|
||||
public static final class string {
|
||||
public static final int app_name=0x7f040001;
|
||||
public static final int configure=0x7f040007;
|
||||
public static final int hello=0x7f040000;
|
||||
public static final int mcserver_is_not_running=0x7f040005;
|
||||
public static final int mcserver_is_running=0x7f040004;
|
||||
public static final int start=0x7f040002;
|
||||
public static final int stop=0x7f040003;
|
||||
public static final int your_ip=0x7f040006;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := mcserver
|
||||
|
||||
|
||||
|
||||
LOCAL_SRC_FILES := $(shell find ../CryptoPP ../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 ../expat '(' -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 \
|
||||
-O3 \
|
||||
-funroll-loops \
|
||||
-mfloat-abi=softfp -mfpu=neon \
|
||||
-fexceptions \
|
||||
|
||||
|
||||
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 \
|
||||
../expat/ \
|
||||
.. \
|
||||
|
||||
|
||||
LOCAL_LDLIBS := -ldl -llog
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
$(call import-module,cpufeatures)
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := mcserver
|
||||
|
||||
|
||||
|
||||
LOCAL_SRC_FILES := $(shell find ../CryptoPP ../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 ../expat '(' -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 \
|
||||
-O3 \
|
||||
-funroll-loops \
|
||||
-mfloat-abi=softfp -mfpu=neon \
|
||||
-fexceptions \
|
||||
|
||||
|
||||
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 \
|
||||
../expat/ \
|
||||
.. \
|
||||
|
||||
|
||||
LOCAL_LDLIBS := -ldl -llog
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
$(call import-module,cpufeatures)
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#include "Globals.h"
|
||||
|
||||
#include "Globals.h"
|
||||
|
||||
#include "ToJava.h"
|
||||
@@ -1,59 +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" );
|
||||
}
|
||||
#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" );
|
||||
}
|
||||
}
|
||||
@@ -1,130 +1,130 @@
|
||||
#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 "OSSupport/CriticalSection.h"
|
||||
#include "OSSupport/MakeDir.h"
|
||||
#include "ToJava.h"
|
||||
|
||||
#include "Root.h"
|
||||
#include "WebAdmin.h"
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
#ifdef _WIN32 // For IntelliSense parsing
|
||||
typedef void jobject;
|
||||
typedef int jint;
|
||||
typedef bool jboolean;
|
||||
typedef void JavaVM;
|
||||
typedef void JNIEnv;
|
||||
#endif
|
||||
|
||||
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;
|
||||
//__android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Logging from C++!");
|
||||
g_CriticalSection.Unlock();
|
||||
|
||||
mkdir("/sdcard/mcserver", S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
|
||||
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->ExecuteConsoleCommand("stop");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern "C" jboolean Java_com_mcserver_MCServerActivity_NativeIsServerRunning( JNIEnv* env, jobject thiz )
|
||||
{
|
||||
return pRoot != NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern "C" jint Java_com_mcserver_MCServerActivity_NativeGetWebAdminPort( JNIEnv* env, jobject thiz )
|
||||
{
|
||||
if( pRoot != NULL && pRoot->GetWebAdmin() != NULL )
|
||||
{
|
||||
return pRoot->GetWebAdmin()->GetPort();
|
||||
}
|
||||
return 0;
|
||||
#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 "OSSupport/CriticalSection.h"
|
||||
#include "OSSupport/MakeDir.h"
|
||||
#include "ToJava.h"
|
||||
|
||||
#include "Root.h"
|
||||
#include "WebAdmin.h"
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
#ifdef _WIN32 // For IntelliSense parsing
|
||||
typedef void jobject;
|
||||
typedef int jint;
|
||||
typedef bool jboolean;
|
||||
typedef void JavaVM;
|
||||
typedef void JNIEnv;
|
||||
#endif
|
||||
|
||||
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;
|
||||
//__android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Logging from C++!");
|
||||
g_CriticalSection.Unlock();
|
||||
|
||||
mkdir("/sdcard/mcserver", S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
|
||||
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->ExecuteConsoleCommand("stop");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern "C" jboolean Java_com_mcserver_MCServerActivity_NativeIsServerRunning( JNIEnv* env, jobject thiz )
|
||||
{
|
||||
return pRoot != NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern "C" jint Java_com_mcserver_MCServerActivity_NativeGetWebAdminPort( JNIEnv* env, jobject thiz )
|
||||
{
|
||||
if( pRoot != NULL && pRoot->GetWebAdmin() != NULL )
|
||||
{
|
||||
return pRoot->GetWebAdmin()->GetPort();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1,61 +1,61 @@
|
||||
<?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" >
|
||||
<?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" />
|
||||
|
||||
<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" />
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
<Button
|
||||
android:id="@+id/stop_server"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:enabled="true"
|
||||
android:text="@string/stop" />
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/start_server"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/stop_server"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:enabled="true"
|
||||
android:text="@string/stop" />
|
||||
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/start_server"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/start" />
|
||||
|
||||
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/configure_server"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/configure" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<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:text="@string/start" />
|
||||
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/configure_server"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/configure" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<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"
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="hello">Hello World, MCServerActivity!</string>
|
||||
<?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>
|
||||
<string name="configure">Configure</string>
|
||||
|
||||
<string name="your_ip">Your IP …</string>
|
||||
<string name="configure">Configure</string>
|
||||
|
||||
</resources>
|
||||
@@ -1,432 +1,432 @@
|
||||
package com.mcserver;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.res.AssetManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
public class MCServerInstaller {
|
||||
private MCServerActivity mContext;
|
||||
final private String BaseDirectory = "basedir";
|
||||
final private String PluginDirectory = "Plugins";
|
||||
|
||||
final public String SHARED_PREFS_NAME = "MCSERVER_PREFS";
|
||||
final public String PREF_IS_INSTALLED = "IS_INSTALLED";
|
||||
final public String PREF_LAST_VERSION = "LAST_VERSION";
|
||||
private SharedPreferences mSettings = null;
|
||||
|
||||
int thisVersion;
|
||||
|
||||
MCServerInstaller( MCServerActivity activity )
|
||||
{
|
||||
mContext = activity;
|
||||
|
||||
mSettings = mContext.getSharedPreferences( SHARED_PREFS_NAME, 0);
|
||||
|
||||
try {
|
||||
this.thisVersion = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode;
|
||||
} catch (NameNotFoundException e) {
|
||||
Log.e("MCServer", "Could not read version code from manifest!");
|
||||
e.printStackTrace();
|
||||
this.thisVersion = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean IsInstalled()
|
||||
{
|
||||
return mSettings.getBoolean(PREF_IS_INSTALLED, false);
|
||||
}
|
||||
|
||||
|
||||
public boolean NeedsUpdate()
|
||||
{
|
||||
Log.i("MCServer", "thisVersion: " + this.thisVersion + " pref: " + mSettings.getInt(PREF_LAST_VERSION, 0));
|
||||
return mSettings.getInt(PREF_LAST_VERSION, 0) != this.thisVersion;
|
||||
}
|
||||
|
||||
|
||||
public ArrayList<String> FindFoldersInPath(String path)
|
||||
{
|
||||
ArrayList<String> allFolders = new ArrayList<String>();
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] allPlugins = am.list(path);
|
||||
for(String pluginName : allPlugins)
|
||||
{
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(path + "/" + pluginName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
// It seems to be a folder :D
|
||||
allFolders.add(pluginName);
|
||||
continue;
|
||||
}
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return allFolders;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void ExpandAssets( String path )
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] getAssets = am.list(path);
|
||||
for(String assetName : getAssets)
|
||||
{
|
||||
//Log.e("MCServer", path + "/" + imgName);
|
||||
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(path + "/" + assetName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
//Log.e("MCServer", "Could not open" + path + "/" + imgName );
|
||||
ExpandAssets(path + "/" + assetName);
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + path + "/" + assetName;
|
||||
//Log.e("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ShowFirstRunDialog()
|
||||
{
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
|
||||
//builder.setTitle("blaa");
|
||||
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
builder.setMessage("It seems this is the first time you are running MCServer on your Android device or it has been updated! This app comes with a couple of pre-packaged plugins, please take a moment to select the plugins you would like to install.");
|
||||
builder.setCancelable(false);
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
dialog.setOnDismissListener( new DialogInterface.OnDismissListener(){
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
ShowPluginInstallDialog(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void ShowPluginInstallDialog(boolean bCancelable)
|
||||
{
|
||||
final ArrayList<String> allPlugins = FindFoldersInPath( BaseDirectory + "/" + PluginDirectory );
|
||||
final CharSequence[] items = allPlugins.toArray(new CharSequence[allPlugins.size()]);
|
||||
final boolean[] selected = new boolean[items.length];
|
||||
for( int i = 0; i < items.length; ++i )
|
||||
{
|
||||
if( items[i].toString().contains("Core") )
|
||||
{ // Select the core plugin by default
|
||||
selected[i] = true;
|
||||
items[i] = items[i] + " (Recommended)";
|
||||
}
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
|
||||
builder.setTitle("Plugins to install");
|
||||
builder.setCancelable(bCancelable);
|
||||
builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
|
||||
selected[which] = isChecked;
|
||||
}
|
||||
});
|
||||
builder.setPositiveButton("Install", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
ArrayList<String> toInstall = new ArrayList<String>();
|
||||
for( int i = 0; i < selected.length; ++i )
|
||||
{
|
||||
if( selected[i] )
|
||||
{
|
||||
toInstall.add(allPlugins.get(i));
|
||||
}
|
||||
}
|
||||
InstallPlugins(toInstall);
|
||||
}
|
||||
});
|
||||
|
||||
AlertDialog dialog2 = builder.create();
|
||||
dialog2.show();
|
||||
}
|
||||
|
||||
|
||||
void InstallPlugins( final ArrayList<String> plugins )
|
||||
{
|
||||
new AsyncTask<Void, Integer, Boolean>()
|
||||
{
|
||||
ProgressDialog progressDialog;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute()
|
||||
{
|
||||
/*
|
||||
* This is executed on UI thread before doInBackground(). It is
|
||||
* the perfect place to show the progress dialog.
|
||||
*/
|
||||
progressDialog = ProgressDialog.show(mContext, "", "Installing...");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... params)
|
||||
{
|
||||
if (params == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
/*
|
||||
* This is run on a background thread, so we can sleep here
|
||||
* or do whatever we want without blocking UI thread. A more
|
||||
* advanced use would download chunks of fixed size and call
|
||||
* publishProgress();
|
||||
*/
|
||||
for( int i = 0; i < plugins.size(); ++i )
|
||||
{
|
||||
this.publishProgress((int)(i / (float)plugins.size() * 100), i);
|
||||
InstallSinglePlugin(PluginDirectory + "/" + plugins.get(i));
|
||||
}
|
||||
|
||||
this.publishProgress( 100, -1 );
|
||||
InstallExampleSettings();
|
||||
|
||||
this.publishProgress( 100, -2 );
|
||||
InstallWebAdmin();
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.e("tag", e.getMessage());
|
||||
/*
|
||||
* The task failed
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* The task succeeded
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void onProgressUpdate(Integer... progress)
|
||||
{
|
||||
progressDialog.setProgress(progress[0]);
|
||||
if( progress[1] > -1 )
|
||||
{
|
||||
progressDialog.setMessage("Installing " + plugins.get(progress[1]) + "..." );
|
||||
}
|
||||
else if( progress[1] == -1 )
|
||||
{
|
||||
progressDialog.setMessage("Installing default settings...");
|
||||
}
|
||||
else if( progress[1] == -2 )
|
||||
{
|
||||
progressDialog.setMessage("Installing WebAdmin...");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result)
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
/*
|
||||
* Update here your view objects with content from download. It
|
||||
* is save to dismiss dialogs, update views, etc., since we are
|
||||
* working on UI thread.
|
||||
*/
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(mContext);
|
||||
b.setTitle(android.R.string.dialog_alert_title);
|
||||
if (result)
|
||||
{
|
||||
b.setMessage("Install succeeded");
|
||||
|
||||
SharedPreferences.Editor editor = mSettings.edit();
|
||||
editor.putBoolean(PREF_IS_INSTALLED, true);
|
||||
editor.putInt(PREF_LAST_VERSION, thisVersion);
|
||||
editor.commit();
|
||||
}
|
||||
else
|
||||
{
|
||||
b.setMessage("Install failed");
|
||||
}
|
||||
b.setPositiveButton(android.R.string.ok,
|
||||
new DialogInterface.OnClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
b.create().show();
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
|
||||
void InstallExampleSettings()
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] allFiles = am.list(BaseDirectory);
|
||||
for(String fileName : allFiles)
|
||||
{
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(BaseDirectory + "/" + fileName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
// Must be a folder :D
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + fileName;
|
||||
Log.i("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void InstallWebAdmin()
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] allFiles = am.list(BaseDirectory + "/webadmin");
|
||||
for(String fileName : allFiles)
|
||||
{
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(BaseDirectory + "/webadmin/" + fileName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
// Must be a folder :D
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/webadmin/" + fileName;
|
||||
Log.i("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void InstallSinglePlugin( String path )
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] getImages = am.list(BaseDirectory + "/" + path);
|
||||
for(String imgName : getImages)
|
||||
{
|
||||
Log.i("MCServer", path + "/" + imgName);
|
||||
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(BaseDirectory + "/" + path + "/" + imgName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
Log.i("MCServer", "Could not open" + path + "/" + imgName );
|
||||
InstallSinglePlugin(path + "/" + imgName);
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + path + "/" + imgName;
|
||||
Log.i("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
package com.mcserver;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.res.AssetManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
public class MCServerInstaller {
|
||||
private MCServerActivity mContext;
|
||||
final private String BaseDirectory = "basedir";
|
||||
final private String PluginDirectory = "Plugins";
|
||||
|
||||
final public String SHARED_PREFS_NAME = "MCSERVER_PREFS";
|
||||
final public String PREF_IS_INSTALLED = "IS_INSTALLED";
|
||||
final public String PREF_LAST_VERSION = "LAST_VERSION";
|
||||
private SharedPreferences mSettings = null;
|
||||
|
||||
int thisVersion;
|
||||
|
||||
MCServerInstaller( MCServerActivity activity )
|
||||
{
|
||||
mContext = activity;
|
||||
|
||||
mSettings = mContext.getSharedPreferences( SHARED_PREFS_NAME, 0);
|
||||
|
||||
try {
|
||||
this.thisVersion = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode;
|
||||
} catch (NameNotFoundException e) {
|
||||
Log.e("MCServer", "Could not read version code from manifest!");
|
||||
e.printStackTrace();
|
||||
this.thisVersion = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean IsInstalled()
|
||||
{
|
||||
return mSettings.getBoolean(PREF_IS_INSTALLED, false);
|
||||
}
|
||||
|
||||
|
||||
public boolean NeedsUpdate()
|
||||
{
|
||||
Log.i("MCServer", "thisVersion: " + this.thisVersion + " pref: " + mSettings.getInt(PREF_LAST_VERSION, 0));
|
||||
return mSettings.getInt(PREF_LAST_VERSION, 0) != this.thisVersion;
|
||||
}
|
||||
|
||||
|
||||
public ArrayList<String> FindFoldersInPath(String path)
|
||||
{
|
||||
ArrayList<String> allFolders = new ArrayList<String>();
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] allPlugins = am.list(path);
|
||||
for(String pluginName : allPlugins)
|
||||
{
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(path + "/" + pluginName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
// It seems to be a folder :D
|
||||
allFolders.add(pluginName);
|
||||
continue;
|
||||
}
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return allFolders;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void ExpandAssets( String path )
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] getAssets = am.list(path);
|
||||
for(String assetName : getAssets)
|
||||
{
|
||||
//Log.e("MCServer", path + "/" + imgName);
|
||||
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(path + "/" + assetName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
//Log.e("MCServer", "Could not open" + path + "/" + imgName );
|
||||
ExpandAssets(path + "/" + assetName);
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + path + "/" + assetName;
|
||||
//Log.e("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ShowFirstRunDialog()
|
||||
{
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
|
||||
//builder.setTitle("blaa");
|
||||
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
builder.setMessage("It seems this is the first time you are running MCServer on your Android device or it has been updated! This app comes with a couple of pre-packaged plugins, please take a moment to select the plugins you would like to install.");
|
||||
builder.setCancelable(false);
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
dialog.setOnDismissListener( new DialogInterface.OnDismissListener(){
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
ShowPluginInstallDialog(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void ShowPluginInstallDialog(boolean bCancelable)
|
||||
{
|
||||
final ArrayList<String> allPlugins = FindFoldersInPath( BaseDirectory + "/" + PluginDirectory );
|
||||
final CharSequence[] items = allPlugins.toArray(new CharSequence[allPlugins.size()]);
|
||||
final boolean[] selected = new boolean[items.length];
|
||||
for( int i = 0; i < items.length; ++i )
|
||||
{
|
||||
if( items[i].toString().contains("Core") )
|
||||
{ // Select the core plugin by default
|
||||
selected[i] = true;
|
||||
items[i] = items[i] + " (Recommended)";
|
||||
}
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
|
||||
builder.setTitle("Plugins to install");
|
||||
builder.setCancelable(bCancelable);
|
||||
builder.setMultiChoiceItems(items, selected, new DialogInterface.OnMultiChoiceClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
|
||||
selected[which] = isChecked;
|
||||
}
|
||||
});
|
||||
builder.setPositiveButton("Install", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
ArrayList<String> toInstall = new ArrayList<String>();
|
||||
for( int i = 0; i < selected.length; ++i )
|
||||
{
|
||||
if( selected[i] )
|
||||
{
|
||||
toInstall.add(allPlugins.get(i));
|
||||
}
|
||||
}
|
||||
InstallPlugins(toInstall);
|
||||
}
|
||||
});
|
||||
|
||||
AlertDialog dialog2 = builder.create();
|
||||
dialog2.show();
|
||||
}
|
||||
|
||||
|
||||
void InstallPlugins( final ArrayList<String> plugins )
|
||||
{
|
||||
new AsyncTask<Void, Integer, Boolean>()
|
||||
{
|
||||
ProgressDialog progressDialog;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute()
|
||||
{
|
||||
/*
|
||||
* This is executed on UI thread before doInBackground(). It is
|
||||
* the perfect place to show the progress dialog.
|
||||
*/
|
||||
progressDialog = ProgressDialog.show(mContext, "", "Installing...");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... params)
|
||||
{
|
||||
if (params == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
/*
|
||||
* This is run on a background thread, so we can sleep here
|
||||
* or do whatever we want without blocking UI thread. A more
|
||||
* advanced use would download chunks of fixed size and call
|
||||
* publishProgress();
|
||||
*/
|
||||
for( int i = 0; i < plugins.size(); ++i )
|
||||
{
|
||||
this.publishProgress((int)(i / (float)plugins.size() * 100), i);
|
||||
InstallSinglePlugin(PluginDirectory + "/" + plugins.get(i));
|
||||
}
|
||||
|
||||
this.publishProgress( 100, -1 );
|
||||
InstallExampleSettings();
|
||||
|
||||
this.publishProgress( 100, -2 );
|
||||
InstallWebAdmin();
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.e("tag", e.getMessage());
|
||||
/*
|
||||
* The task failed
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* The task succeeded
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void onProgressUpdate(Integer... progress)
|
||||
{
|
||||
progressDialog.setProgress(progress[0]);
|
||||
if( progress[1] > -1 )
|
||||
{
|
||||
progressDialog.setMessage("Installing " + plugins.get(progress[1]) + "..." );
|
||||
}
|
||||
else if( progress[1] == -1 )
|
||||
{
|
||||
progressDialog.setMessage("Installing default settings...");
|
||||
}
|
||||
else if( progress[1] == -2 )
|
||||
{
|
||||
progressDialog.setMessage("Installing WebAdmin...");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result)
|
||||
{
|
||||
progressDialog.dismiss();
|
||||
/*
|
||||
* Update here your view objects with content from download. It
|
||||
* is save to dismiss dialogs, update views, etc., since we are
|
||||
* working on UI thread.
|
||||
*/
|
||||
AlertDialog.Builder b = new AlertDialog.Builder(mContext);
|
||||
b.setTitle(android.R.string.dialog_alert_title);
|
||||
if (result)
|
||||
{
|
||||
b.setMessage("Install succeeded");
|
||||
|
||||
SharedPreferences.Editor editor = mSettings.edit();
|
||||
editor.putBoolean(PREF_IS_INSTALLED, true);
|
||||
editor.putInt(PREF_LAST_VERSION, thisVersion);
|
||||
editor.commit();
|
||||
}
|
||||
else
|
||||
{
|
||||
b.setMessage("Install failed");
|
||||
}
|
||||
b.setPositiveButton(android.R.string.ok,
|
||||
new DialogInterface.OnClickListener()
|
||||
{
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
b.create().show();
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
|
||||
void InstallExampleSettings()
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] allFiles = am.list(BaseDirectory);
|
||||
for(String fileName : allFiles)
|
||||
{
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(BaseDirectory + "/" + fileName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
// Must be a folder :D
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + fileName;
|
||||
Log.i("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void InstallWebAdmin()
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] allFiles = am.list(BaseDirectory + "/webadmin");
|
||||
for(String fileName : allFiles)
|
||||
{
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(BaseDirectory + "/webadmin/" + fileName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
// Must be a folder :D
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/webadmin/" + fileName;
|
||||
Log.i("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void InstallSinglePlugin( String path )
|
||||
{
|
||||
AssetManager am = mContext.getAssets();
|
||||
try {
|
||||
String[] getImages = am.list(BaseDirectory + "/" + path);
|
||||
for(String imgName : getImages)
|
||||
{
|
||||
Log.i("MCServer", path + "/" + imgName);
|
||||
|
||||
InputStream istr = null;
|
||||
try
|
||||
{
|
||||
istr = am.open(BaseDirectory + "/" + path + "/" + imgName);
|
||||
} catch( java.io.FileNotFoundException e ) {
|
||||
Log.i("MCServer", "Could not open" + path + "/" + imgName );
|
||||
InstallSinglePlugin(path + "/" + imgName);
|
||||
continue;
|
||||
}
|
||||
|
||||
String outPath = Environment.getExternalStorageDirectory().getPath() + "/mcserver/" + path + "/" + imgName;
|
||||
Log.i("MCServer", "outPath: " + outPath );
|
||||
File f = new File( outPath );
|
||||
|
||||
f.getParentFile().mkdirs();
|
||||
f.createNewFile();
|
||||
OutputStream ostr = new FileOutputStream(f);
|
||||
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length = istr.read(buffer))>0)
|
||||
{
|
||||
ostr.write(buffer, 0, length);
|
||||
}
|
||||
ostr.flush();
|
||||
ostr.close();
|
||||
istr.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user