diff options
author | Doug Schaefer | 2015-05-24 02:21:58 +0000 |
---|---|---|
committer | Doug Schaefer | 2015-05-24 03:11:39 +0000 |
commit | a81fcd93761489656b06bd2d742576dcad57b57f (patch) | |
tree | e60ddcad88a4350e57b0382d89a082f77801e770 | |
parent | 3688cd7f0462b45d43e561f637842e23ec581667 (diff) | |
download | org.eclipse.cdt-a81fcd93761489656b06bd2d742576dcad57b57f.tar.gz org.eclipse.cdt-a81fcd93761489656b06bd2d742576dcad57b57f.tar.xz org.eclipse.cdt-a81fcd93761489656b06bd2d742576dcad57b57f.zip |
Reuse Anrduino remote connections when fetching.
Change-Id: I776cf031f34b51ed504709d367b6b0352c868815
-rw-r--r-- | toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java index aeb3cfd441b..01f7b30f6d9 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java @@ -11,6 +11,8 @@ package org.eclipse.cdt.arduino.core.internal.remote; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import org.eclipse.cdt.arduino.core.Board; import org.eclipse.cdt.arduino.core.IArduinoBoardManager; @@ -19,27 +21,50 @@ import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.serial.SerialPort; import org.eclipse.remote.core.IRemoteCommandShellService; import org.eclipse.remote.core.IRemoteConnection; +import org.eclipse.remote.core.IRemoteConnectionChangeListener; import org.eclipse.remote.core.IRemoteConnectionPropertyService; import org.eclipse.remote.core.IRemoteProcess; +import org.eclipse.remote.core.RemoteConnectionChangeEvent; import org.eclipse.remote.serial.core.SerialPortCommandShell; -public class ArduinoRemoteConnection implements IRemoteConnectionPropertyService, IRemoteCommandShellService, IArduinoRemoteConnection { +public class ArduinoRemoteConnection implements IRemoteConnectionPropertyService, IRemoteCommandShellService, + IArduinoRemoteConnection, IRemoteConnectionChangeListener { private final IArduinoBoardManager boardManager = Activator.getService(IArduinoBoardManager.class); private final IRemoteConnection remoteConnection; private SerialPort serialPort; private SerialPortCommandShell commandShell; + private static final Map<IRemoteConnection, ArduinoRemoteConnection> connectionMap = new HashMap<>(); + public ArduinoRemoteConnection(IRemoteConnection remoteConnection) { this.remoteConnection = remoteConnection; + remoteConnection.addConnectionChangeListener(this); + } + + @Override + public void connectionChanged(RemoteConnectionChangeEvent event) { + if (event.getType() == RemoteConnectionChangeEvent.CONNECTION_REMOVED) { + synchronized (connectionMap) { + connectionMap.remove(event.getConnection()); + } + } } public static class Factory implements IRemoteConnection.Service.Factory { @SuppressWarnings("unchecked") @Override - public <T extends IRemoteConnection.Service> T getService(IRemoteConnection remoteConnection, Class<T> service) { + public <T extends IRemoteConnection.Service> T getService(IRemoteConnection remoteConnection, + Class<T> service) { if (IArduinoRemoteConnection.class.equals(service)) { - return (T) new ArduinoRemoteConnection(remoteConnection); + synchronized (connectionMap) { + ArduinoRemoteConnection connection = connectionMap.get(remoteConnection); + if (connection == null) { + connection = new ArduinoRemoteConnection(remoteConnection); + connectionMap.put(remoteConnection, connection); + } + return (T) connection; + } } else if (IRemoteConnectionPropertyService.class.equals(service) || IRemoteCommandShellService.class.equals(service)) { return (T) remoteConnection.getService(IArduinoRemoteConnection.class); @@ -78,7 +103,6 @@ public class ArduinoRemoteConnection implements IRemoteConnectionPropertyService return remoteConnection.getAttribute(PORT_NAME); } - @Override public IRemoteProcess getCommandShell(int flags) throws IOException { if (serialPort != null && serialPort.isOpen()) { |