proxy progress

one more go? it makes no sense :(
This commit is contained in:
rusefi 2020-07-08 20:03:23 -04:00
parent cc3808d2f0
commit a661394012
2 changed files with 20 additions and 5 deletions

View File

@ -24,6 +24,7 @@ public class PortHolder {
private final DataListener dataListener; private final DataListener dataListener;
private final Logger logger; private final Logger logger;
private final Callable<IoStream> streamFactory; private final Callable<IoStream> streamFactory;
private final Callable<IoStream> ioStreamCallable;
private final LinkManager linkManager; private final LinkManager linkManager;
public ConnectionStateListener listener; public ConnectionStateListener listener;
@ -34,12 +35,13 @@ public class PortHolder {
@Nullable @Nullable
private BinaryProtocol bp; private BinaryProtocol bp;
protected PortHolder(String port, LinkManager linkManager, Logger logger, Callable<IoStream> streamFactory) { protected PortHolder(String port, LinkManager linkManager, Logger logger, Callable<IoStream> streamFactory, Callable<IoStream> ioStreamCallable) {
this.port = port; this.port = port;
this.linkManager = linkManager; this.linkManager = linkManager;
dataListener = freshData -> linkManager.getEngineState().processNewData(new String(freshData), LinkManager.ENCODER); dataListener = freshData -> linkManager.getEngineState().processNewData(new String(freshData), LinkManager.ENCODER);
this.logger = logger; this.logger = logger;
this.streamFactory = streamFactory; this.streamFactory = streamFactory;
this.ioStreamCallable = ioStreamCallable;
} }
boolean connectAndReadConfiguration() { boolean connectAndReadConfiguration() {
@ -48,13 +50,11 @@ public class PortHolder {
MessagesCentral.getInstance().postMessage(logger, getClass(), "Opening port: " + port); MessagesCentral.getInstance().postMessage(logger, getClass(), "Opening port: " + port);
stream = streamFactory.call(); stream = ioStreamCallable.call();
if (stream == null) { if (stream == null) {
// error already reported // error already reported
return false; return false;
} }
IncomingDataBuffer dataBuffer = IncomingDataBuffer.createDataBuffer(stream, logger);
stream.setDataBuffer(dataBuffer);
synchronized (portLock) { synchronized (portLock) {
bp = new BinaryProtocol(linkManager, logger, stream, stream.getDataBuffer()); bp = new BinaryProtocol(linkManager, logger, stream, stream.getDataBuffer());
portLock.notifyAll(); portLock.notifyAll();

View File

@ -3,6 +3,7 @@ package com.rusefi.io.serial;
import com.opensr5.Logger; import com.opensr5.Logger;
import com.rusefi.Callable; import com.rusefi.Callable;
import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.binaryprotocol.IncomingDataBuffer;
import com.rusefi.core.MessagesCentral; import com.rusefi.core.MessagesCentral;
import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.ConnectionStateListener;
import com.rusefi.io.IoStream; import com.rusefi.io.IoStream;
@ -23,7 +24,21 @@ public class SerialConnector implements LinkConnector {
this.linkManager = linkManager; this.linkManager = linkManager;
this.logger = logger; this.logger = logger;
portHolder = new PortHolder(portName, linkManager, logger, streamFactory); Callable<IoStream> ioStreamCallable = new Callable<IoStream>() {
@Override
public IoStream call() {
IoStream stream = streamFactory.call();
if (stream == null) {
// error already reported
return null;
}
IncomingDataBuffer dataBuffer = IncomingDataBuffer.createDataBuffer(stream, logger);
stream.setDataBuffer(dataBuffer);
return stream;
}
};
portHolder = new PortHolder(portName, linkManager, logger, streamFactory, ioStreamCallable);
} }
@Override @Override