Merge remote-tracking branch 'origin/master'

This commit is contained in:
rusefi 2020-07-30 23:31:27 -04:00
commit 2779b95e67
5 changed files with 68 additions and 12 deletions

View File

@ -5,7 +5,7 @@ import com.rusefi.io.IoStream;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
public abstract class AbstractIoStream implements IoStream {
public abstract class AbstractIoStream implements IoStream, StreamStatistics {
private boolean isClosed;
protected StreamStats streamStats = new StreamStats();
@ -64,10 +64,12 @@ public abstract class AbstractIoStream implements IoStream {
}
}
@Override
public int getBytesIn() {
return streamStats.totalBytesArrived.get();
}
@Override
public int getBytesOut() {
return bytesOut.get();
}

View File

@ -0,0 +1,7 @@
package com.rusefi.io.serial;
public interface StreamStatistics {
int getBytesIn();
int getBytesOut();
}

View File

@ -5,6 +5,8 @@ import com.rusefi.NamedThreadFactory;
import com.rusefi.io.IoStream;
import com.rusefi.io.commands.GetOutputsCommand;
import com.rusefi.io.commands.HelloCommand;
import com.rusefi.io.serial.AbstractIoStream;
import com.rusefi.io.serial.StreamStatistics;
import com.rusefi.io.tcp.BinaryProtocolProxy;
import com.rusefi.io.tcp.ServerSocketReference;
import com.rusefi.io.tcp.TcpIoStream;
@ -52,7 +54,7 @@ public class LocalApplicationProxy implements Closeable {
if (!version.contains(ProxyClient.BACKEND_VERSION))
throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION);
IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, context.serverPortForRemoteApplications()), disconnectListener);
AbstractIoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, context.serverPortForRemoteApplications()), disconnectListener);
LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest);
AtomicInteger relayCommandCounter = new AtomicInteger();
@ -87,7 +89,7 @@ public class LocalApplicationProxy implements Closeable {
ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, context.authenticatorPort(), relayCommandCounter);
LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream);
connectionListener.onConnected(localApplicationProxy);
connectionListener.onConnected(localApplicationProxy, authenticatorToProxyStream);
return serverHolder;
}
@ -112,9 +114,9 @@ public class LocalApplicationProxy implements Closeable {
}
public interface ConnectionListener {
ConnectionListener VOID = localApplicationProxy -> {
ConnectionListener VOID = (localApplicationProxy, authenticatorToProxyStream) -> {
};
void onConnected(LocalApplicationProxy localApplicationProxy);
void onConnected(LocalApplicationProxy localApplicationProxy, StreamStatistics authenticatorToProxyStream);
}
}

View File

@ -2,7 +2,9 @@ package com.rusefi.ts_plugin;
import com.rusefi.NamedThreadFactory;
import com.rusefi.SignatureHelper;
import com.rusefi.Timeouts;
import com.rusefi.autoupdate.AutoupdateUtil;
import com.rusefi.io.serial.StreamStatistics;
import com.rusefi.io.tcp.ServerSocketReference;
import com.rusefi.io.tcp.TcpIoStream;
import com.rusefi.proxy.client.LocalApplicationProxy;
@ -20,6 +22,8 @@ import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.Executor;
@ -50,6 +54,8 @@ public class RemoteTab {
};
private StreamStatusControl streamStatusControl = null;
private final JButton disconnect = new JButton("Disconnect");
private final Executor listDownloadExecutor = Executors.newSingleThreadExecutor(new NamedThreadFactory("online list downloader"));
@ -67,6 +73,15 @@ public class RemoteTab {
});
Timer timer = new Timer(Timeouts.SECOND, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (streamStatusControl != null)
streamStatusControl.update();
}
});
timer.start();
JTextField applicationPort = new JTextField() {
@Override
public Dimension getPreferredSize() {
@ -101,7 +116,7 @@ public class RemoteTab {
if (currentState == null) {
requestListDownload();
} else {
setConnectedStatus(currentState.getApplicationRequest().getTargetUser());
setConnectedStatus(currentState.getApplicationRequest().getTargetUser(), null);
}
}
@ -172,12 +187,12 @@ public class RemoteTab {
RemoteTabController.INSTANCE.setState(RemoteTabController.State.CONNECTING);
setStatus("Connecting to " + publicSession.getUserDetails().getUserName());
LocalApplicationProxy.ConnectionListener connectionListener = localApplicationProxy -> {
LocalApplicationProxy.ConnectionListener connectionListener = (localApplicationProxy, authenticatorToProxyStream) -> {
RemoteTabController.INSTANCE.setConnected(localApplicationProxy);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
setConnectedStatus(publicSession.getUserDetails());
setConnectedStatus(publicSession.getUserDetails(), authenticatorToProxyStream);
}
});
};
@ -187,17 +202,24 @@ public class RemoteTab {
}, "Authenticator").start();
}
private void setConnectedStatus(UserDetails userDetails) {
private void setConnectedStatus(UserDetails userDetails, StreamStatistics authenticatorToProxyStream) {
if (authenticatorToProxyStream != null) {
streamStatusControl = new StreamStatusControl(authenticatorToProxyStream);
}
setStatus("Connected to " + userDetails.getUserName(),
new JLabel("You can now connect your TunerStudio to IP address localhost and port " + getLocalPort()),
disconnect);
disconnect, streamStatusControl == null ? null : streamStatusControl.getContent());
}
private void setStatus(String text, JComponent... extra) {
list.removeAll();
list.add(new JLabel(text));
for (JComponent component : extra)
list.add(component);
for (JComponent component : extra) {
if (component != null) {
list.add(component);
}
}
AutoupdateUtil.trueLayout(list);
}

View File

@ -0,0 +1,23 @@
package com.rusefi.ts_plugin;
import com.rusefi.io.serial.StreamStatistics;
import javax.swing.*;
public class StreamStatusControl {
private final StreamStatistics authenticatorToProxyStream;
private final JLabel content = new JLabel();
public StreamStatusControl(StreamStatistics statistics) {
this.authenticatorToProxyStream = statistics;
}
public void update() {
content.setText("In " + authenticatorToProxyStream.getBytesIn() + " Out " + authenticatorToProxyStream.getBytesOut());
}
public JComponent getContent() {
return content;
}
}