package org.schmivits.testbluetoothclientserver; import java.io.IOException; import java.util.HashMap; import java.util.Map; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothServerSocket; import android.widget.TextView; public class DataServer extends RpcStates { private final BluetoothAdapter mAdapter; private final DataSourceStream mSource; private BluetoothServerSocket mTargetServerSocket; public DataServer(TextView view, BluetoothAdapter adapter, DataSourceStream source) { super(view, "WaitingForListener"); mAdapter = adapter; mSource = source; mChildren.add(source); } @Override protected Map<String, ThreadState> buildStates() { Map<String, ThreadState> s = new HashMap<String, ThreadState>(); s.put("WaitingForListener", new ThreadState() { @Override public void onEnter() throws Exception { mTargetServerSocket = mAdapter.listenUsingRfcommWithServiceRecord("Airball Data", AIRBALL_UUID); while (mRunning) { enter("CreatingServant"); } } @Override public void onCleanup() { if (mTargetServerSocket != null) { try { mTargetServerSocket.close(); } catch (IOException ignored) {} mTargetServerSocket = null; } } }); s.put("CreatingServant", new ThreadState() { @Override public void onEnter() throws Exception { DataServant servant = new DataServant(mView, mTargetServerSocket.accept(), mSource); mChildren.add(servant); servant.start(); } @Override public void onCleanup() { } }); return s; } }