Working disconnect button in Console #4862
This commit is contained in:
parent
c6401b447b
commit
a6f527da62
|
@ -59,6 +59,7 @@ public class LinkManager implements Closeable {
|
||||||
private boolean needPullLiveData = true;
|
private boolean needPullLiveData = true;
|
||||||
public final MessagesListener messageListener = (source, message) -> System.out.println(source + ": " + message);
|
public final MessagesListener messageListener = (source, message) -> System.out.println(source + ": " + message);
|
||||||
private Thread communicationThread;
|
private Thread communicationThread;
|
||||||
|
private boolean isDisconnectedByUser;
|
||||||
|
|
||||||
public LinkManager() {
|
public LinkManager() {
|
||||||
Future<?> future = submit(() -> {
|
Future<?> future = submit(() -> {
|
||||||
|
@ -178,6 +179,16 @@ public class LinkManager implements Closeable {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void disconnect() {
|
||||||
|
isDisconnectedByUser = true;
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reconnect() {
|
||||||
|
isDisconnectedByUser = false;
|
||||||
|
restart();
|
||||||
|
}
|
||||||
|
|
||||||
public enum LogLevel {
|
public enum LogLevel {
|
||||||
INFO,
|
INFO,
|
||||||
DEBUG,
|
DEBUG,
|
||||||
|
@ -191,7 +202,6 @@ public class LinkManager implements Closeable {
|
||||||
public final LinkedBlockingQueue<Runnable> COMMUNICATION_QUEUE = new LinkedBlockingQueue<>();
|
public final LinkedBlockingQueue<Runnable> COMMUNICATION_QUEUE = new LinkedBlockingQueue<>();
|
||||||
/**
|
/**
|
||||||
* All request/responses to underlying controller are happening on this single-threaded executor in a FIFO manner
|
* All request/responses to underlying controller are happening on this single-threaded executor in a FIFO manner
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final ExecutorService COMMUNICATION_EXECUTOR = new ThreadPoolExecutor(1, 1,
|
public final ExecutorService COMMUNICATION_EXECUTOR = new ThreadPoolExecutor(1, 1,
|
||||||
0L, TimeUnit.MILLISECONDS,
|
0L, TimeUnit.MILLISECONDS,
|
||||||
|
@ -299,7 +309,8 @@ public class LinkManager implements Closeable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restart() {
|
public void restart() {
|
||||||
ConnectionStatusLogic.INSTANCE.setValue(ConnectionStatusValue.NOT_CONNECTED);
|
if (isDisconnectedByUser)
|
||||||
|
return;
|
||||||
close(); // Explicitly kill the connection (call connectors destructor??????)
|
close(); // Explicitly kill the connection (call connectors destructor??????)
|
||||||
|
|
||||||
String[] ports = getCommPorts();
|
String[] ports = getCommPorts();
|
||||||
|
@ -312,8 +323,10 @@ public class LinkManager implements Closeable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
if (connector != null)
|
ConnectionStatusLogic.INSTANCE.setValue(ConnectionStatusValue.NOT_CONNECTED);
|
||||||
|
if (connector != null) {
|
||||||
connector.stop();
|
connector.stop();
|
||||||
|
}
|
||||||
isStarted = false; // Connector is dead and cant be in started state (Otherwise the Exception will raised)
|
isStarted = false; // Connector is dead and cant be in started state (Otherwise the Exception will raised)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import java.net.URL;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
public class rusEFIVersion {
|
public class rusEFIVersion {
|
||||||
public static final int CONSOLE_VERSION = 20230701;
|
public static final int CONSOLE_VERSION = 20230728;
|
||||||
public static AtomicReference<String> firmwareVersion = new AtomicReference<>("N/A");
|
public static AtomicReference<String> firmwareVersion = new AtomicReference<>("N/A");
|
||||||
|
|
||||||
public static long classBuildTimeMillis() {
|
public static long classBuildTimeMillis() {
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.rusefi;
|
||||||
|
|
||||||
|
import com.rusefi.io.ConnectionStatusLogic;
|
||||||
|
import com.rusefi.ui.UIContext;
|
||||||
|
import com.rusefi.ui.lua.TextEditor;
|
||||||
|
import org.putgemin.VerticalFlowLayout;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.InputEvent;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
|
||||||
|
import static javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW;
|
||||||
|
|
||||||
|
public class ConnectionTab {
|
||||||
|
private final UIContext uiContext;
|
||||||
|
private final JPanel content = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
public ConnectionTab(UIContext uiContext) {
|
||||||
|
this.uiContext = uiContext;
|
||||||
|
|
||||||
|
JPanel vertical = new JPanel(new VerticalFlowLayout());
|
||||||
|
|
||||||
|
content.add(vertical, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
JButton connect = new JButton("Connect");
|
||||||
|
|
||||||
|
JButton disconnect = new JButton("Disconnect");
|
||||||
|
|
||||||
|
KeyStroke disconnectKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK);
|
||||||
|
KeyStroke connectKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK);
|
||||||
|
|
||||||
|
vertical.add(new JLabel("Ctrl+C connect"));
|
||||||
|
vertical.add(connect);
|
||||||
|
vertical.add(new JLabel("Ctrl+R disconnect"));
|
||||||
|
vertical.add(disconnect);
|
||||||
|
|
||||||
|
ConnectionStatusLogic.INSTANCE.addListener(isConnected -> {
|
||||||
|
connect.setEnabled(!isConnected);
|
||||||
|
disconnect.setEnabled(isConnected);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
TextEditor.installKeyAction(connectKeyStroke, "connectCommand", content, new AbstractAction() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
reconnect(uiContext);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
TextEditor.installKeyAction(disconnectKeyStroke, "disconnectCommand", content, new AbstractAction() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
disconnect(uiContext);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
disconnect.addActionListener(e -> disconnect(uiContext));
|
||||||
|
|
||||||
|
connect.addActionListener(e -> reconnect(uiContext));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void reconnect(UIContext uiContext) {
|
||||||
|
uiContext.getLinkManager().reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void disconnect(UIContext uiContext) {
|
||||||
|
uiContext.getLinkManager().disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
}
|
|
@ -146,6 +146,7 @@ public class ConsoleUI {
|
||||||
MessagesCentral.getInstance().postMessage(ConsoleUI.class, "COMPOSITE_OFF_RPM=" + BinaryProtocolLogger.COMPOSITE_OFF_RPM);
|
MessagesCentral.getInstance().postMessage(ConsoleUI.class, "COMPOSITE_OFF_RPM=" + BinaryProtocolLogger.COMPOSITE_OFF_RPM);
|
||||||
|
|
||||||
tabbedPane.addTab("rusEFI Online", new OnlineTab(uiContext).getContent());
|
tabbedPane.addTab("rusEFI Online", new OnlineTab(uiContext).getContent());
|
||||||
|
tabbedPane.addTab("Connection", new ConnectionTab(uiContext).getContent());
|
||||||
|
|
||||||
if (false) {
|
if (false) {
|
||||||
// this feature is not totally happy safer to disabke to reduce user confusion
|
// this feature is not totally happy safer to disabke to reduce user confusion
|
||||||
|
|
|
@ -123,8 +123,7 @@ public class TextEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void installKeyAction(KeyStroke undoKeyStroke, String actionName, JComponent control, AbstractAction action) {
|
public static void installKeyAction(KeyStroke undoKeyStroke, String actionName, JComponent control, AbstractAction action) {
|
||||||
control.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
|
control.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(undoKeyStroke, actionName);
|
||||||
.put(undoKeyStroke, actionName);
|
|
||||||
control.getActionMap().put(actionName, action);
|
control.getActionMap().put(actionName, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue