import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText; public class SingleThreadedActivity extends Activity { private EditText serverTextEditText; private ServerThread singleThreadedServer; private ServerTextContentWatcher serverTextContentWatcher = new ServerTextContentWatcher(); private class ServerTextContentWatcher implements TextWatcher { @Override public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { } @Override public void onTextChanged(CharSequence charSequence, int start, int before, int count) { if (charSequence.toString().equals(Constants.SERVER_START)) { singleThreadedServer = new ServerThread(); singleThreadedServer.startServer(); } if (charSequence.toString().equals(Constants.SERVER_STOP)) { singleThreadedServer.stopServer(); } } @Override public void afterTextChanged(Editable editable) { } } private class ServerThread extends Thread { private boolean isRunning; private ServerSocket serverSocket; public void startServer() { isRunning = true; start(); } public void stopServer() { isRunning = false; new Thread(new Runnable() { @Override public void run() { try { if (serverSocket != null) { serverSocket.close(); } Log.v(Constants.TAG, "stopServer() method invoked "+serverSocket); } catch(IOException ioException) { Log.e(Constants.TAG, "An exception has occurred: "+ioException.getMessage()); if (Constants.DEBUG) { ioException.printStackTrace(); } } } }).start(); } @Override public void run() { try { serverSocket = new ServerSocket(Constants.SERVER_PORT); while (isRunning) { Socket socket = serverSocket.accept(); Log.v(Constants.TAG, "Connection opened with "+socket.getInetAddress()+":"+socket.getLocalPort()); PrintWriter printWriter = Utilities.getWriter(socket); printWriter.println(serverTextEditText.getText().toString()); socket.close(); Log.v(Constants.TAG, "Connection closed"); } } catch (IOException ioException) { Log.e(Constants.TAG, "An exception has occurred: "+ioException.getMessage()); if (Constants.DEBUG) { ioException.printStackTrace(); } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_single_threaded); serverTextEditText = (EditText)findViewById(R.id.server_text_edit_text); serverTextEditText.addTextChangedListener(serverTextContentWatcher); } }