summaryrefslogtreecommitdiffstats
path: root/Android/src/com/mcserver/MCServerActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'Android/src/com/mcserver/MCServerActivity.java')
-rw-r--r--Android/src/com/mcserver/MCServerActivity.java265
1 files changed, 265 insertions, 0 deletions
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();
+ }
+
+}
+
+
+
+
+
+