project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/LobbyActivity.java
changeset 7328 cd919a2ead4e
child 7330 867e4fda496e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/LobbyActivity.java	Wed Jul 11 01:52:01 2012 +0200
@@ -0,0 +1,128 @@
+package org.hedgewars.hedgeroid.netplay;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Collections;
+
+import org.hedgewars.hedgeroid.R;
+import org.hedgewars.hedgeroid.Utils;
+import org.hedgewars.hedgeroid.R.layout;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.app.Activity;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+
+public class LobbyActivity extends Activity {
+	static {
+		System.loadLibrary("SDL_net");
+	}
+	static final JnaFrontlib FRONTLIB = (JnaFrontlib)Native.loadLibrary("frontlib", JnaFrontlib.class, Collections.singletonMap(Library.OPTION_TYPE_MAPPER, FrontlibTypeMapper.INSTANCE));
+	
+	TextView textView;
+	EditText editText;
+	Button button;
+	
+	boolean disconnected;
+	JnaFrontlib.NetconnPtr netconn;
+	CountDownTimer timer;
+	
+	private void commitText() {
+		if(!disconnected && netconn!=null) {
+			String text = editText.getText().toString();
+			editText.setText("");
+			textView.append("AndroidChatter: " + text + "\n");
+			FRONTLIB.flib_netconn_send_chat(netconn, text);
+		}
+	}
+	
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        disconnected = false;
+        setContentView(R.layout.activity_lobby);
+        textView = (TextView)findViewById(R.id.textbox);
+        editText = (EditText)findViewById(R.id.editText);
+        button = (Button)findViewById(R.id.lobbySendButton);
+        
+        button.setOnClickListener(new OnClickListener() {
+        	public void onClick(View v) {
+        		commitText();
+        	}
+        });
+        
+    	FRONTLIB.flib_init();
+    	try {
+    		JnaFrontlib.MetaschemePtr scheme = FRONTLIB.flib_metascheme_from_ini(new File(Utils.getDataPathFile(this), "metasettings.ini").getAbsolutePath());
+			netconn = FRONTLIB.flib_netconn_create("AndroidChatter", scheme, Utils.getDataPathFile(this).getAbsolutePath(), "140.247.62.101", 46631);
+			Log.d("Netconn", "netconn is "+netconn);
+			FRONTLIB.flib_metascheme_release(scheme);
+		} catch (FileNotFoundException e) {
+			throw new RuntimeException(e);
+		}
+        
+    	FRONTLIB.flib_netconn_onConnected(netconn, handleNetConnected, null);
+    	FRONTLIB.flib_netconn_onDisconnected(netconn, handleNetDisconnect, null);
+    	FRONTLIB.flib_netconn_onChat(netconn, handleChat, null);
+    	FRONTLIB.flib_netconn_onMessage(netconn, handleMessage, null);
+    	timer = new CountDownTimer(100000000, 100) {
+			@Override
+			public void onTick(long millisUntilFinished) {
+				if(!disconnected) {
+					FRONTLIB.flib_netconn_tick(netconn);
+				}
+			}
+			
+			@Override
+			public void onFinish() {
+			}
+		};
+		timer.start();
+    }
+
+    @Override
+    protected void onPause() {
+    	super.onPause();
+    	FRONTLIB.flib_netconn_send_quit(netconn, "Activity paused");
+    }
+    
+    private JnaFrontlib.VoidCallback handleNetConnected = new JnaFrontlib.VoidCallback() {
+		public void callback(Pointer context) {
+			textView.append("Connected. You can chat now.\n");
+		}
+	};
+	
+    private JnaFrontlib.IntStrCallback handleNetDisconnect = new JnaFrontlib.IntStrCallback() {
+		public void callback(Pointer context, int arg1, String arg2) {
+			disconnected = true;
+			timer.cancel();
+			FRONTLIB.flib_netconn_destroy(netconn);
+			netconn.setPointer(Pointer.NULL);
+			textView.append("You have been disconnected.");
+		}
+	};
+	
+    private JnaFrontlib.StrStrCallback handleChat = new JnaFrontlib.StrStrCallback() {
+		public void callback(Pointer context, String arg1, String arg2) {
+			textView.append(arg1+": "+arg2+"\n");
+		}
+	};
+	
+    private JnaFrontlib.IntStrCallback handleMessage = new JnaFrontlib.IntStrCallback() {
+		public void callback(Pointer context, int arg1, String arg2) {
+			textView.append(arg2+"\n");
+		}
+	};
+}