race conditions are cool
This commit is contained in:
parent
126c56278b
commit
045f84b4c7
|
@ -24,7 +24,7 @@ public class BinaryProtocolProxy {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE);
|
BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void runProxy(Socket targetEcuSocket, Socket clientSocket) {
|
private static void runProxy(Socket targetEcuSocket, Socket clientSocket) {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.rusefi.io.tcp;
|
||||||
|
|
||||||
import com.opensr5.ConfigurationImage;
|
import com.opensr5.ConfigurationImage;
|
||||||
import com.opensr5.Logger;
|
import com.opensr5.Logger;
|
||||||
|
import com.rusefi.Listener;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocolCommands;
|
import com.rusefi.binaryprotocol.BinaryProtocolCommands;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocolState;
|
import com.rusefi.binaryprotocol.BinaryProtocolState;
|
||||||
import com.rusefi.binaryprotocol.IoHelper;
|
import com.rusefi.binaryprotocol.IoHelper;
|
||||||
|
@ -38,10 +39,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(LinkManager linkManager) {
|
public void start(LinkManager linkManager) {
|
||||||
start(linkManager, DEFAULT_PROXY_PORT);
|
start(linkManager, DEFAULT_PROXY_PORT, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(LinkManager linkManager, int port) {
|
public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback) {
|
||||||
logger.info("BinaryProtocolServer on " + port);
|
logger.info("BinaryProtocolServer on " + port);
|
||||||
|
|
||||||
Function<Socket, Runnable> clientSocketRunnableFactory = clientSocket -> () -> {
|
Function<Socket, Runnable> clientSocketRunnableFactory = clientSocket -> () -> {
|
||||||
|
@ -52,10 +53,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, logger);
|
tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, logger, serverSocketCreationCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void tcpServerSocket(int port, String threadName, Function<Socket, Runnable> clientSocketRunnableFactory, final Logger logger) {
|
public static void tcpServerSocket(int port, String threadName, Function<Socket, Runnable> clientSocketRunnableFactory, final Logger logger, Listener serverSocketCreationCallback) {
|
||||||
Runnable runnable = new Runnable() {
|
Runnable runnable = new Runnable() {
|
||||||
@SuppressWarnings("InfiniteLoopStatement")
|
@SuppressWarnings("InfiniteLoopStatement")
|
||||||
@Override
|
@Override
|
||||||
|
@ -67,6 +68,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
|
||||||
logger.error("Error binding server socket" + e);
|
logger.error("Error binding server socket" + e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (serverSocketCreationCallback!=null)
|
||||||
|
serverSocketCreationCallback.onResult(null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.rusefi.io;
|
||||||
import com.opensr5.ConfigurationImage;
|
import com.opensr5.ConfigurationImage;
|
||||||
import com.opensr5.Logger;
|
import com.opensr5.Logger;
|
||||||
import com.opensr5.ini.field.ScalarIniField;
|
import com.opensr5.ini.field.ScalarIniField;
|
||||||
|
import com.rusefi.Listener;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocolState;
|
import com.rusefi.binaryprotocol.BinaryProtocolState;
|
||||||
import com.rusefi.config.Field;
|
import com.rusefi.config.Field;
|
||||||
|
@ -56,7 +57,7 @@ public class TcpCommunicationIntegrationTest {
|
||||||
int value = 239;
|
int value = 239;
|
||||||
ConfigurationImage serverImage = prepareImage(value, iniField);
|
ConfigurationImage serverImage = prepareImage(value, iniField);
|
||||||
int port = 6100;
|
int port = 6100;
|
||||||
BinaryProtocolServer server = createVirtualController(serverImage, port);
|
BinaryProtocolServer server = createVirtualController(serverImage, port, null);
|
||||||
|
|
||||||
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
||||||
|
|
||||||
|
@ -88,13 +89,27 @@ public class TcpCommunicationIntegrationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProxy() throws InterruptedException, IOException {
|
public void testProxy() throws InterruptedException {
|
||||||
ConfigurationImage serverImage = prepareImage(239, createIniField(Fields.CYLINDERSCOUNT));
|
ConfigurationImage serverImage = prepareImage(239, createIniField(Fields.CYLINDERSCOUNT));
|
||||||
int controllerPort = 6102;
|
int controllerPort = 6102;
|
||||||
BinaryProtocolServer server = createVirtualController(serverImage, controllerPort);
|
|
||||||
|
CountDownLatch serverCreated = new CountDownLatch(1);
|
||||||
|
BinaryProtocolServer server = createVirtualController(serverImage, controllerPort, new Listener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(Object parameter) {
|
||||||
|
serverCreated.countDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertTrue(serverCreated.await(30, TimeUnit.SECONDS));
|
||||||
int proxyPort = 6103;
|
int proxyPort = 6103;
|
||||||
|
|
||||||
BinaryProtocolProxy.createProxy(new Socket("localhost", controllerPort), proxyPort);
|
Socket targetEcuSocket;
|
||||||
|
try {
|
||||||
|
targetEcuSocket = new Socket(LOCALHOST, controllerPort);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort);
|
||||||
|
}
|
||||||
|
BinaryProtocolProxy.createProxy(targetEcuSocket, proxyPort);
|
||||||
|
|
||||||
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1);
|
||||||
|
|
||||||
|
@ -121,7 +136,7 @@ public class TcpCommunicationIntegrationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port) {
|
private BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback) {
|
||||||
BinaryProtocolState state = new BinaryProtocolState();
|
BinaryProtocolState state = new BinaryProtocolState();
|
||||||
state.setController(ci);
|
state.setController(ci);
|
||||||
state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]);
|
state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]);
|
||||||
|
@ -129,7 +144,7 @@ public class TcpCommunicationIntegrationTest {
|
||||||
LinkManager linkManager = new LinkManager(LOGGER);
|
LinkManager linkManager = new LinkManager(LOGGER);
|
||||||
linkManager.setConnector(LinkConnector.getDetachedConnector(state));
|
linkManager.setConnector(LinkConnector.getDetachedConnector(state));
|
||||||
BinaryProtocolServer server = new BinaryProtocolServer(LOGGER);
|
BinaryProtocolServer server = new BinaryProtocolServer(LOGGER);
|
||||||
server.start(linkManager, port);
|
server.start(linkManager, port, serverSocketCreationCallback);
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue