broadcast tab seems to work now?!

This commit is contained in:
rusefi 2020-07-27 00:54:48 -04:00
parent 9ff5dcca97
commit 2e581ec6cd
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 boolean isClosed;
public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) {
return runNetworkConnector(authToken, controllerPort, context, ReconnectListener.VOID);
public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context) {
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()
.setCompositeLogicEnabled(false)
.setNeedPullData(false);
@ -78,7 +78,7 @@ public class NetworkConnector implements Closeable {
proxyReconnectSemaphore.acquire();
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");
sleep(context.reconnectDelay() * Timeouts.SECOND);
log.debug("Releasing semaphore");
@ -98,7 +98,7 @@ public class NetworkConnector implements Closeable {
}
@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();
SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken);

View File

@ -24,7 +24,7 @@ public class NetworkConnectorStartup {
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());
}
}

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
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();
TestHelper.assertLatch("controllerRegistered", controllerRegistered);

View File

@ -1,6 +1,5 @@
package com.rusefi;
import com.opensr5.Logger;
import com.rusefi.config.generated.Fields;
import com.rusefi.io.IoStream;
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
*/
public class ServerTest {
private final static Logger logger = Logger.CONSOLE;
@Before
public void setup() throws MalformedURLException {
BackendTestHelper.commonServerTest();
@ -126,7 +123,7 @@ covered by FullServerTest
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
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));

View File

@ -75,7 +75,7 @@ public class NetworkConnectorTest {
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);

View File

@ -10,6 +10,8 @@ import com.rusefi.ui.util.URLLabel;
import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @see PluginEntry
@ -17,12 +19,13 @@ import javax.swing.*;
public class BroadcastTab {
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 JButton disconnect = new JButton("Disconnect");
private NetworkConnector networkConnector;
public BroadcastTab() {
JButton broadcast = new JButton("Broadcast");
disconnect.setEnabled(false);
broadcast.addActionListener(e -> {
String authToken = AuthTokenPanel.getAuthToken();
@ -40,9 +43,18 @@ public class BroadcastTab {
}).start();
});
disconnect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
networkConnector.close();
disconnect.setEnabled(false);
}
});
content.add(broadcast);
content.add(status);
content.add(help);
content.add(disconnect);
content.add(new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING));
content.add(new JLabel(PluginEntry.LOGO));
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>");
} else {
status.setText("rusEFI detected at " + autoDetectedPort);
disconnect.setEnabled(true);
NetworkConnectorContext connectorContext = new NetworkConnectorContext();
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()));