broadcast tab seems to work now?!

This commit is contained in:
rusefi 2020-07-27 00:54:48 -04:00
parent 6dace7ce0d
commit 07f317c3fe
6 changed files with 28 additions and 16 deletions

View File

@ -34,11 +34,11 @@ public class NetworkConnector implements Closeable {
private final static Logging log = Logging.getLogging(NetworkConnector.class); private final static Logging log = Logging.getLogging(NetworkConnector.class);
private boolean isClosed; private boolean isClosed;
public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context) {
return runNetworkConnector(authToken, controllerPort, context, ReconnectListener.VOID); return start(authToken, controllerPort, context, ReconnectListener.VOID);
} }
public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) {
LinkManager controllerConnector = new LinkManager() LinkManager controllerConnector = new LinkManager()
.setCompositeLogicEnabled(false) .setCompositeLogicEnabled(false)
.setNeedPullData(false); .setNeedPullData(false);
@ -78,7 +78,7 @@ public class NetworkConnector implements Closeable {
proxyReconnectSemaphore.acquire(); proxyReconnectSemaphore.acquire();
try { try {
runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> { start(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> {
log.error(message + " Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); log.error(message + " Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds");
sleep(context.reconnectDelay() * Timeouts.SECOND); sleep(context.reconnectDelay() * Timeouts.SECOND);
log.debug("Releasing semaphore"); log.debug("Releasing semaphore");
@ -98,7 +98,7 @@ public class NetworkConnector implements Closeable {
} }
@NotNull @NotNull
private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException { private static SessionDetails start(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException {
IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream();
SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken); SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken);

View File

@ -24,7 +24,7 @@ public class NetworkConnectorStartup {
NetworkConnectorContext connectorContext = new NetworkConnectorContext(); NetworkConnectorContext connectorContext = new NetworkConnectorContext();
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(authToken, autoDetectedPort, connectorContext);
log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken());
} }
} }

View File

@ -101,7 +101,7 @@ public class FullServerTest {
}; };
// start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID);
ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo();
TestHelper.assertLatch("controllerRegistered", controllerRegistered); TestHelper.assertLatch("controllerRegistered", controllerRegistered);

View File

@ -1,6 +1,5 @@
package com.rusefi; package com.rusefi;
import com.opensr5.Logger;
import com.rusefi.config.generated.Fields; import com.rusefi.config.generated.Fields;
import com.rusefi.io.IoStream; import com.rusefi.io.IoStream;
import com.rusefi.io.commands.GetOutputsCommand; import com.rusefi.io.commands.GetOutputsCommand;
@ -34,8 +33,6 @@ import static org.junit.Assert.assertEquals;
* https://github.com/rusefi/web_backend/blob/master/documentation/rusEFI%20remote.png * https://github.com/rusefi/web_backend/blob/master/documentation/rusEFI%20remote.png
*/ */
public class ServerTest { public class ServerTest {
private final static Logger logger = Logger.CONSOLE;
@Before @Before
public void setup() throws MalformedURLException { public void setup() throws MalformedURLException {
BackendTestHelper.commonServerTest(); BackendTestHelper.commonServerTest();
@ -126,7 +123,7 @@ covered by FullServerTest
TestHelper.createVirtualController(controllerPort, new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE), logger); TestHelper.createVirtualController(controllerPort, new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE), logger);
// start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network
SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); SessionDetails deviceSessionDetails = NetworkConnector.start(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers);
assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));

View File

@ -75,7 +75,7 @@ public class NetworkConnectorTest {
reconnectCounter.countDown(); reconnectCounter.countDown();
} }
}; };
new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener);
assertLatch(reconnectCounter); assertLatch(reconnectCounter);

View File

@ -10,6 +10,8 @@ import com.rusefi.ui.util.URLLabel;
import org.putgemin.VerticalFlowLayout; import org.putgemin.VerticalFlowLayout;
import javax.swing.*; import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/** /**
* @see PluginEntry * @see PluginEntry
@ -17,12 +19,13 @@ import javax.swing.*;
public class BroadcastTab { public class BroadcastTab {
private final JComponent content = new JPanel(new VerticalFlowLayout()); private final JComponent content = new JPanel(new VerticalFlowLayout());
private final JLabel help = new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING);
private final JLabel status = new JLabel(); private final JLabel status = new JLabel();
private final JButton disconnect = new JButton("Disconnect");
private NetworkConnector networkConnector;
public BroadcastTab() { public BroadcastTab() {
JButton broadcast = new JButton("Broadcast"); JButton broadcast = new JButton("Broadcast");
disconnect.setEnabled(false);
broadcast.addActionListener(e -> { broadcast.addActionListener(e -> {
String authToken = AuthTokenPanel.getAuthToken(); String authToken = AuthTokenPanel.getAuthToken();
@ -40,9 +43,18 @@ public class BroadcastTab {
}).start(); }).start();
}); });
disconnect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
networkConnector.close();
disconnect.setEnabled(false);
}
});
content.add(broadcast); content.add(broadcast);
content.add(status); content.add(status);
content.add(help); content.add(disconnect);
content.add(new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING));
content.add(new JLabel(PluginEntry.LOGO)); content.add(new JLabel(PluginEntry.LOGO));
AutoupdateUtil.trueLayout(content); AutoupdateUtil.trueLayout(content);
@ -53,11 +65,14 @@ public class BroadcastTab {
status.setText("<html>rusEFI ECU not detected.<br/>Please make sure that TunerStudio is currently not connected to ECU.</html>"); status.setText("<html>rusEFI ECU not detected.<br/>Please make sure that TunerStudio is currently not connected to ECU.</html>");
} else { } else {
status.setText("rusEFI detected at " + autoDetectedPort); status.setText("rusEFI detected at " + autoDetectedPort);
disconnect.setEnabled(true);
NetworkConnectorContext connectorContext = new NetworkConnectorContext(); NetworkConnectorContext connectorContext = new NetworkConnectorContext();
new Thread(() -> { new Thread(() -> {
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); networkConnector = new NetworkConnector();
NetworkConnector.NetworkConnectorResult networkConnectorResult = networkConnector.start(authToken, autoDetectedPort, connectorContext);
SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken())); SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken()));