proxy progress - making code greener

This commit is contained in:
rusefi 2020-07-22 19:13:45 -04:00
parent 553db5c479
commit 8c55c851b0
4 changed files with 56 additions and 70 deletions

View File

@ -57,6 +57,8 @@ public class NetworkConnector {
IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream();
HelloCommand.send(targetEcuSocket, logger); HelloCommand.send(targetEcuSocket, logger);
String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer(), logger); String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer(), logger);
if (helloResponse == null)
throw new IOException("Error getting hello response");
String controllerSignature = helloResponse.trim(); String controllerSignature = helloResponse.trim();
ConfigurationImage image = linkManager.getConnector().getBinaryProtocol().getControllerConfiguration(); ConfigurationImage image = linkManager.getConnector().getBinaryProtocol().getControllerConfiguration();

View File

@ -11,7 +11,7 @@ public class ApplicationConnectionState {
private final IoStream clientStream; private final IoStream clientStream;
private final ControllerConnectionState state; private final ControllerConnectionState state;
public ApplicationConnectionState(UserDetails userDetails, ApplicationRequest applicationRequest, IoStream clientStream, ControllerConnectionState state) { public ApplicationConnectionState(UserDetails userDetails, IoStream clientStream, ControllerConnectionState state) {
this.userDetails = Objects.requireNonNull(userDetails, "userDetails"); this.userDetails = Objects.requireNonNull(userDetails, "userDetails");
this.clientStream = Objects.requireNonNull(clientStream, "clientStream"); this.clientStream = Objects.requireNonNull(clientStream, "clientStream");
this.state = Objects.requireNonNull(state, "state"); this.state = Objects.requireNonNull(state, "state");

View File

@ -25,10 +25,8 @@ import javax.json.JsonObject;
import java.io.Closeable; import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import java.net.BindException; import java.net.BindException;
import java.net.Socket;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
/** /**
* See NetworkConnectorStartup * See NetworkConnectorStartup
@ -81,6 +79,7 @@ public class Backend implements Closeable {
try { try {
new FtBasic( new FtBasic(
new TkFork(showOnlineControllers, new TkFork(showOnlineControllers,
showOnlineApplications,
new Monitoring(this).showStatistics, new Monitoring(this).showStatistics,
new FkRegex(ProxyClient.VERSION_PATH, ProxyClient.BACKEND_VERSION), new FkRegex(ProxyClient.VERSION_PATH, ProxyClient.BACKEND_VERSION),
new FkRegex("/", new RsHtml("<html><body>\n" + new FkRegex("/", new RsHtml("<html><body>\n" +
@ -114,17 +113,12 @@ public class Backend implements Closeable {
}, "rusEFI Application connections Cleanup").start(); }, "rusEFI Application connections Cleanup").start();
} }
public void runApplicationConnector(int serverPortForApplications, Listener serverSocketCreationCallback) { public void runApplicationConnector(int serverPortForApplications, Listener<?> serverSocketCreationCallback) {
this.serverPortForApplications = serverPortForApplications; this.serverPortForApplications = serverPortForApplications;
// connection from authenticator app which proxies for Tuner Studio // connection from authenticator app which proxies for Tuner Studio
// authenticator pushed hello packet on connect // authenticator pushed hello packet on connect
System.out.println("Starting application connector at " + serverPortForApplications); System.out.println("Starting application connector at " + serverPortForApplications);
BinaryProtocolServer.tcpServerSocket(logger, new Function<Socket, Runnable>() { BinaryProtocolServer.tcpServerSocket(logger, applicationSocket -> () -> {
@Override
public Runnable apply(Socket applicationSocket) {
return new Runnable() {
@Override
public void run() {
totalSessions.incrementAndGet(); totalSessions.incrementAndGet();
// connection from authenticator app which proxies for Tuner Studio // connection from authenticator app which proxies for Tuner Studio
IoStream applicationClientStream = null; IoStream applicationClientStream = null;
@ -154,7 +148,7 @@ public class Backend implements Closeable {
logger.info("No controller for " + controllerKey); logger.info("No controller for " + controllerKey);
return; return;
} }
applicationConnectionState = new ApplicationConnectionState(userDetails, applicationRequest, applicationClientStream, state); applicationConnectionState = new ApplicationConnectionState(userDetails, applicationClientStream, state);
synchronized (lock) { synchronized (lock) {
applications.add(applicationConnectionState); applications.add(applicationConnectionState);
} }
@ -164,12 +158,10 @@ public class Backend implements Closeable {
} catch (Throwable e) { } catch (Throwable e) {
logger.info("Application Connector: Got error " + e); logger.info("Application Connector: Got error " + e);
} finally { } finally {
if (applicationClientStream != null)
applicationClientStream.close(); applicationClientStream.close();
close(applicationConnectionState); close(applicationConnectionState);
} }
}
};
}
}, serverPortForApplications, "ApplicationServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY); }, serverPortForApplications, "ApplicationServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY);
} }
@ -203,15 +195,10 @@ public class Backend implements Closeable {
logger.info("Disconnecting application"); logger.info("Disconnecting application");
} }
public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) { public void runControllerConnector(int serverPortForControllers, Listener<?> serverSocketCreationCallback) {
this.serverPortForControllers = serverPortForControllers; this.serverPortForControllers = serverPortForControllers;
logger.info("Starting controller connector at " + serverPortForControllers); logger.info("Starting controller connector at " + serverPortForControllers);
BinaryProtocolServer.tcpServerSocket(logger, new Function<Socket, Runnable>() { BinaryProtocolServer.tcpServerSocket(logger, controllerSocket -> () -> {
@Override
public Runnable apply(Socket controllerSocket) {
return new Runnable() {
@Override
public void run() {
totalSessions.incrementAndGet(); totalSessions.incrementAndGet();
ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, logger, getUserDetailsResolver()); ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, logger, getUserDetailsResolver());
try { try {
@ -224,9 +211,6 @@ public class Backend implements Closeable {
} catch (Throwable e) { } catch (Throwable e) {
close(controllerConnectionState); close(controllerConnectionState);
} }
}
};
}
}, serverPortForControllers, "ControllerServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY); }, serverPortForControllers, "ControllerServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY);
} }

View File

@ -101,7 +101,7 @@ public class ControllerConnectionState {
byte[] packet = incomingData.getPacket(logger, "msg", true); byte[] packet = incomingData.getPacket(logger, "msg", true);
if (packet == null) if (packet == null)
throw new IOException("No response"); throw new IOException("getOutputs: No response");
} }
/** /**