Limit the number of open Bluetooth connections.

This commit is contained in:
akwizgran
2018-02-13 17:19:05 +00:00
parent 3f1fb1ca1c
commit 55150fe02a
9 changed files with 162 additions and 20 deletions

View File

@@ -31,9 +31,11 @@ class JavaBluetoothPlugin extends BluetoothPlugin<StreamConnectionNotifier> {
// Non-null if the plugin started successfully
private volatile LocalDevice localDevice = null;
JavaBluetoothPlugin(Executor ioExecutor, SecureRandom secureRandom,
JavaBluetoothPlugin(BluetoothConnectionManager connectionManager,
Executor ioExecutor, SecureRandom secureRandom,
Backoff backoff, DuplexPluginCallback callback, int maxLatency) {
super(ioExecutor, secureRandom, backoff, callback, maxLatency);
super(connectionManager, ioExecutor, secureRandom, backoff, callback,
maxLatency);
}
@Override
@@ -110,6 +112,6 @@ class JavaBluetoothPlugin extends BluetoothPlugin<StreamConnectionNotifier> {
}
private DuplexTransportConnection wrapSocket(StreamConnection s) {
return new JavaBluetoothTransportConnection(this, s);
return new JavaBluetoothTransportConnection(this, connectionManager, s);
}
}

View File

@@ -51,10 +51,12 @@ public class JavaBluetoothPluginFactory implements DuplexPluginFactory {
@Override
public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
BluetoothConnectionManager connectionManager =
new BluetoothConnectionManagerImpl();
Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL,
MAX_POLLING_INTERVAL, BACKOFF_BASE);
JavaBluetoothPlugin plugin = new JavaBluetoothPlugin(ioExecutor,
secureRandom, backoff, callback, MAX_LATENCY);
JavaBluetoothPlugin plugin = new JavaBluetoothPlugin(connectionManager,
ioExecutor, secureRandom, backoff, callback, MAX_LATENCY);
eventBus.addListener(plugin);
return plugin;
}

View File

@@ -14,11 +14,15 @@ import javax.microedition.io.StreamConnection;
class JavaBluetoothTransportConnection
extends AbstractDuplexTransportConnection {
private final BluetoothConnectionManager connectionManager;
private final StreamConnection stream;
JavaBluetoothTransportConnection(Plugin plugin, StreamConnection stream) {
JavaBluetoothTransportConnection(Plugin plugin,
BluetoothConnectionManager connectionManager,
StreamConnection stream) {
super(plugin);
this.stream = stream;
this.connectionManager = connectionManager;
}
@Override
@@ -33,6 +37,10 @@ class JavaBluetoothTransportConnection
@Override
protected void closeConnection(boolean exception) throws IOException {
stream.close();
try {
stream.close();
} finally {
connectionManager.connectionClosed();
}
}
}