diff --git a/java_console/io/src/main/java/com/opensr5/io/WriteStream.java b/java_console/io/src/main/java/com/opensr5/io/WriteStream.java index f6cd90feab..4190fa18ab 100644 --- a/java_console/io/src/main/java/com/opensr5/io/WriteStream.java +++ b/java_console/io/src/main/java/com/opensr5/io/WriteStream.java @@ -20,9 +20,9 @@ public interface WriteStream { byte[] array = new byte[4]; array[0] = (byte) ((v >>> 24) & 0xFF); - array[0] = (byte) ((v >>> 16) & 0xFF); - array[0] = (byte) ((v >>> 8) & 0xFF); - array[0] = (byte) ((v >>> 0) & 0xFF); + array[1] = (byte) ((v >>> 16) & 0xFF); + array[2] = (byte) ((v >>> 8) & 0xFF); + array[3] = (byte) ((v >>> 0) & 0xFF); write(array); } } 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 ed35fc5946..e18990653d 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.opensr5.Logger; +import com.rusefi.io.IoStream; import java.io.ByteArrayInputStream; import java.io.DataInputStream; @@ -12,7 +13,7 @@ import java.util.function.Function; import static com.rusefi.binaryprotocol.BinaryProtocolCommands.COMMAND_PROTOCOL; public class BinaryProtocolProxy { - public static void createProxy(Socket targetEcuSocket, int serverProxyPort) { + public static void createProxy(IoStream targetEcuSocket, int serverProxyPort) { Function clientSocketRunnableFactory = new Function() { @Override public Runnable apply(Socket clientSocket) { @@ -27,14 +28,11 @@ public class BinaryProtocolProxy { BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null); } - private static void runProxy(Socket targetEcuSocket, Socket clientSocket) { + private static void runProxy(IoStream targetEcu, Socket clientSocket) { /* * Each client socket is running on it's own thread */ try { - DataInputStream targetInputStream = new DataInputStream(targetEcuSocket.getInputStream()); - DataOutputStream targetOutputStream = new DataOutputStream(targetEcuSocket.getOutputStream()); - DataInputStream clientInputStream = new DataInputStream(clientSocket.getInputStream()); DataOutputStream clientOutputStream = new DataOutputStream(clientSocket.getOutputStream()); @@ -44,18 +42,18 @@ public class BinaryProtocolProxy { BinaryProtocolServer.handleProtocolCommand(clientSocket); continue; } - proxyClientRequestToController(clientInputStream, firstByte, targetOutputStream); + proxyClientRequestToController(clientInputStream, firstByte, targetEcu); - proxyControllerResponseToClient(targetInputStream, clientOutputStream); + proxyControllerResponseToClient(targetEcu, clientOutputStream); } - } catch (IOException e) { + } catch (IOException | InterruptedException e) { e.printStackTrace(); } } - private static void proxyControllerResponseToClient(DataInputStream targetInputStream, DataOutputStream clientOutputStream) throws IOException { + private static void proxyControllerResponseToClient(IoStream targetInputStream, DataOutputStream clientOutputStream) throws IOException, InterruptedException { short length = targetInputStream.readShort(); - BinaryProtocolServer.Packet packet = BinaryProtocolServer.readPromisedBytes(targetInputStream, length); + BinaryProtocolServer.Packet packet = BinaryProtocolServer.readPromisedBytes(targetInputStream.getDataBuffer(), length); System.out.println("Relaying controller response length=" + length); clientOutputStream.writeShort(length); @@ -64,7 +62,7 @@ public class BinaryProtocolProxy { clientOutputStream.flush(); } - private static void proxyClientRequestToController(DataInputStream in, byte firstByte, DataOutputStream targetOutputStream) throws IOException { + private static void proxyClientRequestToController(DataInputStream in, byte firstByte, IoStream targetOutputStream) throws IOException { byte secondByte = in.readByte(); int length = firstByte * 256 + secondByte; @@ -79,6 +77,5 @@ public class BinaryProtocolProxy { targetOutputStream.write(secondByte); targetOutputStream.write(packet.getPacket()); targetOutputStream.writeInt(packet.getCrc()); - targetOutputStream.flush(); } } diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index 57adebe20c..941dc6a549 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -10,6 +10,7 @@ import com.rusefi.config.Field; import com.rusefi.config.generated.Fields; import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.tune.xml.Constant; import org.jetbrains.annotations.NotNull; import org.junit.Test; @@ -101,9 +102,10 @@ public class TcpCommunicationIntegrationTest { assertTrue(serverCreated.await(30, TimeUnit.SECONDS)); int proxyPort = 6103; - Socket targetEcuSocket; + + IoStream targetEcuSocket; try { - targetEcuSocket = new Socket(LOCALHOST, controllerPort); + targetEcuSocket = new TcpIoStream(LOGGER, new Socket(LOCALHOST, controllerPort)); } catch (IOException e) { throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort); }