diff --git a/java_console/io/src/main/java/com/rusefi/CompatibleFunction.java b/java_console/io/src/main/java/com/rusefi/CompatibleFunction.java new file mode 100644 index 0000000000..7e80aa63a4 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/CompatibleFunction.java @@ -0,0 +1,8 @@ +package com.rusefi; + +/** + * reducing Android level down from 24 + */ +public interface CompatibleFunction { + R apply(T t); +} diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index f1471c6d9d..3b0076052f 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -1,6 +1,7 @@ package com.rusefi.io.tcp; import com.devexperts.logging.Logging; +import com.rusefi.CompatibleFunction; import com.rusefi.Listener; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; @@ -32,7 +33,7 @@ public class BinaryProtocolProxy { public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE; public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) throws IOException { - Function clientSocketRunnableFactory = clientSocket -> () -> { + CompatibleFunction clientSocketRunnableFactory = clientSocket -> () -> { TcpIoStream clientStream = null; try { clientStream = new TcpIoStream("[[proxy]] ", clientSocket); diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 059765a198..295a9c9f17 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -2,6 +2,7 @@ package com.rusefi.io.tcp; import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; +import com.rusefi.CompatibleFunction; import com.rusefi.Listener; import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; @@ -72,7 +73,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) throws IOException { log.info("BinaryProtocolServer on " + port); - Function clientSocketRunnableFactory = clientSocket -> () -> { + CompatibleFunction clientSocketRunnableFactory = clientSocket -> () -> { try { runProxy(linkManager, clientSocket, context); } catch (IOException e) { @@ -92,11 +93,11 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { * @param serverSocketCreationCallback this callback is invoked once we open the server socket * @return */ - public static ServerSocketReference tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) throws IOException { + public static ServerSocketReference tcpServerSocket(int port, String threadName, CompatibleFunction socketRunnableFactory, Listener serverSocketCreationCallback) throws IOException { return tcpServerSocket(socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); } - public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, ServerSocketFunction nonSecureSocketFunction) throws IOException { + public static ServerSocketReference tcpServerSocket(CompatibleFunction clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, ServerSocketFunction nonSecureSocketFunction) throws IOException { ThreadFactory threadFactory = getThreadFactory(threadName); Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback"); @@ -125,7 +126,14 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { @NotNull public static ThreadFactory getThreadFactory(String threadName) { - return THREAD_FACTORIES_BY_NAME.computeIfAbsent(threadName, NamedThreadFactory::new); + synchronized (THREAD_FACTORIES_BY_NAME) { + ThreadFactory threadFactory = THREAD_FACTORIES_BY_NAME.get(threadName); + if (threadFactory == null) { + threadFactory = new NamedThreadFactory(threadName); + THREAD_FACTORIES_BY_NAME.put(threadName, threadFactory); + } + return threadFactory; + } } @SuppressWarnings("InfiniteLoopStatement") diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index 02c664fcbc..7cc9e13a80 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -70,10 +70,10 @@ public class NetworkConnector implements Closeable { return start(authToken, context, reconnectListener, controllerConnector); } - public NetworkConnectorResult start(String authToken, NetworkConnectorContext context, ReconnectListener reconnectListener, LinkManager controllerConnector) { + public NetworkConnectorResult start(String authToken, NetworkConnectorContext context, ReconnectListener reconnectListener, LinkManager linkManager) { ControllerInfo controllerInfo; try { - controllerInfo = getControllerInfo(controllerConnector, controllerConnector.getConnector().getBinaryProtocol().getStream()); + controllerInfo = getControllerInfo(linkManager, linkManager.getConnector().getBinaryProtocol().getStream()); } catch (IOException e) { return NetworkConnectorResult.ERROR; } @@ -87,7 +87,7 @@ public class NetworkConnector implements Closeable { proxyReconnectSemaphore.acquire(); try { - start(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> { + start(context.serverPortForControllers(), linkManager, 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");