diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 6b964d5e97..fceb6a4b1f 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -30,25 +30,19 @@ public class IncomingDataBuffer { } private static final int BUFFER_SIZE = 32768; - private static String loggingPrefix; + private final String loggingPrefix; /** * buffer for response bytes from controller */ private final CircularByteBuffer cbb; private final AbstractIoStream.StreamStats streamStats; - public IncomingDataBuffer(AbstractIoStream.StreamStats streamStats) { + public IncomingDataBuffer(String loggingPrefix, AbstractIoStream.StreamStats streamStats) { + this.loggingPrefix = loggingPrefix; this.streamStats = Objects.requireNonNull(streamStats, "streamStats"); this.cbb = new CircularByteBuffer(BUFFER_SIZE); } - public static IncomingDataBuffer createDataBuffer(String loggingPrefix, IoStream stream) { - IncomingDataBuffer.loggingPrefix = loggingPrefix; - IncomingDataBuffer incomingData = new IncomingDataBuffer(stream.getStreamStats()); - stream.setInputListener(incomingData::addData); - return incomingData; - } - public byte[] getPacket(String msg) throws EOFException { return getPacket(msg, false, System.currentTimeMillis()); } @@ -104,7 +98,7 @@ public class IncomingDataBuffer { synchronized (cbb) { if (cbb.size() - cbb.length() < freshData.length) { log.error("buffer overflow not expected"); - cbb.clear(); + throw new IllegalStateException("buffer overflow not expected"); } cbb.put(freshData); cbb.notifyAll(); diff --git a/java_console/io/src/main/java/com/rusefi/io/can/Elm327IoStream.java b/java_console/io/src/main/java/com/rusefi/io/can/Elm327IoStream.java index 946a73ac4f..66aa42ebd1 100644 --- a/java_console/io/src/main/java/com/rusefi/io/can/Elm327IoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/can/Elm327IoStream.java @@ -40,7 +40,7 @@ public class Elm327IoStream extends AbstractIoStream { private Elm327IoStream(Elm327Connector con, String loggingPrefix, DisconnectListener disconnectListener) { this.con = con; this.disconnectListener = disconnectListener; - this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this); + this.dataBuffer = this.createDataBuffer(loggingPrefix); // ByteBuffer inBuf = ByteBuffer.allocate(OUT_BUFFER_SIZE); outBuf = ByteBuffer.allocate(OUT_BUFFER_SIZE); diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java index 21b7c183d8..ff50295e00 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java @@ -1,5 +1,6 @@ package com.rusefi.io.serial; +import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.IoStream; import java.io.IOException; @@ -12,6 +13,12 @@ public abstract class AbstractIoStream implements IoStream { private final AtomicInteger bytesOut = new AtomicInteger(); private long latestActivity; + public IncomingDataBuffer createDataBuffer(String loggingPrefix) { + IncomingDataBuffer incomingData = new IncomingDataBuffer(loggingPrefix, getStreamStats()); + setInputListener(incomingData::addData); + return incomingData; + } + @Override public StreamStats getStreamStats() { return streamStats; diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java b/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java index d62f0d4159..b6078ecfb1 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java @@ -22,7 +22,7 @@ public class BufferedSerialIoStream extends SerialIoStream { */ private BufferedSerialIoStream(SerialPort sp, String port) { super(sp, port); - this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this); + this.dataBuffer = this.createDataBuffer("[serial] "); } @Override diff --git a/java_console/io/src/main/java/com/rusefi/io/stream/PCanIoStream.java b/java_console/io/src/main/java/com/rusefi/io/stream/PCanIoStream.java index 4946c717d0..a30a477c70 100644 --- a/java_console/io/src/main/java/com/rusefi/io/stream/PCanIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/stream/PCanIoStream.java @@ -79,7 +79,7 @@ public class PCanIoStream extends AbstractIoStream { public PCanIoStream(PCANBasic can) { this.can = can; - this.dataBuffer = IncomingDataBuffer.createDataBuffer("", this); + this.dataBuffer = this.createDataBuffer(""); } @Override diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 1cf4fb54ec..94fc86e33a 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -36,7 +36,7 @@ public class TcpIoStream extends AbstractIoStream { InputStream input = new BufferedInputStream(socket.getInputStream()); this.output = new BufferedOutputStream(socket.getOutputStream()); this.input = input; - this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this); + this.dataBuffer = this.createDataBuffer(loggingPrefix); } @NotNull