diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000..98e0e8c
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1 @@
+d273b74b6b3f4a87cde3d5503e6f3c2f326c2ad9
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 2580543..7cf27ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,18 +2,18 @@
/client/build
/integration-tests/build
/out
-/ideabuild/
-/eclipse
/opt
/cache
/ivysettings.xml
/foo.txt
/foo.xml
-/.idea
-*.iml
/nanofix.ipr
.gradle/
+/.idea/
+*.iml
+!.idea/codeStyleSettings.xml
+
nanofix-client/build/
diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
index 08c019e..d0a46c0 100644
--- a/.idea/codeStyleSettings.xml
+++ b/.idea/codeStyleSettings.xml
@@ -183,13 +183,6 @@
-
-
-
-
-
-
-
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index 54b5504..b38747f 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -15,8 +15,14 @@
~ limitations under the License.
-->
-
+
+
+
+
+
@@ -89,11 +95,14 @@
-
+
+
-
+
diff --git a/integration-tests/src/test/java/com/lmax/nanofix/integration/ConnectionNotificationsIntegrationTest.java b/integration-tests/src/test/java/com/lmax/nanofix/integration/ConnectionNotificationsIntegrationTest.java
index 5aaf092..02df27f 100644
--- a/integration-tests/src/test/java/com/lmax/nanofix/integration/ConnectionNotificationsIntegrationTest.java
+++ b/integration-tests/src/test/java/com/lmax/nanofix/integration/ConnectionNotificationsIntegrationTest.java
@@ -34,15 +34,13 @@
import org.junit.Assert;
import org.junit.Test;
-public class ConnectionNotificationsIntegrationTest
-{
+public class ConnectionNotificationsIntegrationTest {
private ReadableByteChannel readableByteChannel;
private WritableByteChannel writableByteChannel;
private ByteArrayOutputStream byteArrayOutputStream;
@Test
- public void shouldNotifyOnConnectionEstablished() throws Exception
- {
+ public void shouldNotifyOnConnectionEstablished() throws Exception {
FixClient fixClient;
final Lock lock = new ReentrantLock();
@@ -55,23 +53,19 @@ public void shouldNotifyOnConnectionEstablished() throws Exception
fixClient = FixClientFactory.createFixClient(new IntegrationSocketFactory(readableByteChannel, writableByteChannel));
fixClient.registerTransportObserver(new SignallingConnectionObserver(lock, connectionEstablishedCondition, connectionClosedCondition));
- try
- {
+ try {
//when
lock.lock();
fixClient.connect();
final boolean connectionEstablished = connectionEstablishedCondition.await(5, TimeUnit.SECONDS);
Assert.assertTrue(connectionEstablished);
- }
- finally
- {
+ } finally {
lock.unlock();
}
}
@Test
- public void shouldNotifyOnConnectionClosed() throws Exception
- {
+ public void shouldNotifyOnConnectionClosed() throws Exception {
FixClient fixClient;
final Lock lock = new ReentrantLock();
@@ -84,18 +78,14 @@ public void shouldNotifyOnConnectionClosed() throws Exception
fixClient = FixClientFactory.createFixClient(new IntegrationSocketFactory(readableByteChannel, writableByteChannel));
fixClient.registerTransportObserver(new SignallingConnectionObserver(lock, connectionEstablishedCondition, connectionClosedCondition));
- try
- {
+ try {
//when
lock.lock();
fixClient.connect();
final boolean connectionClosed = connectionClosedCondition.await(5, TimeUnit.SECONDS);
Assert.assertTrue(connectionClosed);
- }
- finally
- {
+ } finally {
lock.unlock();
}
}
-
}
diff --git a/integration-tests/src/test/java/com/lmax/nanofix/integration/FixClientLifecycleTest.java b/integration-tests/src/test/java/com/lmax/nanofix/integration/FixClientLifecycleTest.java
index 786e2d8..9663dd3 100644
--- a/integration-tests/src/test/java/com/lmax/nanofix/integration/FixClientLifecycleTest.java
+++ b/integration-tests/src/test/java/com/lmax/nanofix/integration/FixClientLifecycleTest.java
@@ -31,11 +31,9 @@
import static org.junit.Assert.assertFalse;
-public class FixClientLifecycleTest
-{
+public class FixClientLifecycleTest {
@Test
- public void shouldBeAbleToStartListeningAgainAfterFirstStartingAndThenStopping() throws InterruptedException
- {
+ public void shouldBeAbleToStartListeningAgainAfterFirstStartingAndThenStopping() throws InterruptedException {
Lock lock = new ReentrantLock();
final Condition connectionClosedCondition = lock.newCondition();
final Condition connectionEstablishedCondition = lock.newCondition();
@@ -46,8 +44,7 @@ public void shouldBeAbleToStartListeningAgainAfterFirstStartingAndThenStopping()
fixClient.listen();
- try
- {
+ try {
lock.lock();
final FixClient fixClient2 = FixClientFactory.createFixClient("localhost", 9990);
fixClient2.connect();
@@ -57,16 +54,13 @@ public void shouldBeAbleToStartListeningAgainAfterFirstStartingAndThenStopping()
final boolean connectionClosed = connectionClosedCondition.await(5, TimeUnit.SECONDS);
Assert.assertTrue(connectionClosed);
fixClient.listen();
- }
- finally
- {
+ } finally {
lock.unlock();
}
}
@Test
- public void shouldBeSafeToCloseAFixClientWhichHasNotLoggedOn()
- {
+ public void shouldBeSafeToCloseAFixClientWhichHasNotLoggedOn() {
// Passes by merit of not throwing an exception
final FixClient fixClient = FixClientFactory.createFixClient(new IntegrationSocketFactory(null, null));
@@ -74,8 +68,7 @@ public void shouldBeSafeToCloseAFixClientWhichHasNotLoggedOn()
}
@Test
- public void shouldReportAnUnconnectedFixClientAsNotConnected()
- {
+ public void shouldReportAnUnconnectedFixClientAsNotConnected() {
final FixClient fixClient = FixClientFactory.createFixClient(new IntegrationSocketFactory(null, null));
assertFalse(fixClient.isConnected());
}
diff --git a/integration-tests/src/test/java/com/lmax/nanofix/integration/ReceivingFixMessagesTest.java b/integration-tests/src/test/java/com/lmax/nanofix/integration/ReceivingFixMessagesTest.java
index b935327..feb6a06 100644
--- a/integration-tests/src/test/java/com/lmax/nanofix/integration/ReceivingFixMessagesTest.java
+++ b/integration-tests/src/test/java/com/lmax/nanofix/integration/ReceivingFixMessagesTest.java
@@ -38,8 +38,7 @@
import static org.hamcrest.Matchers.is;
-public class ReceivingFixMessagesTest
-{
+public class ReceivingFixMessagesTest {
private static final String EXPECTED_MSG_1 = "8=FIX.4.2\u00019=65\u000135=A\u000149=SERVER\u000156=CLIENT\u000134=177\u000152=20090107-18:15:16\u000198=0\u0001108=30\u000110=062\u0001";
private static final String EXPECTED_MSG_2 = "8=FIX.4.2\u00019=65\u000135=A\u000149=SERVER\u000156=CLIENT\u000134=177\u000134=178\u000152=20090107-18:15:16\u000198=0\u0001108=30" +
@@ -50,16 +49,14 @@ public class ReceivingFixMessagesTest
private ByteArrayOutputStream byteArrayOutputStream;
@Before
- public void setUp() throws Exception
- {
+ public void setUp() throws Exception {
byteArrayOutputStream = new ByteArrayOutputStream();
writableByteChannel = Channels.newChannel(byteArrayOutputStream);
countDownLatch = new CountDownLatch(1);
}
@Test
- public void shouldGetFixMessages() throws Exception
- {
+ public void shouldGetFixMessages() throws Exception {
readableByteChannel = Channels.newChannel(new ByteArrayInputStream(EXPECTED_MSG_1.getBytes()));
final FixClient fixClient = buildFixClient();
fixClient.subscribeToAllMessages(new AssertingFixMessageHandler(EXPECTED_MSG_1));
@@ -69,8 +66,7 @@ public void shouldGetFixMessages() throws Exception
}
@Test
- public void shouldGetFixMessageWithDuplicateKey() throws Exception
- {
+ public void shouldGetFixMessageWithDuplicateKey() throws Exception {
readableByteChannel = Channels.newChannel(new ByteArrayInputStream(EXPECTED_MSG_2.getBytes()));
final FixClient fixClient = buildFixClient();
fixClient.subscribeToAllMessages(new AssertingFixMessageHandler(EXPECTED_MSG_2));
@@ -80,8 +76,7 @@ public void shouldGetFixMessageWithDuplicateKey() throws Exception
}
@Test
- public void shouldSendFixMessage() throws Exception
- {
+ public void shouldSendFixMessage() throws Exception {
readableByteChannel = Channels.newChannel(new ByteArrayInputStream(new byte[0]));
final FixClient fixClient = buildFixClient();
fixClient.connect();
@@ -92,32 +87,24 @@ public void shouldSendFixMessage() throws Exception
Assert.assertThat(byteArrayOutputStream.toString(), is("8=FIX.4.4\u00019=15\u000135=W\u000145=3\u000145=7\u000110=179\u0001"));
}
- private final class AssertingFixMessageHandler implements FixMessageHandler
- {
+ private final class AssertingFixMessageHandler implements FixMessageHandler {
private final String expectedMessage;
- private AssertingFixMessageHandler(final String expectedMessage)
- {
+ private AssertingFixMessageHandler(final String expectedMessage) {
this.expectedMessage = expectedMessage;
}
@Override
- public void onFixMessage(final FixMessage fixMessage)
- {
- if (expectedMessage.equals(fixMessage.toFixString()))
- {
+ public void onFixMessage(final FixMessage fixMessage) {
+ if (expectedMessage.equals(fixMessage.toFixString())) {
countDownLatch.countDown();
- }
- else
- {
+ } else {
throw new RuntimeException("Expected: '" + expectedMessage + "' message does not match actual: " + fixMessage.toFixString());
}
-
}
}
- private FixClient buildFixClient()
- {
+ private FixClient buildFixClient() {
return FixClientFactory.createFixClient(new IntegrationSocketFactory(readableByteChannel, writableByteChannel));
}
}
diff --git a/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/IntegrationSocketFactory.java b/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/IntegrationSocketFactory.java
index b5c0d7f..8522684 100644
--- a/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/IntegrationSocketFactory.java
+++ b/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/IntegrationSocketFactory.java
@@ -33,38 +33,29 @@
import com.lmax.nanofix.transport.DelegatingServerSocketChannel;
import com.lmax.nanofix.transport.SocketFactory;
-public class IntegrationSocketFactory implements SocketFactory
-{
+public class IntegrationSocketFactory implements SocketFactory {
private ReadableByteChannel readableByteChannel;
private WritableByteChannel writableByteChannel;
final ExecutorService executorService = Executors.newSingleThreadExecutor();
- public IntegrationSocketFactory(final ReadableByteChannel readableByteChannel, final WritableByteChannel writableByteChannel)
- {
+ public IntegrationSocketFactory(final ReadableByteChannel readableByteChannel, final WritableByteChannel writableByteChannel) {
this.readableByteChannel = readableByteChannel;
this.writableByteChannel = writableByteChannel;
}
@Override
- public DelegatingServerSocketChannel bind(final InetSocketAddress socketAddress)
- {
+ public DelegatingServerSocketChannel bind(final InetSocketAddress socketAddress) {
return new StubServerSocketChannel();
}
@Override
- public void createSocketOnIncomingConnection(final DelegatingServerSocketChannel serverSocketChannel, final SocketEstablishedCallback socketEstablishedCallback)
- {
- executorService.submit(new Runnable()
- {
+ public void createSocketOnIncomingConnection(final DelegatingServerSocketChannel serverSocketChannel, final SocketEstablishedCallback socketEstablishedCallback) {
+ executorService.submit(new Runnable() {
@Override
- public void run()
- {
- try
- {
+ public void run() {
+ try {
socketEstablishedCallback.onSocketEstablished(serverSocketChannel.accept());
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
System.err.println("Exception thrown: ");
e.printStackTrace(System.err);
}
@@ -73,20 +64,14 @@ public void run()
}
@Override
- public void createSocketOnOutgoingConnection(final InetSocketAddress socketAddress, final SocketEstablishedCallback socketEstablishedCallback)
- {
+ public void createSocketOnOutgoingConnection(final InetSocketAddress socketAddress, final SocketEstablishedCallback socketEstablishedCallback) {
final ByteChannel byteChannel = createByteChannel(readableByteChannel, writableByteChannel);
- executorService.submit(new Runnable()
- {
+ executorService.submit(new Runnable() {
@Override
- public void run()
- {
- try
- {
+ public void run() {
+ try {
socketEstablishedCallback.onSocketEstablished(new StubSocketChannel(byteChannel));
- }
- catch (RuntimeException e)
- {
+ } catch (RuntimeException e) {
System.err.println("Exception thrown: ");
e.printStackTrace(System.err);
}
@@ -94,176 +79,145 @@ public void run()
});
}
- private ByteChannel createByteChannel(final ReadableByteChannel readableByteChannel, final WritableByteChannel writableByteChannel)
- {
- return new ByteChannel()
- {
+ private ByteChannel createByteChannel(final ReadableByteChannel readableByteChannel, final WritableByteChannel writableByteChannel) {
+ return new ByteChannel() {
@Override
- public int read(final ByteBuffer dst) throws IOException
- {
+ public int read(final ByteBuffer dst) throws IOException {
return readableByteChannel.read(dst);
}
@Override
- public int write(final ByteBuffer src) throws IOException
- {
+ public int write(final ByteBuffer src) throws IOException {
return writableByteChannel.write(src);
}
@Override
- public boolean isOpen()
- {
+ public boolean isOpen() {
return true;
}
@Override
- public void close() throws IOException
- {
+ public void close() throws IOException {
}
};
}
- private static class StubSocketChannel extends SocketChannel
- {
+ private static class StubSocketChannel extends SocketChannel {
private final ByteChannel byteChannel;
- StubSocketChannel(final ByteChannel byteChannel)
- {
+ StubSocketChannel(final ByteChannel byteChannel) {
super(null);
this.byteChannel = byteChannel;
}
@Override
- public SocketChannel bind(SocketAddress local) throws IOException
- {
+ public SocketChannel bind(SocketAddress local) throws IOException {
return null;
}
@Override
- public SocketChannel setOption(SocketOption name, T value) throws IOException
- {
+ public SocketChannel setOption(SocketOption name, T value) throws IOException {
return null;
}
@Override
- public T getOption(SocketOption name) throws IOException
- {
+ public T getOption(SocketOption name) throws IOException {
return null;
}
@Override
- public Set> supportedOptions()
- {
+ public Set> supportedOptions() {
return null;
}
@Override
- public SocketChannel shutdownInput() throws IOException
- {
+ public SocketChannel shutdownInput() throws IOException {
return null;
}
@Override
- public SocketChannel shutdownOutput() throws IOException
- {
+ public SocketChannel shutdownOutput() throws IOException {
return null;
}
@Override
- public Socket socket()
- {
+ public Socket socket() {
return null;
}
@Override
- public boolean isConnected()
- {
+ public boolean isConnected() {
return true;
}
@Override
- public boolean isConnectionPending()
- {
+ public boolean isConnectionPending() {
return false;
}
@Override
- public boolean connect(final SocketAddress remote) throws IOException
- {
+ public boolean connect(final SocketAddress remote) throws IOException {
return true;
}
@Override
- public boolean finishConnect() throws IOException
- {
+ public boolean finishConnect() throws IOException {
return true;
}
@Override
- public SocketAddress getRemoteAddress() throws IOException
- {
+ public SocketAddress getRemoteAddress() throws IOException {
return null;
}
@Override
- public int read(final ByteBuffer dst) throws IOException
- {
+ public int read(final ByteBuffer dst) throws IOException {
return byteChannel.read(dst);
}
@Override
- public long read(final ByteBuffer[] dsts, final int offset, final int length) throws IOException
- {
+ public long read(final ByteBuffer[] dsts, final int offset, final int length) throws IOException {
throw new UnsupportedOperationException("Not supported");
}
@Override
- public int write(final ByteBuffer src) throws IOException
- {
+ public int write(final ByteBuffer src) throws IOException {
return byteChannel.write(src);
}
@Override
- public long write(final ByteBuffer[] srcs, final int offset, final int length) throws IOException
- {
+ public long write(final ByteBuffer[] srcs, final int offset, final int length) throws IOException {
throw new UnsupportedOperationException("Not supported");
}
@Override
- public SocketAddress getLocalAddress() throws IOException
- {
+ public SocketAddress getLocalAddress() throws IOException {
return null;
}
@Override
- protected void implCloseSelectableChannel() throws IOException
- {
+ protected void implCloseSelectableChannel() throws IOException {
}
@Override
- protected void implConfigureBlocking(final boolean block) throws IOException
- {
+ protected void implConfigureBlocking(final boolean block) throws IOException {
}
}
- private class StubServerSocketChannel extends DelegatingServerSocketChannel
- {
+ private class StubServerSocketChannel extends DelegatingServerSocketChannel {
- StubServerSocketChannel()
- {
+ StubServerSocketChannel() {
super(null);
}
@Override
- public SocketChannel accept() throws IOException
- {
+ public SocketChannel accept() throws IOException {
return new StubSocketChannel(createByteChannel(readableByteChannel, writableByteChannel));
}
@Override
- public void close() throws IOException
- {
+ public void close() throws IOException {
}
}
diff --git a/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/SignallingConnectionObserver.java b/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/SignallingConnectionObserver.java
index 5418dfc..7bea68d 100644
--- a/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/SignallingConnectionObserver.java
+++ b/integration-tests/src/test/java/com/lmax/nanofix/integration/fixture/SignallingConnectionObserver.java
@@ -21,22 +21,19 @@
import com.lmax.nanofix.transport.ConnectionObserver;
-public class SignallingConnectionObserver implements ConnectionObserver
-{
+public class SignallingConnectionObserver implements ConnectionObserver {
private final Lock lock;
private final Condition connectionEstablishedCondition;
private final Condition connectionClosedCondition;
- public SignallingConnectionObserver(final Lock lock, final Condition connectionEstablishedCondition, final Condition connectionClosedCondition)
- {
+ public SignallingConnectionObserver(final Lock lock, final Condition connectionEstablishedCondition, final Condition connectionClosedCondition) {
this.lock = lock;
this.connectionEstablishedCondition = connectionEstablishedCondition;
this.connectionClosedCondition = connectionClosedCondition;
}
@Override
- public void connectionEstablished()
- {
+ public void connectionEstablished() {
lock.lock();
connectionEstablishedCondition.signalAll();
lock.unlock();
@@ -44,8 +41,7 @@ public void connectionEstablished()
}
@Override
- public void connectionClosed()
- {
+ public void connectionClosed() {
lock.lock();
connectionClosedCondition.signalAll();
lock.unlock();
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java b/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java
index 62c3b9a..77e8340 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/ChannelInitializer.java
@@ -30,8 +30,7 @@
import org.slf4j.LoggerFactory;
-class ChannelInitializer implements ConnectionObserver
-{
+class ChannelInitializer implements ConnectionObserver {
private static final Logger LOGGER = LoggerFactory.getLogger(ChannelInitializer.class);
private final Transport transport;
private final ByteChannelReader inputStreamReader;
@@ -41,8 +40,7 @@ class ChannelInitializer implements ConnectionObserver
private volatile CountDownLatch countDownLatch = new CountDownLatch(1);
- ChannelInitializer(final Transport transport, final ByteChannelReader inputStreamReader, final OutboundMessageHandler outboundMessageSender, Executor channelReaderExecutorService)
- {
+ ChannelInitializer(final Transport transport, final ByteChannelReader inputStreamReader, final OutboundMessageHandler outboundMessageSender, Executor channelReaderExecutorService) {
this.channelReaderExecutorService = channelReaderExecutorService;
this.transport = transport;
this.inputStreamReader = inputStreamReader;
@@ -50,21 +48,15 @@ class ChannelInitializer implements ConnectionObserver
}
@Override
- public void connectionEstablished()
- {
+ public void connectionEstablished() {
outboundMessageSender.initialiseOutboundChannel(transport.getWritableByteChannel());
- channelReaderExecutorService.execute(new Runnable()
- {
+ channelReaderExecutorService.execute(new Runnable() {
@Override
- public void run()
- {
+ public void run() {
final ReadableByteChannel readableByteChannel = transport.getReadableByteChannel();
- try
- {
+ try {
inputStreamReader.blockingStart(readableByteChannel);
- }
- catch (RuntimeException e)
- {
+ } catch (RuntimeException e) {
LOGGER.error("Exception thrown while reading from stream, channel: " + readableByteChannel, e);
}
}
@@ -72,19 +64,16 @@ public void run()
countDownLatch.countDown();
}
- public void awaitConnection() throws InterruptedException
- {
+ public void awaitConnection() throws InterruptedException {
countDownLatch.await();
}
- public boolean awaitConnection(final long timeout, final TimeUnit units) throws InterruptedException
- {
+ public boolean awaitConnection(final long timeout, final TimeUnit units) throws InterruptedException {
return countDownLatch.await(timeout, units);
}
@Override
- public void connectionClosed()
- {
+ public void connectionClosed() {
countDownLatch.countDown();
countDownLatch = new CountDownLatch(1);
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java
index 8eed1c7..307d983 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixClient.java
@@ -29,8 +29,7 @@
/**
* The main class used to interact with the fix client.
*/
-public class FixClient
-{
+public class FixClient {
private final FixMessagePublisher fixMessagePublisher;
private final ChannelInitializer channelInitializer;
private final TransportOperations transportOps;
@@ -38,8 +37,7 @@ public class FixClient
private final ThreadBlocker messageConsumingThreadBlocker;
FixClient(final FixMessagePublisher fixMessagePublisher, final ChannelInitializer channelInitializer, final TransportOperations transportOps,
- final FixSession fixSession, final ThreadBlocker messageConsumingThreadBlocker)
- {
+ final FixSession fixSession, final ThreadBlocker messageConsumingThreadBlocker) {
this.fixMessagePublisher = fixMessagePublisher;
this.channelInitializer = channelInitializer;
this.transportOps = transportOps;
@@ -52,8 +50,7 @@ public class FixClient
*
* @param messages a collection of messages.
*/
- public void send(final Collection messages)
- {
+ public void send(final Collection messages) {
fixSession.send(messages);
}
@@ -62,8 +59,7 @@ public void send(final Collection messages)
*
* @param message a FIX messages.
*/
- public void send(final FixMessage message)
- {
+ public void send(final FixMessage message) {
fixSession.send(message);
}
@@ -72,8 +68,7 @@ public void send(final FixMessage message)
*
* @param message a FIX messages.
*/
- public void send(final String message)
- {
+ public void send(final String message) {
fixSession.send(message);
}
@@ -82,23 +77,18 @@ public void send(final String message)
*
* @param bytes a FIX messages.
*/
- public void send(final byte[] bytes)
- {
+ public void send(final byte[] bytes) {
fixSession.send(bytes);
}
/**
* Initiates a TCP connection with the remote host specified on construction..
*/
- public void connect()
- {
+ public void connect() {
transportOps.connect();
- try
- {
+ try {
channelInitializer.awaitConnection();
- }
- catch (InterruptedException e)
- {
+ } catch (InterruptedException e) {
throw new RuntimeException("Interrupted while waiting for channel initialization");
}
}
@@ -109,15 +99,11 @@ public void connect()
* @param timeout the time to wait for a connection to be established
* @param units the {@link TimeUnit unit} of the timeout
*/
- public boolean connect(final long timeout, final TimeUnit units)
- {
+ public boolean connect(final long timeout, final TimeUnit units) {
transportOps.connect();
- try
- {
+ try {
return channelInitializer.awaitConnection(timeout, units);
- }
- catch (InterruptedException e)
- {
+ } catch (InterruptedException e) {
throw new RuntimeException("Interrupted while waiting for channel initialization");
}
}
@@ -125,48 +111,42 @@ public boolean connect(final long timeout, final TimeUnit units)
/**
* Waits for an inbound TCP connection on the interface and port specified on construction.
*/
- public void listen()
- {
+ public void listen() {
transportOps.listen();
}
/**
* Stops listening on the TCP socket.
*/
- public void stopListening()
- {
+ public void stopListening() {
transportOps.stopListening();
}
/**
* Terminates the TCP connection with a TCP ( RST, ACK).
*/
- public void killSocket()
- {
+ public void killSocket() {
transportOps.killSocket();
}
/**
* Attempts to gracefully close the TCP socket.
*/
- public void close()
- {
+ public void close() {
transportOps.close();
}
/**
* Checks if the transport is connected.
*/
- public boolean isConnected()
- {
+ public boolean isConnected() {
return transportOps.isConnected();
}
/**
* Blocks until a connection is established.
*/
- public void awaitConnection() throws InterruptedException
- {
+ public void awaitConnection() throws InterruptedException {
channelInitializer.awaitConnection();
}
@@ -175,8 +155,7 @@ public void awaitConnection() throws InterruptedException
*
* @param connectionObserver receives connection events.
*/
- public void registerTransportObserver(ConnectionObserver connectionObserver)
- {
+ public void registerTransportObserver(ConnectionObserver connectionObserver) {
transportOps.registerTransportObserver(connectionObserver);
}
@@ -185,34 +164,28 @@ public void registerTransportObserver(ConnectionObserver connectionObserver)
*
* @param connectionObserver receives connection events.
*/
- public void unregisterTransportObserver(ConnectionObserver connectionObserver)
- {
+ public void unregisterTransportObserver(ConnectionObserver connectionObserver) {
transportOps.unregisterTransportObserver(connectionObserver);
}
/**
* Subscribe to all inbound messages.
*/
- public void subscribeToAllMessages(final FixMessageHandler fixMessageHandler)
- {
+ public void subscribeToAllMessages(final FixMessageHandler fixMessageHandler) {
fixMessagePublisher.subscribeToAllMessages(fixMessageHandler);
}
/**
* Stop reading messages from the transport's byte channel
*/
- public void pauseMessageConsumer()
- {
+ public void pauseMessageConsumer() {
messageConsumingThreadBlocker.pause();
}
/**
* Resume reading messages from the transport's byte channel
*/
- public void resumeMessageConsumer()
- {
+ public void resumeMessageConsumer() {
messageConsumingThreadBlocker.resume();
}
-
-
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java
index dddb616..a2973de 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientConfiguration.java
@@ -23,20 +23,17 @@
import com.lmax.nanofix.transport.AsyncTcpSocketFactory;
import com.lmax.nanofix.transport.SocketFactory;
-public final class FixClientConfiguration
-{
+public final class FixClientConfiguration {
private final InetSocketAddress socketAddress;
private SystemConfig systemConfig = new SystemConfig(false);
private SocketFactory socketFactory = new AsyncTcpSocketFactory(Executors.newSingleThreadExecutor(new NamedThreadFactory("InboundConnection", true, FixClientFactory.UNCAUGHT_EXCEPTION_HANDLER)));
private int maxMessageSize = 2000;
- public static FixClientConfiguration createListeningFixClient(final int port)
- {
+ public static FixClientConfiguration createListeningFixClient(final int port) {
return new FixClientConfiguration(port);
}
- public static FixClientConfiguration createInitiatingFixClient(final String host, final int port)
- {
+ public static FixClientConfiguration createInitiatingFixClient(final String host, final int port) {
return new FixClientConfiguration(host, port);
}
@@ -45,8 +42,7 @@ public static FixClientConfiguration createInitiatingFixClient(final String host
*
* @param port tcp port number int between 0 and 65535
*/
- private FixClientConfiguration(final int port)
- {
+ private FixClientConfiguration(final int port) {
this.socketAddress = new InetSocketAddress(port);
}
@@ -56,8 +52,7 @@ private FixClientConfiguration(final int port)
* @param host hostname of server to connect to.
* @param port tcp port number int between 0 and 65535
*/
- private FixClientConfiguration(final String host, final int port)
- {
+ private FixClientConfiguration(final String host, final int port) {
this.socketAddress = new InetSocketAddress(host, port);
}
@@ -65,14 +60,12 @@ private FixClientConfiguration(final String host, final int port)
* @param stayListening when set to true, Nanofix will continue listening for additional inbound connections
* after an existing connection is dropped.
*/
- public FixClientConfiguration stayListening(final boolean stayListening)
- {
+ public FixClientConfiguration stayListening(final boolean stayListening) {
this.systemConfig = new SystemConfig(stayListening);
return this;
}
- public FixClientConfiguration socketFactory(final SocketFactory socketFactory)
- {
+ public FixClientConfiguration socketFactory(final SocketFactory socketFactory) {
this.socketFactory = socketFactory;
return this;
}
@@ -80,29 +73,24 @@ public FixClientConfiguration socketFactory(final SocketFactory socketFactory)
/**
* @param maxMessageSize Size of the underlying buffer to be used by Nanofix (in bytes)
*/
- public FixClientConfiguration maxMessageSize(final int maxMessageSize)
- {
+ public FixClientConfiguration maxMessageSize(final int maxMessageSize) {
this.maxMessageSize = maxMessageSize;
return this;
}
- public InetSocketAddress getSocketAddress()
- {
+ public InetSocketAddress getSocketAddress() {
return socketAddress;
}
- public SystemConfig getSystemConfig()
- {
+ public SystemConfig getSystemConfig() {
return systemConfig;
}
- public SocketFactory getSocketFactory()
- {
+ public SocketFactory getSocketFactory() {
return socketFactory;
}
- public int getMaxMessageSize()
- {
+ public int getMaxMessageSize() {
return maxMessageSize;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java
index 4008602..1f9cbcc 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixClientFactory.java
@@ -39,21 +39,17 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public final class FixClientFactory
-{
+public final class FixClientFactory {
private static final Logger LOGGER = LoggerFactory.getLogger(FixClientFactory.class);
- static final Thread.UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER = new Thread.UncaughtExceptionHandler()
- {
+ static final Thread.UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER = new Thread.UncaughtExceptionHandler() {
@Override
- public void uncaughtException(Thread thread, Throwable throwable)
- {
+ public void uncaughtException(Thread thread, Throwable throwable) {
LOGGER.error("Uncaught Exception thrown in thread: " + thread.getName(), throwable);
}
};
- private FixClientFactory()
- {
+ private FixClientFactory() {
}
/**
@@ -67,8 +63,7 @@ private FixClientFactory()
* @param host hostname of server to connect to.
* @param port tcp port number int between 0 and 65535
*/
- public static FixClient createFixClient(final String host, final int port)
- {
+ public static FixClient createFixClient(final String host, final int port) {
return createFixClient(new InetSocketAddress(host, port), new SystemConfig(false));
}
@@ -77,8 +72,7 @@ public static FixClient createFixClient(final String host, final int port)
*
* @param port tcp port number int between 0 and 65535
*/
- public static FixClient createFixClient(final int port)
- {
+ public static FixClient createFixClient(final int port) {
return createFixClient(new InetSocketAddress(port), new SystemConfig(false));
}
@@ -89,13 +83,11 @@ public static FixClient createFixClient(final int port)
* @param port tcp port number int between 0 and 65535
* @param systemConfig additional NanoFix configuration
*/
- public static FixClient createFixClient(final String host, final int port, final SystemConfig systemConfig)
- {
+ public static FixClient createFixClient(final String host, final int port, final SystemConfig systemConfig) {
return createFixClient(new InetSocketAddress(host, port), systemConfig);
}
- public static FixClient createFixClient(final SocketFactory socketFactory)
- {
+ public static FixClient createFixClient(final SocketFactory socketFactory) {
final PublishingConnectionObserver publishingTransportObserver = new PublishingConnectionObserver();
final TcpTransport transport = new TcpTransport(publishingTransportObserver, null, socketFactory, new TransportConfigImpl(false));
publishingTransportObserver.addObserver(transport);
@@ -107,8 +99,7 @@ public static FixClient createFixClient(final SocketFactory socketFactory)
*
* @param fixClientConfiguration Contains configuration that determines the type of {@link FixClient}
*/
- public static FixClient createFixClient(final FixClientConfiguration fixClientConfiguration)
- {
+ public static FixClient createFixClient(final FixClientConfiguration fixClientConfiguration) {
final InetSocketAddress socketAddress = fixClientConfiguration.getSocketAddress();
final SocketFactory socketFactory = fixClientConfiguration.getSocketFactory();
final SystemConfig systemConfig = fixClientConfiguration.getSystemConfig();
@@ -120,8 +111,7 @@ public static FixClient createFixClient(final FixClientConfiguration fixClientCo
return buildFixClient(transport, publishingTransportObserver, maxMessageSize);
}
- private static FixClient createFixClient(final InetSocketAddress socketAddress, final SystemConfig systemConfig)
- {
+ private static FixClient createFixClient(final InetSocketAddress socketAddress, final SystemConfig systemConfig) {
final PublishingConnectionObserver publishingTransportObserver = new PublishingConnectionObserver();
final ExecutorService executorService = Executors.newSingleThreadExecutor(new NamedThreadFactory("InboundConnection", true, UNCAUGHT_EXCEPTION_HANDLER));
@@ -131,8 +121,7 @@ private static FixClient createFixClient(final InetSocketAddress socketAddress,
return buildFixClient(transport, publishingTransportObserver, MAX_MESSAGE_SIZE);
}
- private static FixClient buildFixClient(final Transport transport, final PublishingConnectionObserver publishingTransportObserver, final int maxMessageSize)
- {
+ private static FixClient buildFixClient(final Transport transport, final PublishingConnectionObserver publishingTransportObserver, final int maxMessageSize) {
final FixStreamMessageParser fixStreamMessageParser = new FixStreamMessageParser(maxMessageSize);
final ThreadBlocker messageConsumingThreadBlocker = new ThreadBlocker();
final FixMessagePublisher fixMessagePublisher = new FixMessagePublisher();
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java
index 1c3bfe3..022875d 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixSession.java
@@ -22,34 +22,28 @@
import com.lmax.nanofix.outgoing.FixMessage;
import com.lmax.nanofix.outgoing.OutboundMessageHandler;
-public class FixSession
-{
+public class FixSession {
private int outboundSequenceNumber;
private OutboundMessageHandler outboundMessageSender;
- public FixSession(final OutboundMessageHandler outboundMessageSender)
- {
+ public FixSession(final OutboundMessageHandler outboundMessageSender) {
this.outboundMessageSender = outboundMessageSender;
this.outboundSequenceNumber = 1;
}
- public void send(final Collection messages)
- {
+ public void send(final Collection messages) {
outboundMessageSender.send(messages);
}
- public void send(final FixMessage message)
- {
+ public void send(final FixMessage message) {
outboundMessageSender.send(message);
}
- public void send(final String message)
- {
+ public void send(final String message) {
outboundMessageSender.send(message);
}
- public void send(final byte[] bytes)
- {
+ public void send(final byte[] bytes) {
outboundMessageSender.sendBytes(bytes);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java b/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java
index 62808e5..fac0dce 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/FixUtil.java
@@ -23,27 +23,22 @@
import com.lmax.nanofix.incoming.FixTagParser;
-public final class FixUtil
-{
+public final class FixUtil {
public static final Charset ASCII_CHARSET;
- static
- {
- ASCII_CHARSET = StandardCharsets.US_ASCII;
+ static {
+ ASCII_CHARSET = StandardCharsets.US_ASCII;
}
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss.SSS").withZone(ZoneOffset.UTC);
- public static Charset getCharset()
- {
+ public static Charset getCharset() {
return ASCII_CHARSET;
}
- public static byte[] newMessage(String...tags)
- {
+ public static byte[] newMessage(String... tags) {
StringBuilder sb = new StringBuilder();
- for (int i = 0, n = tags.length; i < n; i++)
- {
+ for (int i = 0, n = tags.length; i < n; i++) {
sb.append(tags[i]);
sb.append(FixTagParser.SOH);
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/SystemConfig.java b/nanofix-client/src/main/java/com/lmax/nanofix/SystemConfig.java
index 313dbbc..9096302 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/SystemConfig.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/SystemConfig.java
@@ -18,22 +18,19 @@
import com.lmax.nanofix.transport.TransportConfig;
-public class SystemConfig implements TransportConfig
-{
+public class SystemConfig implements TransportConfig {
private final boolean stayListening;
/**
* @param stayListening when set to true, Nanofix will continue listening for additional inbound connections
* after an existing connection is dropped.
*/
- public SystemConfig(final boolean stayListening)
- {
+ public SystemConfig(final boolean stayListening) {
this.stayListening = stayListening;
}
@Override
- public boolean shouldStayListening()
- {
+ public boolean shouldStayListening() {
return stayListening;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/Bits.java b/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/Bits.java
index 93a3b9a..a1be8fa 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/Bits.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/Bits.java
@@ -22,8 +22,7 @@
import sun.misc.Unsafe;
-public final class Bits
-{
+public final class Bits {
public static final int SIZEOF_LONG = 8;
public static final int SIZEOF_DOUBLE = 8;
public static final int SIZEOF_INT = 4;
@@ -37,175 +36,144 @@ public final class Bits
private static final long ARRAY_BASE_OFFSET;
private static final boolean SHOULD_REVERSE;
- static
- {
- try
- {
+ static {
+ try {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
- UNSAFE = (Unsafe) f.get(null);
+ UNSAFE = (Unsafe)f.get(null);
ARRAY_BASE_OFFSET = UNSAFE.arrayBaseOffset(byte[].class);
SHOULD_REVERSE = shouldReverseBytes();
- }
- catch (Throwable e)
- {
+ } catch (Throwable e) {
throw new AssertionError();
}
}
- private Bits()
- {
+ private Bits() {
// Static class
}
- public static byte readByte(byte[] buffer, int offset)
- {
+ public static byte readByte(byte[] buffer, int offset) {
return buffer[offset];
}
- public static boolean readBoolean(byte[] buffer, int offset)
- {
+ public static boolean readBoolean(byte[] buffer, int offset) {
return buffer[offset] != 0;
}
- public static short readShort(byte[] buffer, int offset)
- {
- return (short) (((buffer[offset]) << 8) + ((buffer[offset + 1] & 0xFF)));
+ public static short readShort(byte[] buffer, int offset) {
+ return (short)(((buffer[offset]) << 8) + ((buffer[offset + 1] & 0xFF)));
}
- public static char readChar(byte[] buffer, int offset)
- {
- return (char) (((buffer[offset]) << 8) + ((buffer[offset + 1] & 0xFF)));
+ public static char readChar(byte[] buffer, int offset) {
+ return (char)(((buffer[offset]) << 8) + ((buffer[offset + 1] & 0xFF)));
}
- public static int readInt(byte[] buffer, int offset)
- {
+ public static int readInt(byte[] buffer, int offset) {
return toBigEndian(UNSAFE.getInt(buffer, ARRAY_BASE_OFFSET + offset));
}
- public static long readLong(byte[] buffer, int offset)
- {
+ public static long readLong(byte[] buffer, int offset) {
return toBigEndian(UNSAFE.getLong(buffer, ARRAY_BASE_OFFSET + offset));
}
- public static void writeByte(byte[] buffer, int offset, byte b)
- {
+ public static void writeByte(byte[] buffer, int offset, byte b) {
buffer[offset] = b;
}
- public static void writeBoolean(byte[] buffer, int offset, boolean b)
- {
- buffer[offset] = (byte) (b ? 1 : 0);
+ public static void writeBoolean(byte[] buffer, int offset, boolean b) {
+ buffer[offset] = (byte)(b ? 1 : 0);
}
- public static void writeChar(byte[] buffer, int offset, char c)
- {
- buffer[offset] = (byte) (c >>> 8);
- buffer[offset + 1] = (byte) (c);
+ public static void writeChar(byte[] buffer, int offset, char c) {
+ buffer[offset] = (byte)(c >>> 8);
+ buffer[offset + 1] = (byte)(c);
}
- public static void writeShort(byte[] buffer, int offset, short s)
- {
- buffer[offset] = (byte) (s >>> 8);
- buffer[offset + 1] = (byte) (s);
+ public static void writeShort(byte[] buffer, int offset, short s) {
+ buffer[offset] = (byte)(s >>> 8);
+ buffer[offset + 1] = (byte)(s);
}
- public static void writeInt(byte[] buffer, int offset, int i)
- {
+ public static void writeInt(byte[] buffer, int offset, int i) {
UNSAFE.putInt(buffer, ARRAY_BASE_OFFSET + offset, toBigEndian(i));
}
- public static void writeLong(byte[] buffer, int offset, long l)
- {
+ public static void writeLong(byte[] buffer, int offset, long l) {
UNSAFE.putLong(buffer, ARRAY_BASE_OFFSET + offset, toBigEndian(l));
}
- public static byte[] toByteArray(long l)
- {
+ public static byte[] toByteArray(long l) {
byte[] result = new byte[8];
writeLong(result, 0, l);
return result;
}
- public static byte[] toByteArray(int i)
- {
+ public static byte[] toByteArray(int i) {
byte[] result = new byte[4];
writeInt(result, 0, i);
return result;
}
- private static int toBigEndian(int i)
- {
+ private static int toBigEndian(int i) {
return SHOULD_REVERSE ? Integer.reverseBytes(i) : i;
}
- private static long toBigEndian(long l)
- {
+ private static long toBigEndian(long l) {
return SHOULD_REVERSE ? Long.reverseBytes(l) : l;
}
@SuppressWarnings("unused")
- public static int sizeOf(final long l)
- {
+ public static int sizeOf(final long l) {
return SIZEOF_LONG;
}
@SuppressWarnings("unused")
- public static int sizeOf(final double d)
- {
+ public static int sizeOf(final double d) {
return SIZEOF_DOUBLE;
}
@SuppressWarnings("unused")
- public static int sizeOf(final int i)
- {
+ public static int sizeOf(final int i) {
return SIZEOF_INT;
}
@SuppressWarnings("unused")
- public static int sizeOf(final float f)
- {
+ public static int sizeOf(final float f) {
return SIZEOF_FLOAT;
}
@SuppressWarnings("unused")
- public static int sizeOf(final char c)
- {
+ public static int sizeOf(final char c) {
return SIZEOF_CHAR;
}
@SuppressWarnings("unused")
- public static int sizeOf(final short s)
- {
+ public static int sizeOf(final short s) {
return SIZEOF_SHORT;
}
@SuppressWarnings("unused")
- public static int sizeOf(final byte b)
- {
+ public static int sizeOf(final byte b) {
return SIZEOF_BYTE;
}
@SuppressWarnings("unused")
- public static int sizeOf(final boolean b)
- {
+ public static int sizeOf(final boolean b) {
return SIZEOF_BOOLEAN;
}
- private static void writeLongBigEndian(byte[] buffer, int offset, long l)
- {
- buffer[offset] = (byte) (l >>> 56);
- buffer[offset + 1] = (byte) (l >>> 48);
- buffer[offset + 2] = (byte) (l >>> 40);
- buffer[offset + 3] = (byte) (l >>> 32);
- buffer[offset + 4] = (byte) (l >>> 24);
- buffer[offset + 5] = (byte) (l >>> 16);
- buffer[offset + 6] = (byte) (l >>> 8);
- buffer[offset + 7] = (byte) (l);
+ private static void writeLongBigEndian(byte[] buffer, int offset, long l) {
+ buffer[offset] = (byte)(l >>> 56);
+ buffer[offset + 1] = (byte)(l >>> 48);
+ buffer[offset + 2] = (byte)(l >>> 40);
+ buffer[offset + 3] = (byte)(l >>> 32);
+ buffer[offset + 4] = (byte)(l >>> 24);
+ buffer[offset + 5] = (byte)(l >>> 16);
+ buffer[offset + 6] = (byte)(l >>> 8);
+ buffer[offset + 7] = (byte)(l);
}
- private static boolean shouldReverseBytes()
- {
+ private static boolean shouldReverseBytes() {
final byte[] b = new byte[8];
final long expected = 98237454L;
writeLongBigEndian(b, 0, expected);
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/ByteUtil.java b/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/ByteUtil.java
index 5df0b44..e6bfea9 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/ByteUtil.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/byteoperations/ByteUtil.java
@@ -18,45 +18,38 @@
import java.nio.charset.StandardCharsets;
-public final class ByteUtil
-{
+public final class ByteUtil {
public static final int MAX_UNSIGNED_SHORT = (1 << 16) - 1;
- public static void writeLongAsAscii(final byte[] outputBuffer, final int offset, final long valueParam)
- {
+ public static void writeLongAsAscii(final byte[] outputBuffer, final int offset, final long valueParam) {
long value = valueParam;
- if (value < 0 || value > 9000000000000000000L)
- {
+ if (value < 0 || value > 9000000000000000000L) {
throw new IllegalArgumentException("Value out of range: value=" + value);
}
int outputBufferIndex = offset + 18;
long factor = 1;
- while (value >= factor)
- {
+ while (value >= factor) {
long remainder = value % (factor * 10);
- outputBuffer[outputBufferIndex--] = (byte) ((remainder / factor) + 48);
+ outputBuffer[outputBufferIndex--] = (byte)((remainder / factor) + 48);
value -= remainder;
factor *= 10;
}
- final byte zero = (byte) 48;
- while (outputBufferIndex >= offset)
- {
+ final byte zero = (byte)48;
+ while (outputBufferIndex >= offset) {
outputBuffer[outputBufferIndex--] = zero;
}
}
- public static boolean isAsciiDigit(final byte asciiCharacter)
- {
+ public static boolean isAsciiDigit(final byte asciiCharacter) {
return asciiCharacter > 47 && asciiCharacter < 58;
}
- public static String formatIntAsIpAddress(final int address)
- {
+ public static String formatIntAsIpAddress(final int address) {
StringBuilder buffer = new StringBuilder();
formatIntAsIpAddress(buffer, address);
@@ -64,8 +57,7 @@ public static String formatIntAsIpAddress(final int address)
return buffer.toString();
}
- public static void formatIntAsIpAddress(final StringBuilder buffer, final int address)
- {
+ public static void formatIntAsIpAddress(final StringBuilder buffer, final int address) {
buffer.append((address >>> 24) & 0xFF);
buffer.append('.');
buffer.append((address >>> 16) & 0xFF);
@@ -75,25 +67,21 @@ public static void formatIntAsIpAddress(final StringBuilder buffer, final int ad
buffer.append(address & 0xFF);
}
- public static long packLongWithUnsignedShortInts(final int int1, final int int2, final int int3, final int int4)
- {
+ public static long packLongWithUnsignedShortInts(final int int1, final int int2, final int int3, final int int4) {
checkUnsignedShort(int1);
checkUnsignedShort(int2);
checkUnsignedShort(int3);
checkUnsignedShort(int4);
return ((int1 & 0xFFFFL) << 48) +
- ((int2 & 0xFFFFL) << 32) +
- ((int3 & 0xFFFFL) << 16) +
- (int4 & 0xFFFFL);
+ ((int2 & 0xFFFFL) << 32) +
+ ((int3 & 0xFFFFL) << 16) +
+ (int4 & 0xFFFFL);
}
- public static boolean isEqual(final byte[] lhs, final int lhsOffset, final byte[] rhs, final int rhsOffset, final int length)
- {
- for (int i = 0; i < length; i++)
- {
- if (lhs[lhsOffset + i] != rhs[rhsOffset + i])
- {
+ public static boolean isEqual(final byte[] lhs, final int lhsOffset, final byte[] rhs, final int rhsOffset, final int length) {
+ for (int i = 0; i < length; i++) {
+ if (lhs[lhsOffset + i] != rhs[rhsOffset + i]) {
return false;
}
}
@@ -101,21 +89,17 @@ public static boolean isEqual(final byte[] lhs, final int lhsOffset, final byte[
return true;
}
- public static int readIntFromAscii(final byte[] asciiBuffer, final int offset, final int length)
- {
+ public static int readIntFromAscii(final byte[] asciiBuffer, final int offset, final int length) {
int value = 0;
int power = length;
- for (int i = offset; power > 0; i++, power--)
- {
+ for (int i = offset; power > 0; i++, power--) {
byte b = asciiBuffer[i];
- if (!isAsciiDigit(b))
- {
+ if (!isAsciiDigit(b)) {
throw new IllegalArgumentException(b + " is not a digit");
}
int digitValue = b - 48;
- for (int p = power; p > 1; p--)
- {
+ for (int p = power; p > 1; p--) {
digitValue *= 10;
}
@@ -125,21 +109,17 @@ public static int readIntFromAscii(final byte[] asciiBuffer, final int offset, f
return value;
}
- public static long readLongFromAscii(final byte[] asciiBuffer, final int offset, final int length)
- {
+ public static long readLongFromAscii(final byte[] asciiBuffer, final int offset, final int length) {
long value = 0;
long power = length;
- for (int i = offset; power > 0; i++, power--)
- {
+ for (int i = offset; power > 0; i++, power--) {
byte b = asciiBuffer[i];
- if (!isAsciiDigit(b))
- {
+ if (!isAsciiDigit(b)) {
throw new IllegalArgumentException(b + " is not a digit");
}
long digitValue = b - 48;
- for (long p = power; p > 1; p--)
- {
+ for (long p = power; p > 1; p--) {
digitValue *= 10L;
}
@@ -149,12 +129,9 @@ public static long readLongFromAscii(final byte[] asciiBuffer, final int offset,
return value;
}
- public static boolean isInteger(final byte[] asciiBuffer, final int offset, final int length)
- {
- for (int i = 0; i < length; i++)
- {
- if (!isAsciiDigit(asciiBuffer[offset + i]))
- {
+ public static boolean isInteger(final byte[] asciiBuffer, final int offset, final int length) {
+ for (int i = 0; i < length; i++) {
+ if (!isAsciiDigit(asciiBuffer[offset + i])) {
return false;
}
}
@@ -163,38 +140,30 @@ public static boolean isInteger(final byte[] asciiBuffer, final int offset, fina
}
public static void replace(final byte[] buffer, final int offset, final int length,
- final byte target, final byte replacement)
- {
- for (int i = 0; i < length; i++)
- {
+ final byte target, final byte replacement) {
+ for (int i = 0; i < length; i++) {
int location = i + offset;
- if (target == buffer[location])
- {
+ if (target == buffer[location]) {
buffer[location] = replacement;
}
}
}
public static void asciiEncode(final CharSequence chars, final int charOffset,
- final byte[] buffer, final int bufferOffset, final int length)
- {
- for (int i = 0; i < length; i++)
- {
+ final byte[] buffer, final int bufferOffset, final int length) {
+ for (int i = 0; i < length; i++) {
int charValue = chars.charAt(i + charOffset);
- if (charValue > 127)
- {
+ if (charValue > 127) {
throw new IllegalArgumentException("Character " + chars.charAt(i + charOffset) + " is not " + StandardCharsets.US_ASCII);
}
- buffer[i + bufferOffset] = (byte) charValue;
+ buffer[i + bufferOffset] = (byte)charValue;
}
}
- private static void checkUnsignedShort(final int value)
- {
- if (value < 0 || value > MAX_UNSIGNED_SHORT)
- {
+ private static void checkUnsignedShort(final int value) {
+ if (value < 0 || value > MAX_UNSIGNED_SHORT) {
throw new IllegalArgumentException("Value outside range for unsigned short integer [0-65535]: " + value);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/Blocker.java b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/Blocker.java
index 1956dfb..ca2a92c 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/Blocker.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/Blocker.java
@@ -16,7 +16,6 @@
package com.lmax.nanofix.concurrent;
-public interface Blocker
-{
+public interface Blocker {
void mayWait();
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java
index 733fa51..04f5915 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/NamedThreadFactory.java
@@ -18,35 +18,31 @@
import javax.annotation.Nullable;
+
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
-public class NamedThreadFactory implements ThreadFactory
-{
+public class NamedThreadFactory implements ThreadFactory {
private final String name;
private final boolean daemon;
private final AtomicInteger count = new AtomicInteger(0);
private Thread.UncaughtExceptionHandler uncaughtExceptionHandler;
- public NamedThreadFactory(final String name, boolean daemon, Thread.UncaughtExceptionHandler uncaughtExceptionHandler)
- {
+ public NamedThreadFactory(final String name, boolean daemon, Thread.UncaughtExceptionHandler uncaughtExceptionHandler) {
this.name = name;
this.daemon = daemon;
this.uncaughtExceptionHandler = uncaughtExceptionHandler;
}
@Override
- public Thread newThread(@Nullable final Runnable runnable)
- {
- if (runnable != null)
- {
+ public Thread newThread(@Nullable final Runnable runnable) {
+ if (runnable != null) {
Thread thread = Executors.defaultThreadFactory().newThread(runnable);
thread.setDaemon(daemon);
thread.setName(name + "-" + count.getAndIncrement());
- if (uncaughtExceptionHandler != null)
- {
+ if (uncaughtExceptionHandler != null) {
thread.setUncaughtExceptionHandler(uncaughtExceptionHandler);
}
return thread;
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/ThreadBlocker.java b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/ThreadBlocker.java
index e735821..9771cfe 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/ThreadBlocker.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/concurrent/ThreadBlocker.java
@@ -18,28 +18,23 @@
import java.util.concurrent.Semaphore;
-public class ThreadBlocker implements Blocker
-{
+public class ThreadBlocker implements Blocker {
private final Semaphore semaphore = new Semaphore(0);
private volatile boolean paused;
@Override
- public void mayWait()
- {
- while (paused)
- {
+ public void mayWait() {
+ while (paused) {
semaphore.acquireUninterruptibly();
}
}
- public void pause()
- {
+ public void pause() {
paused = true;
}
- public void resume()
- {
+ public void resume() {
paused = false;
semaphore.release();
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/exceptions/GeneralRuntimeException.java b/nanofix-client/src/main/java/com/lmax/nanofix/exceptions/GeneralRuntimeException.java
index 7d4929d..b3c0dbb 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/exceptions/GeneralRuntimeException.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/exceptions/GeneralRuntimeException.java
@@ -16,10 +16,8 @@
package com.lmax.nanofix.exceptions;
-public class GeneralRuntimeException extends RuntimeException
-{
- public GeneralRuntimeException(final String message, final Throwable cause)
- {
+public class GeneralRuntimeException extends RuntimeException {
+ public GeneralRuntimeException(final String message, final Throwable cause) {
super(message, cause);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/BusinessRejectionReason.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/BusinessRejectionReason.java
index 9befee7..0a5ef7b 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/BusinessRejectionReason.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/BusinessRejectionReason.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.fields;
-public enum BusinessRejectionReason
-{
+public enum BusinessRejectionReason {
Other(0),
UnknownId(1),
UnknownSecurity(2),
@@ -27,13 +26,11 @@ public enum BusinessRejectionReason
private final int code;
- BusinessRejectionReason(final int code)
- {
+ BusinessRejectionReason(final int code) {
this.code = code;
}
- public int getCode()
- {
+ public int getCode() {
return code;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/EncryptMethod.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/EncryptMethod.java
index 62e4230..165c400 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/EncryptMethod.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/EncryptMethod.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.fields;
-public enum EncryptMethod
-{
+public enum EncryptMethod {
NONE(0),
PKCS(1),
DES(2),
@@ -28,13 +27,11 @@ public enum EncryptMethod
private final int code;
- EncryptMethod(final int code)
- {
+ EncryptMethod(final int code) {
this.code = code;
}
- public String getCode()
- {
+ public String getCode() {
return Integer.toString(code);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/MsgType.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/MsgType.java
index 3b5a894..00c79fe 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/MsgType.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/MsgType.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.fields;
-public enum MsgType
-{
+public enum MsgType {
BUSINESS_MESSAGE_REJECT("j"),
EXECUTION_REPORT("8"),
LOGIN("A"),
@@ -30,26 +29,21 @@ public enum MsgType
private final String code;
- MsgType(final String code)
- {
+ MsgType(final String code) {
this.code = code;
}
- public String getCode()
- {
+ public String getCode() {
return code;
}
- public static boolean knownMsgType(final String possibleMessageType)
- {
- for (MsgType msgType : MsgType.values())
- {
- if (msgType.getCode().equals(possibleMessageType))
- {
- return true;
- }
- }
- return false;
+ public static boolean knownMsgType(final String possibleMessageType) {
+ for (MsgType msgType : MsgType.values()) {
+ if (msgType.getCode().equals(possibleMessageType)) {
+ return true;
+ }
+ }
+ return false;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/OrdType.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/OrdType.java
index 82f6b1d..0852f1e 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/OrdType.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/OrdType.java
@@ -16,20 +16,17 @@
package com.lmax.nanofix.fields;
-public enum OrdType
-{
+public enum OrdType {
Market(1),
Limit(2);
private final int code;
- OrdType(final int code)
- {
+ OrdType(final int code) {
this.code = code;
}
- public int getCode()
- {
+ public int getCode() {
return code;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/SessionRejectReason.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/SessionRejectReason.java
index 31544f1..7bfbcce 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/SessionRejectReason.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/SessionRejectReason.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.fields;
-public enum SessionRejectReason
-{
+public enum SessionRejectReason {
InvalidTagNumber(0),
RequiredTagMissing(1),
TagNotDefinedForThisMessageType(2),
@@ -33,13 +32,11 @@ public enum SessionRejectReason
private final int code;
- SessionRejectReason(final int code)
- {
+ SessionRejectReason(final int code) {
this.code = code;
}
- public int getCode()
- {
+ public int getCode() {
return code;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/Side.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/Side.java
index fea8e1f..9c424ca 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/Side.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/Side.java
@@ -16,22 +16,17 @@
package com.lmax.nanofix.fields;
-public enum Side
-{
+public enum Side {
Buy(1),
Sell(2);
private final int code;
- Side(final int code)
- {
+ Side(final int code) {
this.code = code;
}
- public int getCode()
- {
+ public int getCode() {
return code;
}
-
-
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/fields/Tags.java b/nanofix-client/src/main/java/com/lmax/nanofix/fields/Tags.java
index ccc08a2..a1b229a 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/fields/Tags.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/fields/Tags.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.fields;
-public enum Tags
-{
+public enum Tags {
Account(1),
BeginSeqNo(7),
BusinessRejectReason(380),
@@ -52,25 +51,20 @@ public enum Tags
private final int tag;
- Tags(final int tag)
- {
+ Tags(final int tag) {
this.tag = tag;
}
- public int getTag()
- {
+ public int getTag() {
return tag;
}
- public static boolean knownTag(final int possibleTag)
- {
- for (Tags tag : Tags.values())
- {
- if (tag.getTag() == possibleTag)
- {
- return true;
- }
- }
- return false;
+ public static boolean knownTag(final int possibleTag) {
+ for (Tags tag : Tags.values()) {
+ if (tag.getTag() == possibleTag) {
+ return true;
+ }
+ }
+ return false;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteChannelReader.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteChannelReader.java
index c03cccf..b55cb1d 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteChannelReader.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteChannelReader.java
@@ -27,8 +27,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class ByteChannelReader
-{
+public class ByteChannelReader {
private static final Logger LOGGER = LoggerFactory.getLogger(ByteChannelReader.class);
private static final int BUFFER_SIZE = 1024;
private final ByteStreamMessageParser byteStreamMessageParser;
@@ -36,48 +35,33 @@ public class ByteChannelReader
private final ConnectionObserver connectionObserver;
private final ByteBuffer buffer;
- public ByteChannelReader(final ByteStreamMessageParser byteStreamMessageParser, final Blocker blocker, final ConnectionObserver connectionObserver)
- {
+ public ByteChannelReader(final ByteStreamMessageParser byteStreamMessageParser, final Blocker blocker, final ConnectionObserver connectionObserver) {
this.byteStreamMessageParser = byteStreamMessageParser;
this.blocker = blocker;
this.connectionObserver = connectionObserver;
buffer = ByteBuffer.allocate(BUFFER_SIZE);
}
- public void blockingStart(final ReadableByteChannel readableByteChannel)
- {
- try
- {
- while ((readableByteChannel.read(buffer)) != -1)
- {
+ public void blockingStart(final ReadableByteChannel readableByteChannel) {
+ try {
+ while ((readableByteChannel.read(buffer)) != -1) {
blocker.mayWait();
buffer.flip();
byteStreamMessageParser.parse(buffer);
buffer.clear();
}
- }
- catch (final ClosedChannelException e)
- {
+ } catch (final ClosedChannelException e) {
//Yes closed.
- }
- catch (final IOException e)
- {
+ } catch (final IOException e) {
LOGGER.error("An error occurred trying to read from the socket", e);
- }
- finally
- {
- if (readableByteChannel != null)
- {
- try
- {
- if (readableByteChannel.isOpen())
- {
+ } finally {
+ if (readableByteChannel != null) {
+ try {
+ if (readableByteChannel.isOpen()) {
readableByteChannel.close();
}
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
//I don't care
}
connectionObserver.connectionClosed();
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteStreamMessageParser.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteStreamMessageParser.java
index 1f3599f..2cd39bd 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteStreamMessageParser.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/ByteStreamMessageParser.java
@@ -18,8 +18,7 @@
import java.nio.ByteBuffer;
-public interface ByteStreamMessageParser
-{
+public interface ByteStreamMessageParser {
void parse(ByteBuffer segment);
void initialise(MessageParserCallback messageParserCallback);
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java
index 71dee1a..9641c45 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessage.java
@@ -23,66 +23,53 @@
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
-public class FixMessage
-{
+public class FixMessage {
private final Multimap multimap;
- public FixMessage(final Multimap multimap)
- {
+ public FixMessage(final Multimap multimap) {
this.multimap = LinkedListMultimap.create(multimap);
}
- public Collection getValues(int tagId)
- {
+ public Collection getValues(int tagId) {
return multimap.get(tagId);
}
- public String getFirstValue(int tagId)
- {
+ public String getFirstValue(int tagId) {
return multimap.get(tagId).iterator().next();
}
- public boolean hasValue(int tagId)
- {
+ public boolean hasValue(int tagId) {
return !multimap.get(tagId).isEmpty();
}
- public void replace(int tagId, String value)
- {
+ public void replace(int tagId, String value) {
final LinkedList values = new LinkedList();
values.add(value);
multimap.replaceValues(tagId, values);
}
- public String toFixString()
- {
+ public String toFixString() {
final char tagSeparator = '\u0001';
return buildString(tagSeparator);
}
- public String toHumanString()
- {
+ public String toHumanString() {
final char tagSeparator = '|';
return buildString(tagSeparator);
}
@Override
- public String toString()
- {
+ public String toString() {
return toHumanString();
}
- private String buildString(final char tagSeparator)
- {
+ private String buildString(final char tagSeparator) {
final StringBuilder stringBuilder = new StringBuilder();
final Collection> entries = multimap.entries();
- for (Map.Entry entry : entries)
- {
+ for (Map.Entry entry : entries) {
stringBuilder.append(entry.getKey()).append('=').append(entry.getValue()).append(tagSeparator);
}
return stringBuilder.toString();
}
-
-
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageHandler.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageHandler.java
index 6cbcab4..37dabea 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageHandler.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageHandler.java
@@ -16,7 +16,6 @@
package com.lmax.nanofix.incoming;
-public interface FixMessageHandler
-{
+public interface FixMessageHandler {
void onFixMessage(FixMessage fixMessage);
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java
index dc358b6..54d7231 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessagePublisher.java
@@ -19,20 +19,16 @@
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
-public class FixMessagePublisher implements FixMessageHandler
-{
+public class FixMessagePublisher implements FixMessageHandler {
List handlers = new CopyOnWriteArrayList();
- public void subscribeToAllMessages(final FixMessageHandler fixMessageHandler)
- {
+ public void subscribeToAllMessages(final FixMessageHandler fixMessageHandler) {
handlers.add(fixMessageHandler);
}
@Override
- public void onFixMessage(final FixMessage fixMessage)
- {
- for (FixMessageHandler fixMessageHandler : handlers)
- {
+ public void onFixMessage(final FixMessage fixMessage) {
+ for (FixMessageHandler fixMessageHandler : handlers) {
fixMessageHandler.onFixMessage(fixMessage);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageStreamFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageStreamFactory.java
index 8c4b46f..7e9dcff 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageStreamFactory.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixMessageStreamFactory.java
@@ -19,37 +19,31 @@
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
-public class FixMessageStreamFactory implements FixTagHandler
-{
+public class FixMessageStreamFactory implements FixTagHandler {
private final Multimap multimap = LinkedListMultimap.create();
private final FixMessageHandler handler;
- public FixMessageStreamFactory(final FixMessageHandler handler)
- {
+ public FixMessageStreamFactory(final FixMessageHandler handler) {
this.handler = handler;
}
@Override
- public void messageStart()
- {
+ public void messageStart() {
multimap.clear();
}
@Override
- public void onTag(final int tagIdentity, final byte[] message, final int tagValueOffset, final int tagValueLength)
- {
+ public void onTag(final int tagIdentity, final byte[] message, final int tagValueOffset, final int tagValueLength) {
multimap.put(tagIdentity, new String(message, tagValueOffset, tagValueLength));
}
@Override
- public boolean isFinished()
- {
+ public boolean isFinished() {
return false;
}
@Override
- public void messageEnd()
- {
+ public void messageEnd() {
handler.onFixMessage(new FixMessage(multimap));
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java
index c900d4b..211f8c0 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixParseException.java
@@ -18,25 +18,22 @@
@SuppressWarnings("serial")
public final class FixParseException
- extends RuntimeException
-{
- public FixParseException(final String msg)
- {
+ extends RuntimeException {
+ public FixParseException(final String msg) {
super(msg);
}
- public FixParseException(final String msg, final Throwable rootCause)
- {
+ public FixParseException(final String msg, final Throwable rootCause) {
super(msg, rootCause);
}
/**
* Don't waste CPU time when under pressure to receive packets. The CPU is likely ot be the cause of packet loss.
+ *
* @return this instance
*/
@Override
- public Throwable fillInStackTrace()
- {
+ public Throwable fillInStackTrace() {
return this;
}
}
\ No newline at end of file
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java
index 33fedd6..cf7a15f 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixStreamMessageParser.java
@@ -24,9 +24,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public final class FixStreamMessageParser
- implements ByteStreamMessageParser
-{
+public final class FixStreamMessageParser implements ByteStreamMessageParser {
private static final Logger LOGGER = LoggerFactory.getLogger(FixStreamMessageParser.class);
public static final byte ASCII_SOH = 1;
@@ -38,51 +36,43 @@ public final class FixStreamMessageParser
public static final byte ASCII_I = 73;
public static final byte ASCII_X = 88;
- private static final int FIX_MESSAGE_START_CODEC = Bits.readInt(new byte[] {
+ private static final int FIX_MESSAGE_START_CODEC = Bits.readInt(new byte[]{
FixStreamMessageParser.ASCII_8, FixStreamMessageParser.ASCII_EQUALS, FixStreamMessageParser.ASCII_F, FixStreamMessageParser.ASCII_I}, 0);
- private static final int FIX_MESSAGE_END_CODEC = Bits.readInt(new byte[] {
+ private static final int FIX_MESSAGE_END_CODEC = Bits.readInt(new byte[]{
FixStreamMessageParser.ASCII_SOH, FixStreamMessageParser.ASCII_1, FixStreamMessageParser.ASCII_0, FixStreamMessageParser.ASCII_EQUALS}, 0);
private final ByteBuffer fragmentedMessage;
private final int maxMessageSize;
private MessageParserCallback messageParserCallback;
- public FixStreamMessageParser(final int maxMessageSize)
- {
+ public FixStreamMessageParser(final int maxMessageSize) {
this.maxMessageSize = maxMessageSize;
this.fragmentedMessage = ByteBuffer.allocate(maxMessageSize);
}
@Override
- public void initialise(final MessageParserCallback messageParserCallback)
- {
+ public void initialise(final MessageParserCallback messageParserCallback) {
this.fragmentedMessage.clear();
this.messageParserCallback = messageParserCallback;
}
@Override
- public void parse(final ByteBuffer segment)
- {
+ public void parse(final ByteBuffer segment) {
final int segmentLimit = segment.limit();
- try
- {
- if (fragmentedMessage.position() > 0)
- {
+ try {
+ if (fragmentedMessage.position() > 0) {
handleFragmentContinuation(segment);
}
- while (segment.position() < segmentLimit)
- {
+ while (segment.position() < segmentLimit) {
handleNextMessage(segment);
}
- }
- catch (final Exception ex)
- {
+ } catch (final Exception ex) {
final String msg = String.format("Exception parsing segment:%n%s %n%s %n adding to %n%s %n%s",
- segment.toString(),
- new String(segment.array(), 0, segmentLimit, FixUtil.getCharset()),
- fragmentedMessage.toString(),
- new String(fragmentedMessage.array(), 0, fragmentedMessage.position(), FixUtil.getCharset()));
+ segment.toString(),
+ new String(segment.array(), 0, segmentLimit, FixUtil.getCharset()),
+ fragmentedMessage.toString(),
+ new String(fragmentedMessage.array(), 0, fragmentedMessage.position(), FixUtil.getCharset()));
LOGGER.warn(msg, ex);
messageParserCallback.onParseError(msg);
@@ -90,10 +80,8 @@ public void parse(final ByteBuffer segment)
}
}
- private void handleFragmentContinuation(final ByteBuffer segment)
- {
- if(!segment.hasRemaining())
- {
+ private void handleFragmentContinuation(final ByteBuffer segment) {
+ if (!segment.hasRemaining()) {
return;
}
@@ -103,8 +91,7 @@ private void handleFragmentContinuation(final ByteBuffer segment)
handleFragmentedMessage(segment);
}
- private void consumeIntoFragmentedMessage(final ByteBuffer segment, final int start, int end)
- {
+ private void consumeIntoFragmentedMessage(final ByteBuffer segment, final int start, int end) {
final boolean foundMessageBoundary = end != -1;
final int newEnd = foundMessageBoundary ? end : segment.limit();
@@ -112,18 +99,15 @@ private void consumeIntoFragmentedMessage(final ByteBuffer segment, final int st
final int bytesToConsume = Math.min(newEnd - start, remainingFragmentCapacity);
fragmentedMessage.put(segment.array(), start, bytesToConsume);
- if (!foundMessageBoundary && 0 == fragmentedMessage.remaining() || bytesToConsume == 0)
- {
+ if (!foundMessageBoundary && 0 == fragmentedMessage.remaining() || bytesToConsume == 0) {
handleTruncatedMessage();
}
}
- private void handleFragmentedMessage(final ByteBuffer segment)
- {
+ private void handleFragmentedMessage(final ByteBuffer segment) {
final int currentPosition = fragmentedMessage.position();
- if (0 == currentPosition)
- {
+ if (0 == currentPosition) {
return;
}
@@ -132,42 +116,33 @@ private void handleFragmentedMessage(final ByteBuffer segment)
final int begin = findBeginningOfNextMessage(fragmentedMessage);
final int end = begin == -1 ? -1 : findEndOfCurrentMessage(fragmentedMessage);
- if (-1 != end)
- {
+ if (-1 != end) {
callbackMessage(fragmentedMessage.array(), begin, end);
// our fragmented message didnt need all the bytes in the incoming segment,
// so rewind the segment by the exact number of bytes we didnt use
segment.position(segment.position() - (fragmentedMessage.limit() - end));
fragmentedMessage.clear();
- }
- else
- {
+ } else {
fragmentedMessage.limit(fragmentedMessage.capacity());
fragmentedMessage.position(currentPosition);
}
}
- private void consumeIntoFragmentedMessage(final ByteBuffer segment)
- {
+ private void consumeIntoFragmentedMessage(final ByteBuffer segment) {
final int remainingFragmentCapacity = fragmentedMessage.remaining();
- if (segment.remaining() < remainingFragmentCapacity)
- {
+ if (segment.remaining() < remainingFragmentCapacity) {
fragmentedMessage.put(segment);
- }
- else
- {
+ } else {
fragmentedMessage.put(segment.array(), segment.position(), remainingFragmentCapacity);
handleTruncatedMessage();
segment.position(segment.position() + remainingFragmentCapacity);
}
}
- private int findCurrentFragmentedMessageBoundary(final ByteBuffer incoming)
- {
+ private int findCurrentFragmentedMessageBoundary(final ByteBuffer incoming) {
final int origPos = incoming.position();
int fragmentedMessageEndBoundary = findBeginningOfNextMessage(incoming);
- if (fragmentedMessageEndBoundary == -1)
- {
+ if (fragmentedMessageEndBoundary == -1) {
incoming.position(origPos);
fragmentedMessageEndBoundary = findEndOfCurrentMessage(incoming);
}
@@ -175,48 +150,37 @@ private int findCurrentFragmentedMessageBoundary(final ByteBuffer incoming)
return fragmentedMessageEndBoundary;
}
- private void handleTruncatedMessage()
- {
+ private void handleTruncatedMessage() {
messageParserCallback.onTruncatedMessage();
callbackMessage(fragmentedMessage.array(), 0, fragmentedMessage.position());
fragmentedMessage.clear();
}
- private void handleNextMessage(final ByteBuffer segment)
- {
+ private void handleNextMessage(final ByteBuffer segment) {
final int origPos = segment.position();
final int begin = findBeginningOfNextMessage(segment);
- if (-1 != begin)
- {
+ if (-1 != begin) {
final int end = findEndOfCurrentMessage(segment);
- if (-1 != end)
- {
+ if (-1 != end) {
callbackMessage(segment.array(), begin, end);
- }
- else
- {
+ } else {
segment.position(begin);
consumeIntoFragmentedMessage(segment);
}
- }
- else
- {
+ } else {
segment.position(origPos);
consumeIntoFragmentedMessage(segment);
}
}
- private int findBeginningOfNextMessage(final ByteBuffer segment)
- {
+ private int findBeginningOfNextMessage(final ByteBuffer segment) {
final byte[] buffer = segment.array();
int pos = segment.position();
final int limit = segment.limit();
- while (pos < limit)
- {
- if (isStartOfMessage(buffer, pos, limit))
- {
+ while (pos < limit) {
+ if (isStartOfMessage(buffer, pos, limit)) {
segment.position(pos);
return pos;
}
@@ -229,29 +193,23 @@ private int findBeginningOfNextMessage(final ByteBuffer segment)
return -1;
}
- private boolean isStartOfMessage(final byte[] buffer, final int pos, final int limit)
- {
+ private boolean isStartOfMessage(final byte[] buffer, final int pos, final int limit) {
return
- pos + 4 < limit &&
+ pos + 4 < limit &&
FIX_MESSAGE_START_CODEC == Bits.readInt(buffer, pos) &&
buffer[pos + 4] == ASCII_X;
}
- private int findEndOfCurrentMessage(final ByteBuffer segment)
- {
+ private int findEndOfCurrentMessage(final ByteBuffer segment) {
final byte[] buffer = segment.array();
int pos = segment.position();
final int limit = segment.limit();
- while (pos < limit)
- {
- if (isStartOfChecksum(buffer, pos, limit))
- {
+ while (pos < limit) {
+ if (isStartOfChecksum(buffer, pos, limit)) {
pos += 4;
- while (pos < limit)
- {
- if (ASCII_SOH == buffer[pos++])
- {
+ while (pos < limit) {
+ if (ASCII_SOH == buffer[pos++]) {
segment.position(pos);
return pos;
}
@@ -266,19 +224,15 @@ private int findEndOfCurrentMessage(final ByteBuffer segment)
return -1;
}
- private boolean isStartOfChecksum(final byte[] buffer, final int pos, final int limit)
- {
+ private boolean isStartOfChecksum(final byte[] buffer, final int pos, final int limit) {
return pos + 3 < limit &&
- FIX_MESSAGE_END_CODEC == Bits.readInt(buffer, pos);
+ FIX_MESSAGE_END_CODEC == Bits.readInt(buffer, pos);
}
- private void callbackMessage(final byte[] buffer, final int startPos, final int endPos)
- {
- if(endPos - startPos > maxMessageSize)
- {
+ private void callbackMessage(final byte[] buffer, final int startPos, final int endPos) {
+ if (endPos - startPos > maxMessageSize) {
throw new IllegalStateException("Msg size [" + (endPos - startPos) + "], Max allowed size [" + maxMessageSize + "]");
}
- messageParserCallback.onMessage(buffer, startPos, endPos-startPos);
+ messageParserCallback.onMessage(buffer, startPos, endPos - startPos);
}
}
-
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagHandler.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagHandler.java
index 08b8f30..860cda4 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagHandler.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagHandler.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.incoming;
-public interface FixTagHandler
-{
+public interface FixTagHandler {
void messageStart();
void onTag(int tagIdentity, byte[] message, int tagValueOffset, int tagValueLength);
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java
index eb525ad..c34fcb9 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/FixTagParser.java
@@ -19,50 +19,40 @@
import com.lmax.nanofix.FixUtil;
import com.lmax.nanofix.byteoperations.ByteUtil;
-public final class FixTagParser
-{
+public final class FixTagParser {
public static final byte SOH = 1;
private static final byte ASCII_EQUALS = (byte)61;
private final FixTagHandler fixTagHandler;
private final byte[] lineSeparators;
- public FixTagParser(final FixTagHandler fixTagHandler)
- {
+ public FixTagParser(final FixTagHandler fixTagHandler) {
this.fixTagHandler = fixTagHandler;
lineSeparators = new byte[1];
lineSeparators[0] = SOH;
}
- public FixTagParser(final FixTagHandler fixTagHandler, final byte[] lineSeparators)
- {
+ public FixTagParser(final FixTagHandler fixTagHandler, final byte[] lineSeparators) {
this.fixTagHandler = fixTagHandler;
this.lineSeparators = lineSeparators;
}
- public boolean parse(final byte[] message, final int offset, final int length, final boolean throwExceptionOnParseFailure)
- {
+ public boolean parse(final byte[] message, final int offset, final int length, final boolean throwExceptionOnParseFailure) {
fixTagHandler.messageStart();
int tagStart = offset;
int equalsIndex = -1;
- for (int i = 0; i < length; i++)
- {
+ for (int i = 0; i < length; i++) {
int index = i + offset;
- if (-1 == equalsIndex && ASCII_EQUALS == message[index])
- {
+ if (-1 == equalsIndex && ASCII_EQUALS == message[index]) {
equalsIndex = index;
}
- if (isLineSeparator(message[index]))
- {
- if (-1 != equalsIndex)
- {
- if (!ByteUtil.isInteger(message, tagStart, equalsIndex - tagStart))
- {
- if (throwExceptionOnParseFailure)
- {
+ if (isLineSeparator(message[index])) {
+ if (-1 != equalsIndex) {
+ if (!ByteUtil.isInteger(message, tagStart, equalsIndex - tagStart)) {
+ if (throwExceptionOnParseFailure) {
raiseException("Invalid tag id", message, offset, length, tagStart, equalsIndex);
}
return false;
@@ -75,8 +65,7 @@ public boolean parse(final byte[] message, final int offset, final int length, f
fixTagHandler.onTag(tagIdentity, message, tagValueOffset, tagValueLength);
- if (fixTagHandler.isFinished())
- {
+ if (fixTagHandler.isFinished()) {
break;
}
}
@@ -91,12 +80,9 @@ public boolean parse(final byte[] message, final int offset, final int length, f
return true;
}
- private boolean isLineSeparator(final byte charByte)
- {
- for (final byte lineSeparator : lineSeparators)
- {
- if (lineSeparator == charByte)
- {
+ private boolean isLineSeparator(final byte charByte) {
+ for (final byte lineSeparator : lineSeparators) {
+ if (lineSeparator == charByte) {
return true;
}
}
@@ -108,8 +94,7 @@ private static void raiseException(final String reason,
final int offset,
final int length,
final int tagStart,
- final int equalsIndex)
- {
+ final int equalsIndex) {
String msg = String.format("Parse Failed: %s at tagStart=%d equalsIndex=%d message=%s",
reason,
Integer.valueOf(tagStart),
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/MessageParserCallback.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/MessageParserCallback.java
index 9922604..bff7913 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/MessageParserCallback.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/MessageParserCallback.java
@@ -16,10 +16,11 @@
package com.lmax.nanofix.incoming;
-public interface MessageParserCallback
-{
+public interface MessageParserCallback {
void onMessage(byte[] buffer, int offset, int length);
+
void onTruncatedMessage();
+
void onParseError(String error);
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/RawFixMessageHandler.java b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/RawFixMessageHandler.java
index e37e87f..eb3408e 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/incoming/RawFixMessageHandler.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/incoming/RawFixMessageHandler.java
@@ -20,31 +20,26 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class RawFixMessageHandler implements MessageParserCallback
-{
+public class RawFixMessageHandler implements MessageParserCallback {
private static final Logger LOGGER = LoggerFactory.getLogger(RawFixMessageHandler.class);
private final FixTagParser fixTagParser;
- public RawFixMessageHandler(final FixTagParser fixTagParser)
- {
+ public RawFixMessageHandler(final FixTagParser fixTagParser) {
this.fixTagParser = fixTagParser;
}
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
fixTagParser.parse(buffer, offset, length, true);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
LOGGER.warn("Truncated Message received");
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
LOGGER.error("Unable to parse data: " + error);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java
index 14bf19b..6fbce98 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessage.java
@@ -19,23 +19,19 @@
import javax.annotation.concurrent.Immutable;
@Immutable
-public class FixMessage
-{
+public class FixMessage {
private final String messageWithChecksum;
- FixMessage(final String messageWithChecksum)
- {
+ FixMessage(final String messageWithChecksum) {
this.messageWithChecksum = messageWithChecksum;
}
- public String toFixString()
- {
+ public String toFixString() {
return messageWithChecksum;
}
@Override
- public String toString()
- {
+ public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("FixMessage");
sb.append("{messageWithChecksum='").append(messageWithChecksum).append('\'');
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java
index f52853e..da27fcf 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/FixMessageBuilder.java
@@ -26,6 +26,7 @@
import com.lmax.nanofix.fields.SessionRejectReason;
import com.lmax.nanofix.fields.Tags;
+
import static com.lmax.nanofix.fields.Tags.BeginSeqNo;
import static com.lmax.nanofix.fields.Tags.BusinessRejectReason;
import static com.lmax.nanofix.fields.Tags.ClOrdID;
@@ -61,8 +62,7 @@
* All other fix tags & values are appended to the fix message in the order that they are specified.
* Care must be taken to ensure the order of fields is valid for the version of the FIX protocol being used.
*/
-public class FixMessageBuilder
-{
+public class FixMessageBuilder {
private static final String SOH = "\u0001";
private final StringBuilder msg = new StringBuilder();
private final String version;
@@ -73,229 +73,190 @@ public class FixMessageBuilder
/**
* Constructs a MessageBuilder for FIX messages with a version 4.4 begin string.
*/
- public FixMessageBuilder()
- {
+ public FixMessageBuilder() {
this("FIX.4.4");
}
/**
- * Constructs a MessageBuilder with the specified begin string
+ * Constructs a MessageBuilder with the specified begin string
*
* @param version The FIX Begin String (fix tag 8) to be used in the msg.
*/
- public FixMessageBuilder(final String version)
- {
+ public FixMessageBuilder(final String version) {
this.version = version;
}
/**
* Allows overriding of the calculated message length
+ *
* @param messageLengthOverride The value of the (9) message length tag.
* @return FixMessageBuilder
*/
- public FixMessageBuilder overrideMessageLength(final String messageLengthOverride)
- {
+ public FixMessageBuilder overrideMessageLength(final String messageLengthOverride) {
this.messageLengthOverride = messageLengthOverride;
return this;
}
/**
* Allows overriding of the calculated checksum.
+ *
* @param checksumOverride The value of the (10) checksum tag.
* @return FixMessageBuilder
*/
- public FixMessageBuilder overrideChecksum(final String checksumOverride)
- {
+ public FixMessageBuilder overrideChecksum(final String checksumOverride) {
this.checksumOverride = checksumOverride;
return this;
}
- public FixMessageBuilder messageType(final String type)
- {
- if (MsgType.knownMsgType(type))
- {
+ public FixMessageBuilder messageType(final String type) {
+ if (MsgType.knownMsgType(type)) {
throw new RuntimeException("Please use the MsgType enumeration");
}
return addTag(Tags.MsgType.getTag(), type);
}
- public FixMessageBuilder account(final String account)
- {
+ public FixMessageBuilder account(final String account) {
return addTag(Tags.Account.getTag(), account);
}
- public FixMessageBuilder messageType(final MsgType type)
- {
+ public FixMessageBuilder messageType(final MsgType type) {
return addTag(Tags.MsgType.getTag(), type.getCode());
}
- public FixMessageBuilder senderCompID(final String senderCompID)
- {
+ public FixMessageBuilder senderCompID(final String senderCompID) {
return addTag(SenderCompID.getTag(), senderCompID);
}
- public FixMessageBuilder targetCompID(final String targetCompID)
- {
+ public FixMessageBuilder targetCompID(final String targetCompID) {
return addTag(TargetCompID.getTag(), targetCompID);
}
- public FixMessageBuilder beginSeqNo(final int beginSeqNo)
- {
+ public FixMessageBuilder beginSeqNo(final int beginSeqNo) {
return addTag(BeginSeqNo.getTag(), Integer.toString(beginSeqNo));
}
- public FixMessageBuilder endSeqNo(final int endSeqNo)
- {
+ public FixMessageBuilder endSeqNo(final int endSeqNo) {
return addTag(EndSeqNo.getTag(), Integer.toString(endSeqNo));
}
- public FixMessageBuilder refSeqNum(final int refSeqNum)
- {
+ public FixMessageBuilder refSeqNum(final int refSeqNum) {
return addTag(RefSeqNum.getTag(), Integer.toString(refSeqNum));
}
- public FixMessageBuilder testReqId(final String testReqId)
- {
+ public FixMessageBuilder testReqId(final String testReqId) {
return addTag(TestReqID.getTag(), testReqId);
}
- public FixMessageBuilder resetSeqNumFlag(final String resetSeqNumFlag)
- {
+ public FixMessageBuilder resetSeqNumFlag(final String resetSeqNumFlag) {
return addTag(ResetSeqNumFlag.getTag(), resetSeqNumFlag);
}
- public FixMessageBuilder msgSeqNum(final int msgSeqNum)
- {
+ public FixMessageBuilder msgSeqNum(final int msgSeqNum) {
return addTag(MsgSeqNum.getTag(), Integer.toString(msgSeqNum));
}
- public FixMessageBuilder msgSeqNum(final String msgSeqNum)
- {
+ public FixMessageBuilder msgSeqNum(final String msgSeqNum) {
return addTag(MsgSeqNum.getTag(), msgSeqNum);
}
- public FixMessageBuilder sendingTime(final ZonedDateTime sendingTime)
- {
+ public FixMessageBuilder sendingTime(final ZonedDateTime sendingTime) {
return addTag(SendingTime.getTag(), com.lmax.nanofix.FixUtil.DATE_TIME_FORMATTER.format(sendingTime));
}
- public FixMessageBuilder username(final String username)
- {
+ public FixMessageBuilder username(final String username) {
return addTag(Username.getTag(), username);
}
- public FixMessageBuilder password(final String password)
- {
+ public FixMessageBuilder password(final String password) {
return addTag(Password.getTag(), password);
}
- public FixMessageBuilder heartBtInt(final int heartbeatInterval)
- {
+ public FixMessageBuilder heartBtInt(final int heartbeatInterval) {
return addTag(HeartBtInt.getTag(), Integer.toString(heartbeatInterval));
}
- public FixMessageBuilder rawData(final String data)
- {
+ public FixMessageBuilder rawData(final String data) {
addTag(RawDataLength.getTag(), Integer.toString(data.length()));
return addTag(RawData.getTag(), data);
}
- public FixMessageBuilder encryptMethod(final EncryptMethod encryptMethod)
- {
+ public FixMessageBuilder encryptMethod(final EncryptMethod encryptMethod) {
return addTag(EncryptMethod.getTag(), encryptMethod.getCode());
}
- public FixMessageBuilder clOrdID(final String clOrdId)
- {
+ public FixMessageBuilder clOrdID(final String clOrdId) {
return addTag(ClOrdID.getTag(), clOrdId);
}
- public FixMessageBuilder symbol(final String symbol)
- {
+ public FixMessageBuilder symbol(final String symbol) {
return addTag(Symbol.getTag(), symbol);
}
- public FixMessageBuilder side(final com.lmax.nanofix.fields.Side side)
- {
+ public FixMessageBuilder side(final com.lmax.nanofix.fields.Side side) {
return addTag(Side.getTag(), Integer.toString(side.getCode()));
}
- public FixMessageBuilder transactionTime(final ZonedDateTime transactionTime)
- {
+ public FixMessageBuilder transactionTime(final ZonedDateTime transactionTime) {
return addTag(TransactTime.getTag(), com.lmax.nanofix.FixUtil.DATE_TIME_FORMATTER.format(transactionTime));
}
- public FixMessageBuilder orderQty(final BigDecimal orderQty)
- {
+ public FixMessageBuilder orderQty(final BigDecimal orderQty) {
return addTag(OrderQty.getTag(), orderQty.toPlainString());
}
- public FixMessageBuilder orderType(final com.lmax.nanofix.fields.OrdType ordType)
- {
+ public FixMessageBuilder orderType(final com.lmax.nanofix.fields.OrdType ordType) {
return addTag(OrdType.getTag(), Integer.toString(ordType.getCode()));
}
- public FixMessageBuilder price(final BigDecimal price)
- {
+ public FixMessageBuilder price(final BigDecimal price) {
return addTag(Price.getTag(), price.toPlainString());
}
- public FixMessageBuilder price(final String price)
- {
+ public FixMessageBuilder price(final String price) {
return addTag(Price.getTag(), price);
}
- public FixMessageBuilder securityID(final String symbol)
- {
+ public FixMessageBuilder securityID(final String symbol) {
return addTag(SecurityID.getTag(), symbol);
}
- public FixMessageBuilder securityIDSource(final String symbol)
- {
+ public FixMessageBuilder securityIDSource(final String symbol) {
return addTag(SecurityIDSource.getTag(), symbol);
}
- public FixMessageBuilder refMsgType(final MsgType refMsgType)
- {
+ public FixMessageBuilder refMsgType(final MsgType refMsgType) {
return addTag(RefMsgType.getTag(), refMsgType.getCode());
}
- public FixMessageBuilder businessRejectReason(final BusinessRejectionReason rejectionReason)
- {
+ public FixMessageBuilder businessRejectReason(final BusinessRejectionReason rejectionReason) {
return addTag(BusinessRejectReason.getTag(), Integer.toString(rejectionReason.getCode()));
}
- public FixMessageBuilder sessionRejectReason(final SessionRejectReason rejectReason)
- {
+ public FixMessageBuilder sessionRejectReason(final SessionRejectReason rejectReason) {
return addTag(Tags.SessionRejectReason.getTag(), Integer.toString(rejectReason.getCode()));
}
- public FixMessageBuilder possDuplicate(final boolean possDup)
- {
+ public FixMessageBuilder possDuplicate(final boolean possDup) {
return addTag(Tags.PossDupFlag.getTag(), possDup ? "Y" : "N");
}
- public FixMessageBuilder origSendingTime(final ZonedDateTime origSendingTime)
- {
+ public FixMessageBuilder origSendingTime(final ZonedDateTime origSendingTime) {
return addTag(OrigSendingTime.getTag(), com.lmax.nanofix.FixUtil.DATE_TIME_FORMATTER.format(origSendingTime));
}
- public FixMessageBuilder append(final int tag, final String value)
- {
+ public FixMessageBuilder append(final int tag, final String value) {
return addTag(tag, value);
}
- public FixMessage build()
- {
+ public FixMessage build() {
final String body = msg.toString();
final String messageWithHeader = "8=" + version + SOH + "9=" + messageLength(body) + SOH + body;
final String messageWithChecksum = messageWithHeader + "10=" + checksum(messageWithHeader) + SOH;
return new FixMessage(messageWithChecksum);
}
- private FixMessageBuilder addTag(final int tag, final String value)
- {
+ private FixMessageBuilder addTag(final int tag, final String value) {
msg.append(tag);
msg.append("=");
msg.append(value);
@@ -303,30 +264,24 @@ private FixMessageBuilder addTag(final int tag, final String value)
return this;
}
- private String checksum(final String bodyWithLength)
- {
- if (checksumOverride != null)
- {
+ private String checksum(final String bodyWithLength) {
+ if (checksumOverride != null) {
return checksumOverride;
}
return String.format("%03d", checksum(bodyWithLength.getBytes(Charset.forName("UTF-8"))));
}
- private int checksum(final byte[] bytes)
- {
+ private int checksum(final byte[] bytes) {
int result = 0;
- for (final byte b : bytes)
- {
+ for (final byte b : bytes) {
result += b;
}
return result % 256;
}
- private String messageLength(final String body)
- {
- if (messageLengthOverride != null)
- {
+ private String messageLength(final String body) {
+ if (messageLengthOverride != null) {
return messageLengthOverride;
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/OutboundMessageHandler.java b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/OutboundMessageHandler.java
index f652a65..4c51575 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/OutboundMessageHandler.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/outgoing/OutboundMessageHandler.java
@@ -25,35 +25,29 @@
import com.lmax.nanofix.transport.ConnectionObserver;
import com.lmax.nanofix.transport.TransportClosedException;
-public class OutboundMessageHandler
-{
+public class OutboundMessageHandler {
private final ConnectionObserver connectionObserver;
private volatile WritableByteChannel writableByteChannel;
- public OutboundMessageHandler(final ConnectionObserver connectionObserver)
- {
+ public OutboundMessageHandler(final ConnectionObserver connectionObserver) {
this.connectionObserver = connectionObserver;
}
- public void send(FixMessage message)
- {
+ public void send(FixMessage message) {
final byte[] bytes = message.toFixString().getBytes();
sendBytes(bytes);
}
- public void send(Collection messages)
- {
+ public void send(Collection messages) {
int totalBytes = 0;
- for (final FixMessage message : messages)
- {
+ for (final FixMessage message : messages) {
totalBytes += message.toFixString().getBytes().length;
}
byte[] bytes = new byte[totalBytes];
int nextIndex = 0;
- for (final FixMessage message : messages)
- {
+ for (final FixMessage message : messages) {
byte[] from = message.toFixString().getBytes();
int bytesToCopy = from.length;
System.arraycopy(from, 0, bytes, nextIndex, bytesToCopy);
@@ -63,45 +57,32 @@ public void send(Collection messages)
sendBytes(bytes);
}
- public void send(final String message)
- {
+ public void send(final String message) {
sendBytes(message.getBytes());
}
- public void sendBytes(final byte[] bytes)
- {
- if (writableByteChannel == null)
- {
+ public void sendBytes(final byte[] bytes) {
+ if (writableByteChannel == null) {
throw new RuntimeException("Writable Byte Channel not initialized. Is the socket open? You can wait for the socket to be open by calling fixClient.awaitConnection");
}
- try
- {
+ try {
writableByteChannel.write(ByteBuffer.wrap(bytes));
- }
- catch (ClosedChannelException e)
- {
+ } catch (ClosedChannelException e) {
connectionObserver.connectionClosed();
throw new TransportClosedException("Unable to write to channel", e);
- }
- catch (IOException e)
- {
- try
- {
+ } catch (IOException e) {
+ try {
writableByteChannel.close();
connectionObserver.connectionClosed();
throw new TransportClosedException("Unable to write to channel", e);
- }
- catch (IOException e1)
- {
+ } catch (IOException e1) {
//Don't care
}
}
-
}
- public void initialiseOutboundChannel(final WritableByteChannel writableByteChannel)
- {
+ public void initialiseOutboundChannel(final WritableByteChannel writableByteChannel) {
this.writableByteChannel = writableByteChannel;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java
index 105705d..fc5881c 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/AsyncTcpSocketFactory.java
@@ -30,70 +30,49 @@
import org.slf4j.LoggerFactory;
-public class AsyncTcpSocketFactory implements SocketFactory
-{
+public class AsyncTcpSocketFactory implements SocketFactory {
private static final Logger LOGGER = LoggerFactory.getLogger(AsyncTcpSocketFactory.class);
private static final int SINGLE_CONNECTION_BACKLOG = 1;
private final ExecutorService executorService;
- public AsyncTcpSocketFactory(final ExecutorService executorService)
- {
+ public AsyncTcpSocketFactory(final ExecutorService executorService) {
this.executorService = executorService;
}
@Override
- public DelegatingServerSocketChannel bind(final InetSocketAddress socketAddress)
- {
- try
- {
+ public DelegatingServerSocketChannel bind(final InetSocketAddress socketAddress) {
+ try {
final ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(socketAddress, SINGLE_CONNECTION_BACKLOG);
return new DelegatingServerSocketChannel(serverSocketChannel);
- }
- catch (java.net.BindException e)
- {
+ } catch (java.net.BindException e) {
throw new BindException(String.format("Failed to bind to interface:%s, port:%d", socketAddress.getHostName(), socketAddress.getPort()), e);
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
LOGGER.error("IOException occurred while waiting for a connection", e);
throw new GeneralRuntimeException("Failed to open or bind server socket channel", e);
}
}
@Override
- public void createSocketOnIncomingConnection(final DelegatingServerSocketChannel serverSocketChannel, final SocketEstablishedCallback socketEstablishedCallback)
- {
- executorService.execute(new Runnable()
- {
+ public void createSocketOnIncomingConnection(final DelegatingServerSocketChannel serverSocketChannel, final SocketEstablishedCallback socketEstablishedCallback) {
+ executorService.execute(new Runnable() {
@Override
- public void run()
- {
+ public void run() {
final SocketChannel socketChannel;
- try
- {
- try
- {
+ try {
+ try {
socketChannel = serverSocketChannel.accept();
socketEstablishedCallback.onSocketEstablished(socketChannel);
- }
- catch (AsynchronousCloseException e)
- {
+ } catch (AsynchronousCloseException e) {
LOGGER.warn("Server socket closed by another thread, while waiting to accept a new inbound connection.");
- }
- catch (ClosedChannelException e)
- {
+ } catch (ClosedChannelException e) {
LOGGER.warn("Server socket closed, while waiting to accept a new inbound connection.", e);
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
LOGGER.error("IOException occurred while waiting for a connection", e);
throw new GeneralRuntimeException("Failed to accept server socket channel", e);
}
- }
- catch (RuntimeException e)
- {
+ } catch (RuntimeException e) {
LOGGER.error("Exception thrown: ", e);
}
}
@@ -101,28 +80,19 @@ public void run()
}
@Override
- public void createSocketOnOutgoingConnection(final InetSocketAddress socketAddress, final SocketEstablishedCallback socketEstablishedCallback)
- {
- executorService.execute(new Runnable()
- {
+ public void createSocketOnOutgoingConnection(final InetSocketAddress socketAddress, final SocketEstablishedCallback socketEstablishedCallback) {
+ executorService.execute(new Runnable() {
@Override
- public void run()
- {
- try
- {
+ public void run() {
+ try {
final SocketChannel socketChannel;
- try
- {
+ try {
socketChannel = SocketChannel.open(socketAddress);
socketEstablishedCallback.onSocketEstablished(socketChannel);
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
throw new RuntimeException(String.format("Can't connect - host:%s, port:%d", socketAddress.getHostName(), socketAddress.getPort()), e);
}
- }
- catch (RuntimeException e)
- {
+ } catch (RuntimeException e) {
LOGGER.error("Caught Exception while executing", e);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/BindException.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/BindException.java
index c253561..649adde 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/BindException.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/BindException.java
@@ -16,10 +16,8 @@
package com.lmax.nanofix.transport;
-public class BindException extends RuntimeException
-{
- public BindException(final String message, final Throwable cause)
- {
+public class BindException extends RuntimeException {
+ public BindException(final String message, final Throwable cause) {
super(message, cause);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/ConnectionObserver.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/ConnectionObserver.java
index 2b32eda..141bb40 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/ConnectionObserver.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/ConnectionObserver.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.transport;
-public interface ConnectionObserver
-{
+public interface ConnectionObserver {
void connectionEstablished();
void connectionClosed();
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/DelegatingServerSocketChannel.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/DelegatingServerSocketChannel.java
index 0e0fc7b..c147790 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/DelegatingServerSocketChannel.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/DelegatingServerSocketChannel.java
@@ -20,22 +20,18 @@
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
-public class DelegatingServerSocketChannel
-{
+public class DelegatingServerSocketChannel {
final ServerSocketChannel serverSocketChannel;
- public DelegatingServerSocketChannel(final ServerSocketChannel serverSocketChannel)
- {
+ public DelegatingServerSocketChannel(final ServerSocketChannel serverSocketChannel) {
this.serverSocketChannel = serverSocketChannel;
}
- public SocketChannel accept() throws IOException
- {
+ public SocketChannel accept() throws IOException {
return serverSocketChannel.accept();
}
- public void close() throws IOException
- {
+ public void close() throws IOException {
serverSocketChannel.close();
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java
index ef8acc0..314e6db 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/PublishingConnectionObserver.java
@@ -19,35 +19,28 @@
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
-public class PublishingConnectionObserver implements ConnectionObserver
-{
+public class PublishingConnectionObserver implements ConnectionObserver {
private final Set observers = new CopyOnWriteArraySet();
- public void addObserver(final ConnectionObserver connectionObserver)
- {
+ public void addObserver(final ConnectionObserver connectionObserver) {
observers.add(connectionObserver);
}
- public void removeObserver(final ConnectionObserver connectionObserver)
- {
+ public void removeObserver(final ConnectionObserver connectionObserver) {
observers.remove(connectionObserver);
}
@Override
- public void connectionEstablished()
- {
- for (ConnectionObserver observer : observers)
- {
+ public void connectionEstablished() {
+ for (ConnectionObserver observer : observers) {
observer.connectionEstablished();
}
}
@Override
- public void connectionClosed()
- {
- for (ConnectionObserver observer : observers)
- {
+ public void connectionClosed() {
+ for (ConnectionObserver observer : observers) {
observer.connectionClosed();
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/SocketFactory.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/SocketFactory.java
index 05a1bcb..bfdb007 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/SocketFactory.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/SocketFactory.java
@@ -19,16 +19,14 @@
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;
-public interface SocketFactory
-{
+public interface SocketFactory {
DelegatingServerSocketChannel bind(InetSocketAddress socketAddress);
void createSocketOnIncomingConnection(DelegatingServerSocketChannel serverSocketChannel, SocketEstablishedCallback socketEstablishedCallback);
void createSocketOnOutgoingConnection(InetSocketAddress socketAddress, SocketEstablishedCallback socketEstablishedCallback);
- public interface SocketEstablishedCallback
- {
+ interface SocketEstablishedCallback {
void onSocketEstablished(SocketChannel socketChannel);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java
index 7e0001b..57105fd 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TcpTransport.java
@@ -26,8 +26,7 @@
import org.slf4j.LoggerFactory;
-public class TcpTransport implements Transport, ConnectionObserver
-{
+public class TcpTransport implements Transport, ConnectionObserver {
private static final Logger LOGGER = LoggerFactory.getLogger(TcpTransport.class);
@@ -41,8 +40,7 @@ public class TcpTransport implements Transport, ConnectionObserver
private SocketFactory asyncTcpSocketFactory;
public TcpTransport(final PublishingConnectionObserver publishingTransportObserver, final InetSocketAddress socketAddress,
- final SocketFactory asyncTcpSocketFactory, final TransportConfig transportConfig)
- {
+ final SocketFactory asyncTcpSocketFactory, final TransportConfig transportConfig) {
this.publishingTransportObserver = publishingTransportObserver;
this.socketAddress = socketAddress;
this.asyncTcpSocketFactory = asyncTcpSocketFactory;
@@ -51,13 +49,10 @@ public TcpTransport(final PublishingConnectionObserver publishingTransportObserv
}
@Override
- public void connect()
- {
- asyncTcpSocketFactory.createSocketOnOutgoingConnection(socketAddress, new SocketFactory.SocketEstablishedCallback()
- {
+ public void connect() {
+ asyncTcpSocketFactory.createSocketOnOutgoingConnection(socketAddress, new SocketFactory.SocketEstablishedCallback() {
@Override
- public void onSocketEstablished(final SocketChannel socketChannel)
- {
+ public void onSocketEstablished(final SocketChannel socketChannel) {
TcpTransport.this.socketChannel = socketChannel;
publishingTransportObserver.connectionEstablished();
}
@@ -66,127 +61,95 @@ public void onSocketEstablished(final SocketChannel socketChannel)
}
@Override
- public void listen()
- {
+ public void listen() {
serverSocketChannel = asyncTcpSocketFactory.bind(socketAddress);
acceptNewConnection();
}
@Override
- public void stopListening()
- {
- try
- {
- if (serverSocketChannel != null)
- {
+ public void stopListening() {
+ try {
+ if (serverSocketChannel != null) {
serverSocketChannel.close();
serverSocketChannel = null;
}
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
throw new RuntimeException("Failed to close listener socket", e);
}
}
@Override
- public ReadableByteChannel getReadableByteChannel()
- {
+ public ReadableByteChannel getReadableByteChannel() {
return socketChannel;
}
@Override
- public WritableByteChannel getWritableByteChannel()
- {
+ public WritableByteChannel getWritableByteChannel() {
return socketChannel;
}
@Override
- public void killSocket()
- {
- try
- {
+ public void killSocket() {
+ try {
socketChannel.socket().setSoLinger(true, 0);
socketChannel.close();
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
throw new RuntimeException("Unable to kill socket", e);
}
}
@Override
- public void close()
- {
- try
- {
- if (socketChannel != null)
- {
+ public void close() {
+ try {
+ if (socketChannel != null) {
socketChannel.close();
}
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
throw new RuntimeException("Unable to close socket", e);
}
}
@Override
- public boolean isConnected()
- {
+ public boolean isConnected() {
return socketChannel != null && socketChannel.isConnected();
}
@Override
- public void registerTransportObserver(final ConnectionObserver connectionObserver)
- {
+ public void registerTransportObserver(final ConnectionObserver connectionObserver) {
publishingTransportObserver.addObserver(connectionObserver);
}
@Override
- public void unregisterTransportObserver(final ConnectionObserver connectionObserver)
- {
+ public void unregisterTransportObserver(final ConnectionObserver connectionObserver) {
publishingTransportObserver.removeObserver(connectionObserver);
}
@Override
- public void connectionEstablished()
- {
+ public void connectionEstablished() {
}
@Override
- public void connectionClosed()
- {
- if (serverSocketChannel != null)
- {
- if (!transportConfig.shouldStayListening())
- {
- try
- {
+ public void connectionClosed() {
+ if (serverSocketChannel != null) {
+ if (!transportConfig.shouldStayListening()) {
+ try {
serverSocketChannel.close();
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
LOGGER.error("Failed to stop listening on port", e);
}
- }
- else
- {
+ } else {
acceptNewConnection();
}
}
}
- private void acceptNewConnection()
- {
- asyncTcpSocketFactory.createSocketOnIncomingConnection(serverSocketChannel, new SocketFactory.SocketEstablishedCallback()
- {
+ private void acceptNewConnection() {
+ asyncTcpSocketFactory.createSocketOnIncomingConnection(serverSocketChannel, new SocketFactory.SocketEstablishedCallback() {
@Override
- public void onSocketEstablished(final SocketChannel socketChannel)
- {
+ public void onSocketEstablished(final SocketChannel socketChannel) {
TcpTransport.this.socketChannel = socketChannel;
publishingTransportObserver.connectionEstablished();
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/Transport.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/Transport.java
index fa0271f..89a70c3 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/Transport.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/Transport.java
@@ -19,8 +19,7 @@
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
-public interface Transport extends TransportOperations
-{
+public interface Transport extends TransportOperations {
ReadableByteChannel getReadableByteChannel();
WritableByteChannel getWritableByteChannel();
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportClosedException.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportClosedException.java
index 09ee839..e6bf4ca 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportClosedException.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportClosedException.java
@@ -16,10 +16,8 @@
package com.lmax.nanofix.transport;
-public class TransportClosedException extends RuntimeException
-{
- public TransportClosedException(final String message, final Throwable cause)
- {
+public class TransportClosedException extends RuntimeException {
+ public TransportClosedException(final String message, final Throwable cause) {
super(message, cause);
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfig.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfig.java
index 420be1b..58b777e 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfig.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfig.java
@@ -16,7 +16,6 @@
package com.lmax.nanofix.transport;
-public interface TransportConfig
-{
+public interface TransportConfig {
boolean shouldStayListening();
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfigImpl.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfigImpl.java
index fdda267..a77e4d2 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfigImpl.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportConfigImpl.java
@@ -16,18 +16,15 @@
package com.lmax.nanofix.transport;
-public class TransportConfigImpl implements TransportConfig
-{
+public class TransportConfigImpl implements TransportConfig {
final boolean stayListening;
- public TransportConfigImpl(final boolean stayListening)
- {
+ public TransportConfigImpl(final boolean stayListening) {
this.stayListening = stayListening;
}
@Override
- public boolean shouldStayListening()
- {
+ public boolean shouldStayListening() {
return stayListening;
}
}
diff --git a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportOperations.java b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportOperations.java
index e40f6b4..9dddffa 100644
--- a/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportOperations.java
+++ b/nanofix-client/src/main/java/com/lmax/nanofix/transport/TransportOperations.java
@@ -16,8 +16,7 @@
package com.lmax.nanofix.transport;
-public interface TransportOperations
-{
+public interface TransportOperations {
void connect();
void listen();
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/ChannelInitializerTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/ChannelInitializerTest.java
index 72e553b..439c6d5 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/ChannelInitializerTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/ChannelInitializerTest.java
@@ -34,8 +34,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
-public class ChannelInitializerTest
-{
+public class ChannelInitializerTest {
private final Transport transport = mock(Transport.class);
private final ByteChannelReader byteChannelReader = mock(ByteChannelReader.class);
private final OutboundMessageHandler outboundMessageHandler = mock(OutboundMessageHandler.class);
@@ -43,14 +42,12 @@ public class ChannelInitializerTest
private final ReadableByteChannel readableByteChannel = mock(ReadableByteChannel.class);
@Before
- public void setUp()
- {
+ public void setUp() {
Mockito.ignoreStubs(writableByteChannel);
}
@Test
- public void shouldStartByteChannelReaderOnConnectionEstablished()
- {
+ public void shouldStartByteChannelReaderOnConnectionEstablished() {
given(transport.getWritableByteChannel()).willReturn(writableByteChannel);
given(transport.getReadableByteChannel()).willReturn(readableByteChannel);
@@ -63,28 +60,23 @@ public void shouldStartByteChannelReaderOnConnectionEstablished()
verify(byteChannelReader).blockingStart(readableByteChannel);
}
- private static class DeterministicExecutor implements Executor
- {
+ private static class DeterministicExecutor implements Executor {
private List commands = new ArrayList<>();
- DeterministicExecutor()
- {
+ DeterministicExecutor() {
super();
}
- public void runPendingCommands()
- {
+ public void runPendingCommands() {
final List commandsToRun = commands;
commands = new ArrayList<>();
- for (Runnable command : commandsToRun)
- {
+ for (Runnable command : commandsToRun) {
command.run();
}
}
- public void execute(final Runnable command)
- {
+ public void execute(final Runnable command) {
commands.add(command);
}
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java
index 6695acf..6495adb 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/BitsTest.java
@@ -23,84 +23,73 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-public class BitsTest
-{
+public class BitsTest {
byte[] data;
@Before
- public void setUp()
- {
+ public void setUp() {
data = new byte[20];
}
@Test
- public void shouldWriteAndReadLong() throws Exception
- {
+ public void shouldWriteAndReadLong() throws Exception {
long expectedValue = 12893471928734L;
Bits.writeLong(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readLong(data, 3));
}
@Test
- public void shouldWriteAndReadNegativeLong() throws Exception
- {
+ public void shouldWriteAndReadNegativeLong() throws Exception {
long expectedValue = -722393471928734L;
Bits.writeLong(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readLong(data, 3));
}
@Test
- public void shouldWriteAndReadInt() throws Exception
- {
+ public void shouldWriteAndReadInt() throws Exception {
int expectedValue = 51345234;
Bits.writeInt(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readInt(data, 3));
}
@Test
- public void shouldWriteAndReadNegativeInt() throws Exception
- {
+ public void shouldWriteAndReadNegativeInt() throws Exception {
int expectedValue = -34574234;
Bits.writeInt(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readInt(data, 3));
}
@Test
- public void shouldWriteAndReadShort() throws Exception
- {
+ public void shouldWriteAndReadShort() throws Exception {
short expectedValue = 3452;
Bits.writeShort(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readShort(data, 3));
}
@Test
- public void shouldWriteAndReadNegativeShort() throws Exception
- {
+ public void shouldWriteAndReadNegativeShort() throws Exception {
short expectedValue = -8123;
Bits.writeShort(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readShort(data, 3));
}
@Test
- public void shouldWriteAndReadByte() throws Exception
- {
+ public void shouldWriteAndReadByte() throws Exception {
byte expectedValue = 23;
Bits.writeShort(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readShort(data, 3));
}
@Test
- public void shouldWriteAndReadNegativeByte() throws Exception
- {
+ public void shouldWriteAndReadNegativeByte() throws Exception {
byte expectedValue = -13;
Bits.writeByte(data, 3, expectedValue);
assertEquals(expectedValue, Bits.readByte(data, 3));
}
@Test
- public void shouldWriteAndReadBoolean() throws Exception
- {
+ public void shouldWriteAndReadBoolean() throws Exception {
Bits.writeBoolean(data, 3, true);
assertTrue(Bits.readBoolean(data, 3));
Bits.writeBoolean(data, 3, false);
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java
index dad3615..a246436 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/byteoperations/ByteUtilTest.java
@@ -27,208 +27,190 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-public class ByteUtilTest
-{
+public class ByteUtilTest {
@Test
- public void shouldFormatIpAddressAsString()
- {
- final int offset = 0;
- final int address = Bits.readInt(new byte[]{(byte) 192, (byte) 168, (byte) 70, (byte) 12}, offset);
-
- assertEquals("192.168.70.12", ByteUtil.formatIntAsIpAddress(address));
- }
-
- @Test
- public void shouldPackFourUnsignedShortIntegersIntoLong()
- {
- final int int1 = 45454;
- final int int2 = 32234;
- final int int3 = 12231;
- final int int4 = 65000;
-
- final long longValue = ByteUtil.packLongWithUnsignedShortInts(int1, int2, int3, int4);
-
- final byte[] longBytes = new byte[8];
- Bits.writeLong(longBytes, 0, longValue);
-
- assertEquals(int1, Bits.readShort(longBytes, 0) & 0xFFFF);
- assertEquals(int2, Bits.readShort(longBytes, 2) & 0xFFFF);
- assertEquals(int3, Bits.readShort(longBytes, 4) & 0xFFFF);
- assertEquals(int4, Bits.readShort(longBytes, 6) & 0xFFFF);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionForIntLargerThanMaxUnsignedShort()
- {
- final int int1 = (1 << 16);
- final int int2 = 32234;
- final int int3 = 12231;
- final int int4 = 65000;
-
- ByteUtil.packLongWithUnsignedShortInts(int1, int2, int3, int4);
- }
-
- @Test
- public void shouldWriteLongAsAscii()
- {
- final byte[] longAsAsciiBytes = new byte[19];
-
- final int offset = 0;
- ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 0L);
- assertArrayEquals("0000000000000000000".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
-
- ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 7L);
- assertArrayEquals("0000000000000000007".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
-
- ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 900000000000000000L);
- assertArrayEquals("0900000000000000000".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
-
- ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 99999999999999999L);
- assertArrayEquals("0099999999999999999".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
-
- ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 899999999999999999L);
- assertArrayEquals("0899999999999999999".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionWhenOutOfRangeForMaxLong()
- {
- final byte[] longAsAscii = new byte[19];
-
- ByteUtil.writeLongAsAscii(longAsAscii, 0, Long.MAX_VALUE);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionWhenOutOfRangeForMinLong()
- {
- final byte[] longAsAscii = new byte[19];
-
- ByteUtil.writeLongAsAscii(longAsAscii, 0, Long.MIN_VALUE);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionWhenJustOutOfRange()
- {
- final byte[] longAsAscii = new byte[19];
-
- ByteUtil.writeLongAsAscii(longAsAscii, 0, 9000000000000000001L);
- }
-
- @Test
- public void shouldIdentifyDigitsInAsciiCharacters() throws UnsupportedEncodingException
- {
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("0".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("1".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("2".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("3".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("4".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("5".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("6".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("7".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("8".getBytes(StandardCharsets.US_ASCII)[0]));
- assertTrue("Is a digit", ByteUtil.isAsciiDigit("9".getBytes(StandardCharsets.US_ASCII)[0]));
-
- assertFalse("Not a digit", ByteUtil.isAsciiDigit("/".getBytes(StandardCharsets.US_ASCII)[0]));
- assertFalse("Not a digit", ByteUtil.isAsciiDigit("A".getBytes(StandardCharsets.US_ASCII)[0]));
- assertFalse("Not a digit", ByteUtil.isAsciiDigit("z".getBytes(StandardCharsets.US_ASCII)[0]));
- assertFalse("Not a digit", ByteUtil.isAsciiDigit(";".getBytes(StandardCharsets.US_ASCII)[0]));
- }
-
- @Test
- public void shouldReadIntegerFromAsciiBytes()
- throws UnsupportedEncodingException
- {
- checkIntegerEncodedAsAsciiValue("0");
- checkIntegerEncodedAsAsciiValue("00");
- checkIntegerEncodedAsAsciiValue("1");
- checkIntegerEncodedAsAsciiValue("10");
- checkIntegerEncodedAsAsciiValue("010");
- checkIntegerEncodedAsAsciiValue("7");
- checkIntegerEncodedAsAsciiValue("123");
- checkIntegerEncodedAsAsciiValue("99999");
- }
-
- @Test
- public void shouldReadLongFromAsciiBytes()
- throws UnsupportedEncodingException
- {
- checkLongEncodedAsAsciiValue("0");
- checkLongEncodedAsAsciiValue("00");
- checkLongEncodedAsAsciiValue("1");
- checkLongEncodedAsAsciiValue("10");
- checkLongEncodedAsAsciiValue("010");
- checkLongEncodedAsAsciiValue("7");
- checkLongEncodedAsAsciiValue("123");
- checkLongEncodedAsAsciiValue("99999");
- checkLongEncodedAsAsciiValue("999999999999");
- checkLongEncodedAsAsciiValue("" + Long.MAX_VALUE);
- }
-
- @Test
- public void shouldConfirmIsIntegerValue() throws UnsupportedEncodingException
- {
- final byte[] bytes = "123".getBytes(StandardCharsets.US_ASCII);
- assertTrue(ByteUtil.isInteger(bytes, 0, bytes.length));
- }
-
- @Test
- public void shouldConfirmIsNotIntegerValue() throws UnsupportedEncodingException
- {
- final byte[] bytes = "1;3".getBytes(StandardCharsets.US_ASCII);
- assertFalse(ByteUtil.isInteger(bytes, 0, bytes.length));
- }
-
- @Test
- public void shouldReplaceSohWithBar()
- throws Exception
- {
- final byte[] source = "A test string \u0001 containing \u0001 ASCII SOH\u0001".getBytes(StandardCharsets.US_ASCII);
- final byte[] expected = "A test string | containing | ASCII SOH|".getBytes(StandardCharsets.US_ASCII);
-
- final byte soh = (byte) 1;
- final byte bar = (byte) 124;
- ByteUtil.replace(source, 0, source.length, soh, bar);
-
- Assert.assertArrayEquals(expected, source);
- }
-
- @Test
- public void shouldEncodeStringAsAscii() throws UnsupportedEncodingException
- {
- final String testSequence = "This is a string of characters that should encode into ascii bytes as simple as 123.";
-
- final byte[] result = new byte[testSequence.length()];
-
- ByteUtil.asciiEncode(testSequence, 0, result, 0, result.length);
-
- assertArrayEquals(testSequence.getBytes(StandardCharsets.US_ASCII), result);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void shouldOnlyAllowUsAscii()
- {
- final String testSequence = "The £ symbol is not allowed in US-ASCII";
-
- final byte[] result = new byte[testSequence.length()];
-
- ByteUtil.asciiEncode(testSequence, 0, result, 0, result.length);
- }
-
-
- private void checkIntegerEncodedAsAsciiValue(final String integerAsString)
- throws UnsupportedEncodingException
- {
- final byte[] bytes = integerAsString.getBytes(StandardCharsets.US_ASCII);
- final int value = ByteUtil.readIntFromAscii(bytes, 0, bytes.length);
- assertEquals(Integer.parseInt(integerAsString), value);
- }
-
- private void checkLongEncodedAsAsciiValue(final String longAsString)
- throws UnsupportedEncodingException
- {
- final byte[] bytes = longAsString.getBytes(StandardCharsets.US_ASCII);
- final long value = ByteUtil.readLongFromAscii(bytes, 0, bytes.length);
- assertEquals(Long.parseLong(longAsString), value);
- }
+ public void shouldFormatIpAddressAsString() {
+ final int offset = 0;
+ final int address = Bits.readInt(new byte[]{(byte)192, (byte)168, (byte)70, (byte)12}, offset);
+
+ assertEquals("192.168.70.12", ByteUtil.formatIntAsIpAddress(address));
+ }
+
+ @Test
+ public void shouldPackFourUnsignedShortIntegersIntoLong() {
+ final int int1 = 45454;
+ final int int2 = 32234;
+ final int int3 = 12231;
+ final int int4 = 65000;
+
+ final long longValue = ByteUtil.packLongWithUnsignedShortInts(int1, int2, int3, int4);
+
+ final byte[] longBytes = new byte[8];
+ Bits.writeLong(longBytes, 0, longValue);
+
+ assertEquals(int1, Bits.readShort(longBytes, 0) & 0xFFFF);
+ assertEquals(int2, Bits.readShort(longBytes, 2) & 0xFFFF);
+ assertEquals(int3, Bits.readShort(longBytes, 4) & 0xFFFF);
+ assertEquals(int4, Bits.readShort(longBytes, 6) & 0xFFFF);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionForIntLargerThanMaxUnsignedShort() {
+ final int int1 = (1 << 16);
+ final int int2 = 32234;
+ final int int3 = 12231;
+ final int int4 = 65000;
+
+ ByteUtil.packLongWithUnsignedShortInts(int1, int2, int3, int4);
+ }
+
+ @Test
+ public void shouldWriteLongAsAscii() {
+ final byte[] longAsAsciiBytes = new byte[19];
+
+ final int offset = 0;
+ ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 0L);
+ assertArrayEquals("0000000000000000000".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
+
+ ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 7L);
+ assertArrayEquals("0000000000000000007".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
+
+ ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 900000000000000000L);
+ assertArrayEquals("0900000000000000000".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
+
+ ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 99999999999999999L);
+ assertArrayEquals("0099999999999999999".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
+
+ ByteUtil.writeLongAsAscii(longAsAsciiBytes, offset, 899999999999999999L);
+ assertArrayEquals("0899999999999999999".getBytes(StandardCharsets.US_ASCII), longAsAsciiBytes);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenOutOfRangeForMaxLong() {
+ final byte[] longAsAscii = new byte[19];
+
+ ByteUtil.writeLongAsAscii(longAsAscii, 0, Long.MAX_VALUE);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenOutOfRangeForMinLong() {
+ final byte[] longAsAscii = new byte[19];
+
+ ByteUtil.writeLongAsAscii(longAsAscii, 0, Long.MIN_VALUE);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenJustOutOfRange() {
+ final byte[] longAsAscii = new byte[19];
+
+ ByteUtil.writeLongAsAscii(longAsAscii, 0, 9000000000000000001L);
+ }
+
+ @Test
+ public void shouldIdentifyDigitsInAsciiCharacters() throws UnsupportedEncodingException {
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("0".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("1".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("2".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("3".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("4".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("5".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("6".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("7".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("8".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertTrue("Is a digit", ByteUtil.isAsciiDigit("9".getBytes(StandardCharsets.US_ASCII)[0]));
+
+ assertFalse("Not a digit", ByteUtil.isAsciiDigit("/".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertFalse("Not a digit", ByteUtil.isAsciiDigit("A".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertFalse("Not a digit", ByteUtil.isAsciiDigit("z".getBytes(StandardCharsets.US_ASCII)[0]));
+ assertFalse("Not a digit", ByteUtil.isAsciiDigit(";".getBytes(StandardCharsets.US_ASCII)[0]));
+ }
+
+ @Test
+ public void shouldReadIntegerFromAsciiBytes()
+ throws UnsupportedEncodingException {
+ checkIntegerEncodedAsAsciiValue("0");
+ checkIntegerEncodedAsAsciiValue("00");
+ checkIntegerEncodedAsAsciiValue("1");
+ checkIntegerEncodedAsAsciiValue("10");
+ checkIntegerEncodedAsAsciiValue("010");
+ checkIntegerEncodedAsAsciiValue("7");
+ checkIntegerEncodedAsAsciiValue("123");
+ checkIntegerEncodedAsAsciiValue("99999");
+ }
+
+ @Test
+ public void shouldReadLongFromAsciiBytes()
+ throws UnsupportedEncodingException {
+ checkLongEncodedAsAsciiValue("0");
+ checkLongEncodedAsAsciiValue("00");
+ checkLongEncodedAsAsciiValue("1");
+ checkLongEncodedAsAsciiValue("10");
+ checkLongEncodedAsAsciiValue("010");
+ checkLongEncodedAsAsciiValue("7");
+ checkLongEncodedAsAsciiValue("123");
+ checkLongEncodedAsAsciiValue("99999");
+ checkLongEncodedAsAsciiValue("999999999999");
+ checkLongEncodedAsAsciiValue("" + Long.MAX_VALUE);
+ }
+
+ @Test
+ public void shouldConfirmIsIntegerValue() throws UnsupportedEncodingException {
+ final byte[] bytes = "123".getBytes(StandardCharsets.US_ASCII);
+ assertTrue(ByteUtil.isInteger(bytes, 0, bytes.length));
+ }
+
+ @Test
+ public void shouldConfirmIsNotIntegerValue() throws UnsupportedEncodingException {
+ final byte[] bytes = "1;3".getBytes(StandardCharsets.US_ASCII);
+ assertFalse(ByteUtil.isInteger(bytes, 0, bytes.length));
+ }
+
+ @Test
+ public void shouldReplaceSohWithBar()
+ throws Exception {
+ final byte[] source = "A test string \u0001 containing \u0001 ASCII SOH\u0001".getBytes(StandardCharsets.US_ASCII);
+ final byte[] expected = "A test string | containing | ASCII SOH|".getBytes(StandardCharsets.US_ASCII);
+
+ final byte soh = (byte)1;
+ final byte bar = (byte)124;
+ ByteUtil.replace(source, 0, source.length, soh, bar);
+
+ Assert.assertArrayEquals(expected, source);
+ }
+
+ @Test
+ public void shouldEncodeStringAsAscii() throws UnsupportedEncodingException {
+ final String testSequence = "This is a string of characters that should encode into ascii bytes as simple as 123.";
+
+ final byte[] result = new byte[testSequence.length()];
+
+ ByteUtil.asciiEncode(testSequence, 0, result, 0, result.length);
+
+ assertArrayEquals(testSequence.getBytes(StandardCharsets.US_ASCII), result);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldOnlyAllowUsAscii() {
+ final String testSequence = "The £ symbol is not allowed in US-ASCII";
+
+ final byte[] result = new byte[testSequence.length()];
+
+ ByteUtil.asciiEncode(testSequence, 0, result, 0, result.length);
+ }
+
+
+ private void checkIntegerEncodedAsAsciiValue(final String integerAsString)
+ throws UnsupportedEncodingException {
+ final byte[] bytes = integerAsString.getBytes(StandardCharsets.US_ASCII);
+ final int value = ByteUtil.readIntFromAscii(bytes, 0, bytes.length);
+ assertEquals(Integer.parseInt(integerAsString), value);
+ }
+
+ private void checkLongEncodedAsAsciiValue(final String longAsString)
+ throws UnsupportedEncodingException {
+ final byte[] bytes = longAsString.getBytes(StandardCharsets.US_ASCII);
+ final long value = ByteUtil.readLongFromAscii(bytes, 0, bytes.length);
+ assertEquals(Long.parseLong(longAsString), value);
+ }
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java
index 25d8a77..924e6d7 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/concurrent/ThreadBlockerTest.java
@@ -25,22 +25,17 @@
import static org.hamcrest.Matchers.is;
-public class ThreadBlockerTest
-{
+public class ThreadBlockerTest {
private volatile boolean running = true;
@Test
- public void threadShouldSwitchBetweenWaitingAndRunningStatesWhenRequested() throws InterruptedException
- {
+ public void threadShouldSwitchBetweenWaitingAndRunningStatesWhenRequested() throws InterruptedException {
final ThreadBlocker threadBlocker = new ThreadBlocker();
- final Thread thread = new Thread(new Runnable()
- {
+ final Thread thread = new Thread(new Runnable() {
@Override
- public void run()
- {
- while (running)
- {
+ public void run() {
+ while (running) {
threadBlocker.mayWait();
}
}
@@ -61,18 +56,13 @@ public void run()
}
- private void waitForThreadState(final Thread thread, final Thread.State expectedState, final int timeoutMillis)
- {
+ private void waitForThreadState(final Thread thread, final Thread.State expectedState, final int timeoutMillis) {
final int numberOfRetries = 10;
final int waitBetweenRetries = timeoutMillis / 10;
- for (int i = 0; i < numberOfRetries; i++)
- {
- if (thread.getState() == expectedState)
- {
+ for (int i = 0; i < numberOfRetries; i++) {
+ if (thread.getState() == expectedState) {
return;
- }
- else
- {
+ } else {
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(waitBetweenRetries));
}
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/ByteChannelReaderTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/ByteChannelReaderTest.java
index d113248..153db89 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/ByteChannelReaderTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/ByteChannelReaderTest.java
@@ -31,16 +31,14 @@
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.verify;
-public class ByteChannelReaderTest
-{
+public class ByteChannelReaderTest {
private final ReadableByteChannel readableByteChannel = Mockito.mock(ReadableByteChannel.class);
private final ByteStreamMessageParser byteStreamMessageParser = Mockito.mock(ByteStreamMessageParser.class);
private final ConnectionObserver connectionObserver = Mockito.mock(ConnectionObserver.class);
private final ByteChannelReader inputStreamReader = new ByteChannelReader(byteStreamMessageParser, new ThreadBlocker(), connectionObserver);
@Test
- public void shouldPassBytesFromInputStreamToParser() throws Exception
- {
+ public void shouldPassBytesFromInputStreamToParser() throws Exception {
given(readableByteChannel.isOpen()).willReturn(false);
given(readableByteChannel.read(any(ByteBuffer.class))).willReturn(1, -1);
@@ -50,24 +48,19 @@ public void shouldPassBytesFromInputStreamToParser() throws Exception
}
@Test(expected = RuntimeException.class)
- public void shouldCloseInputStreamIfExceptionIsThrownAndInputStreamIsStillOpen() throws Exception
- {
+ public void shouldCloseInputStreamIfExceptionIsThrownAndInputStreamIsStillOpen() throws Exception {
given(readableByteChannel.read(any(ByteBuffer.class))).willThrow(new RuntimeException("boom!"));
given(readableByteChannel.isOpen()).willReturn(true);
- try
- {
+ try {
inputStreamReader.blockingStart(readableByteChannel);
- }
- finally
- {
+ } finally {
verify(readableByteChannel).close();
}
}
@Test
- public void shouldNotifyTransportObserverWhenConnectionIsClosed() throws Exception
- {
+ public void shouldNotifyTransportObserverWhenConnectionIsClosed() throws Exception {
given(readableByteChannel.read(any(ByteBuffer.class))).willThrow(new ClosedChannelException());
inputStreamReader.blockingStart(readableByteChannel);
@@ -76,8 +69,7 @@ public void shouldNotifyTransportObserverWhenConnectionIsClosed() throws Excepti
}
@Test
- public void shouldNotifyTransportObserverWhenIOExceptionIsThrown() throws Exception
- {
+ public void shouldNotifyTransportObserverWhenIOExceptionIsThrown() throws Exception {
given(readableByteChannel.read(any(ByteBuffer.class))).willThrow(new IOException());
inputStreamReader.blockingStart(readableByteChannel);
@@ -86,8 +78,7 @@ public void shouldNotifyTransportObserverWhenIOExceptionIsThrown() throws Except
}
@Test
- public void shouldCloseChannelWhenEndOfStreamIsReached() throws Exception
- {
+ public void shouldCloseChannelWhenEndOfStreamIsReached() throws Exception {
given(readableByteChannel.read(any(ByteBuffer.class))).willReturn(-1);
given(readableByteChannel.isOpen()).willReturn(true);
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java
index 08699af..d5e300b 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageFactoryTest.java
@@ -22,22 +22,18 @@
import static org.hamcrest.CoreMatchers.is;
-public class FixMessageFactoryTest
-{
+public class FixMessageFactoryTest {
private static final byte ONE = 1;
private static final byte TWO = 1;
private static final byte THREE = 1;
@Test
- public void shouldConstructFixMessage() throws Exception
- {
+ public void shouldConstructFixMessage() throws Exception {
final byte[] msg1 = {ONE, TWO, THREE};
- final FixMessageStreamFactory fixMessageStreamFactory = new FixMessageStreamFactory(new FixMessageHandler()
- {
+ final FixMessageStreamFactory fixMessageStreamFactory = new FixMessageStreamFactory(new FixMessageHandler() {
@Override
- public void onFixMessage(final FixMessage fixMessage)
- {
+ public void onFixMessage(final FixMessage fixMessage) {
Assert.assertThat(fixMessage.getFirstValue(1), is(new String(msg1, 0, 1)));
Assert.assertThat(fixMessage.getFirstValue(2), is(new String(msg1, 1, 2)));
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java
index a103dcc..b553cd9 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageTest.java
@@ -24,15 +24,13 @@
import static org.hamcrest.CoreMatchers.is;
-public class FixMessageTest
-{
+public class FixMessageTest {
private static final char SOH_CHAR = '\u0001';
private static final char PIPE_CHAR = '|';
@Test
- public void shouldReturnFixMessage() throws Exception
- {
+ public void shouldReturnFixMessage() throws Exception {
final Multimap multimap = ArrayListMultimap.create();
multimap.put(1, "firstKey");
multimap.put(2, "secondKey");
@@ -45,8 +43,7 @@ public void shouldReturnFixMessage() throws Exception
}
@Test
- public void shouldReturnFixMessageWithDuplicateKeys() throws Exception
- {
+ public void shouldReturnFixMessageWithDuplicateKeys() throws Exception {
final Multimap multimap = ArrayListMultimap.create();
multimap.put(1, "firstKey");
multimap.put(2, "secondKey");
@@ -60,8 +57,7 @@ public void shouldReturnFixMessageWithDuplicateKeys() throws Exception
}
@Test
- public void shouldReturnFixMessageWithPipeSeparator() throws Exception
- {
+ public void shouldReturnFixMessageWithPipeSeparator() throws Exception {
final Multimap multimap = ArrayListMultimap.create();
multimap.put(1, "firstKey");
multimap.put(2, "secondKey");
@@ -74,8 +70,7 @@ public void shouldReturnFixMessageWithPipeSeparator() throws Exception
}
@Test
- public void shouldReturnFalseIfFixMessageDoesNotHaveTag() throws Exception
- {
+ public void shouldReturnFalseIfFixMessageDoesNotHaveTag() throws Exception {
final Multimap multimap = ArrayListMultimap.create();
final FixMessage fixMessage = new FixMessage(multimap);
@@ -83,8 +78,7 @@ public void shouldReturnFalseIfFixMessageDoesNotHaveTag() throws Exception
}
@Test
- public void shouldReturnFixMessageWithPipeSeparatorWithDuplicateKeys() throws Exception
- {
+ public void shouldReturnFixMessageWithPipeSeparatorWithDuplicateKeys() throws Exception {
final Multimap multimap = ArrayListMultimap.create();
multimap.put(1, "firstKey");
multimap.put(2, "secondKey");
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java
index 84fe73f..e7941b0 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixMessageUtil.java
@@ -23,8 +23,7 @@
import org.junit.Test;
-public final class FixMessageUtil
-{
+public final class FixMessageUtil {
public static final byte[] LOGON_MESSAGE;
public static final byte[] NEW_ORDER_SINGLE;
@@ -32,77 +31,68 @@ public final class FixMessageUtil
public static final byte[] TRUNCATED_EXECUTION_REPORT;
public static final byte[] LOGON_44_MESSAGE;
- static
- {
- LOGON_MESSAGE = "8=FIX.4.2|9=105|35=A|34=1|49=marketm155yjtfwicmfe|52=20100713-17:04:39.641|56=FIX-API|95=9|96=P4ssword.|98=0|108=2|141=Y|10=191|".getBytes(StandardCharsets.US_ASCII);
- LOGON_44_MESSAGE = ("8=FIX.4.2|9=105|35=A|34=1|49=marketm155yjtfwicmfe|52=20100713-17:04:39.641|56=FIX-API|553=foobar|554=P4ssword.|98=0|108=2|141=Y|" +
- "10=191|").getBytes(StandardCharsets.US_ASCII);
-
- NEW_ORDER_SINGLE = ("8=FIX.4.4|9=191|35=D|34=14|49=PERS|52=20080108-19:41:12.859|56=PHLX|57=MINIDEMO|1=00217844|11=xxxxxxxxxxxxxxxxxxx|38=10000|40=3|54=1|55=EUR/USD|59=1|" +
- "60=20080108-19:41:12|99=1.46909|9041=7670249|10=171|").getBytes(StandardCharsets.US_ASCII);
- EXECUTION_REPORT = ("8=FIX.4.4|9=178|35=8|49=PHLX|56=PERS|11=xxxxxxxxxxxxxxxxxxx|52=20071123-05:30:00.000|20=3|150=0|39=E|55=MSFT|167=CS|54=1|38=15|40=2|44=15|58=PHLX EQUITY TESTING|" +
- "59=0|47=C|32=0|31=0|151=15|14=0|6=0|10=128|").getBytes(StandardCharsets.US_ASCII);
- TRUNCATED_EXECUTION_REPORT = ("8=FIX.4.2|9=254|35=8|34=1005699|49=FIX-API|52=20110216-14:14:46.354|56=optfx|1=8000|6=0|11=8000001f0fcbd139|14=0|17=AAAPrQAAAAADi0g0|20=0|22=8|" +
- "37=AAAPrQAAAAA").getBytes(StandardCharsets.US_ASCII);
+ static {
+ LOGON_MESSAGE = "8=FIX.4.2|9=105|35=A|34=1|49=marketm155yjtfwicmfe|52=20100713-17:04:39.641|56=FIX-API|95=9|96=P4ssword.|98=0|108=2|141=Y|10=191|".getBytes(StandardCharsets.US_ASCII);
+ LOGON_44_MESSAGE = ("8=FIX.4.2|9=105|35=A|34=1|49=marketm155yjtfwicmfe|52=20100713-17:04:39.641|56=FIX-API|553=foobar|554=P4ssword.|98=0|108=2|141=Y|" +
+ "10=191|").getBytes(StandardCharsets.US_ASCII);
+
+ NEW_ORDER_SINGLE = ("8=FIX.4.4|9=191|35=D|34=14|49=PERS|52=20080108-19:41:12.859|56=PHLX|57=MINIDEMO|1=00217844|11=xxxxxxxxxxxxxxxxxxx|38=10000|40=3|54=1|55=EUR/USD|59=1|" +
+ "60=20080108-19:41:12|99=1.46909|9041=7670249|10=171|").getBytes(StandardCharsets.US_ASCII);
+ EXECUTION_REPORT = ("8=FIX.4.4|9=178|35=8|49=PHLX|56=PERS|11=xxxxxxxxxxxxxxxxxxx|52=20071123-05:30:00.000|20=3|150=0|39=E|55=MSFT|167=CS|54=1|38=15|40=2|44=15|58=PHLX EQUITY TESTING|" +
+ "59=0|47=C|32=0|31=0|151=15|14=0|6=0|10=128|").getBytes(StandardCharsets.US_ASCII);
+ TRUNCATED_EXECUTION_REPORT = ("8=FIX.4.2|9=254|35=8|34=1005699|49=FIX-API|52=20110216-14:14:46.354|56=optfx|1=8000|6=0|11=8000001f0fcbd139|14=0|17=AAAPrQAAAAADi0g0|20=0|22=8|" +
+ "37=AAAPrQAAAAA").getBytes(StandardCharsets.US_ASCII);
}
private static final byte SOH = (byte)1;
private static final byte BAR = (byte)124;
- public static byte[] getLogonMessage()
- {
+ public static byte[] getLogonMessage() {
byte[] buffer = new byte[LOGON_MESSAGE.length];
System.arraycopy(LOGON_MESSAGE, 0, buffer, 0, LOGON_MESSAGE.length);
prepareBuffer(buffer);
return buffer;
}
- public static byte[] getNewOrderSingle()
- {
+ public static byte[] getNewOrderSingle() {
byte[] buffer = new byte[NEW_ORDER_SINGLE.length];
System.arraycopy(NEW_ORDER_SINGLE, 0, buffer, 0, NEW_ORDER_SINGLE.length);
prepareBuffer(buffer);
return buffer;
}
- public static byte[] getExecutionReport()
- {
+ public static byte[] getExecutionReport() {
byte[] buffer = new byte[EXECUTION_REPORT.length];
System.arraycopy(EXECUTION_REPORT, 0, buffer, 0, EXECUTION_REPORT.length);
prepareBuffer(buffer);
return buffer;
}
- public static byte[] getTruncatedExecutionReport()
- {
+ public static byte[] getTruncatedExecutionReport() {
byte[] buffer = new byte[TRUNCATED_EXECUTION_REPORT.length];
System.arraycopy(TRUNCATED_EXECUTION_REPORT, 0, buffer, 0, TRUNCATED_EXECUTION_REPORT.length);
prepareBuffer(buffer);
return buffer;
}
- private static void prepareBuffer(final byte[] buffer)
- {
+ private static void prepareBuffer(final byte[] buffer) {
ByteUtil.replace(buffer, 0, buffer.length, BAR, SOH);
}
public static void setOrderIdOnNewOrderSingle(final long orderId, final byte[] newOrderSingle)
- throws Exception
- {
+ throws Exception {
int orderIdOffset = 94;
ByteUtil.writeLongAsAscii(newOrderSingle, orderIdOffset, orderId);
}
- public static String convertFixControlCharacters(byte[] message)
- {
+ public static String convertFixControlCharacters(byte[] message) {
byte[] buffer = new byte[message.length];
System.arraycopy(message, 0, buffer, 0, message.length);
prepareBufferForStringForm(buffer);
return new String(buffer, StandardCharsets.US_ASCII);
}
- public static byte[] convertFixControlCharacters(String message)
- {
+ public static byte[] convertFixControlCharacters(String message) {
byte[] asByteArray = message.getBytes(StandardCharsets.US_ASCII);
byte[] buffer = new byte[asByteArray.length];
System.arraycopy(asByteArray, 0, buffer, 0, asByteArray.length);
@@ -110,8 +100,7 @@ public static byte[] convertFixControlCharacters(String message)
return buffer;
}
- private static void prepareBufferForStringForm(final byte[] buffer)
- {
+ private static void prepareBufferForStringForm(final byte[] buffer) {
final byte soh = (byte)1;
final byte bar = (byte)124;
@@ -119,8 +108,7 @@ private static void prepareBufferForStringForm(final byte[] buffer)
}
@Test
- public void shouldSetOrderId() throws Exception
- {
+ public void shouldSetOrderId() throws Exception {
byte[] buffer = Arrays.copyOf(NEW_ORDER_SINGLE, NEW_ORDER_SINGLE.length);
FixMessageUtil.setOrderIdOnNewOrderSingle(15, buffer);
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java
index f0ab31c..f1833fc 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserPermutationsTest.java
@@ -21,8 +21,7 @@
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-public class FixStreamMessageParserPermutationsTest
-{
+public class FixStreamMessageParserPermutationsTest {
private static final int MAX_MESSAGE_SIZE = 2048;
@@ -50,50 +49,43 @@ public class FixStreamMessageParserPermutationsTest
private static final byte[] ALL_MESSAGE_BYTES = Bytes.concat(MESSAGE_1, MESSAGE_2, MESSAGE_3, MESSAGE_4, MESSAGE_5, MESSAGE_6, MESSAGE_7, MESSAGE_8);
@Test
- public void parseAllMessagesWithRandomSegmentLengths()
- {
+ public void parseAllMessagesWithRandomSegmentLengths() {
final ByteBuffer bb = ByteBuffer.wrap(ALL_MESSAGE_BYTES);
final int iterations = 1000;
- for (int i = 0; i < iterations; i++)
- {
+ for (int i = 0; i < iterations; i++) {
performIteration(bb, ALL_MESSAGES, new RandomBytesConsumer(1, 32));
}
}
@Test
- public void parseMessagesOneByteAtATime()
- {
+ public void parseMessagesOneByteAtATime() {
final ByteBuffer bb = ByteBuffer.wrap(ALL_MESSAGE_BYTES);
performIteration(bb, ALL_MESSAGES, new RandomBytesConsumer(1, 1));
}
@Test
- public void parseMessagesThreeBytesAtATime()
- {
+ public void parseMessagesThreeBytesAtATime() {
final ByteBuffer bb = ByteBuffer.wrap(ALL_MESSAGE_BYTES);
performIteration(bb, ALL_MESSAGES, new RandomBytesConsumer(3, 3));
}
@Test
- public void parseMessagesWithRandomEmptySegments()
- {
+ public void parseMessagesWithRandomEmptySegments() {
final ByteBuffer bb = ByteBuffer.wrap(ALL_MESSAGE_BYTES);
final int iterations = 1000;
- for (int i = 0; i < iterations; i++)
- {
+ for (int i = 0; i < iterations; i++) {
performIteration(bb, ALL_MESSAGES, new RandomBytesConsumer(0, 8));
}
}
@Test
- public void messageBoundaryConditions() throws Exception
- {
+ public void messageBoundaryConditions() throws Exception {
final byte[] msgBytes = Bytes.concat(MESSAGE_1, MESSAGE_2, MESSAGE_3);
final ByteBuffer bb = ByteBuffer.wrap(msgBytes);
final List messages = asList(MESSAGE_1, MESSAGE_2, MESSAGE_3);
@@ -104,37 +96,27 @@ public void messageBoundaryConditions() throws Exception
final int offsetOfSecondMessageChecksum = wholeString.indexOf("|10=", offsetOfFirstMessageChecksum + 1);
final int offsetOfLastMessageChecksum = wholeString.indexOf("|10=", offsetOfSecondMessageChecksum + 1);
- for (int i = 1; i <= 6; i++) // possible fragmentations of "8=FIX." prefix of message 1
- {
- for (int j = 1; j <= 15; j++) // possible fragmentations of "|10=067|8=FIX." block between messages 1 and 2
- {
- for (int k = 1; k <= 15; k++) // possible fragmentations of "|10=067|8=FIX." block between messages 2 and 3
- {
- for (int l = 1; l <= 9; l++) // possible fragmentations of "|10=067|" suffix of message 3
- {
+ for (int i = 1; i <= 6; i++) { // possible fragmentations of "8=FIX." prefix of message 1
+ for (int j = 1; j <= 15; j++) { // possible fragmentations of "|10=067|8=FIX." block between messages 1 and 2
+ for (int k = 1; k <= 15; k++) { // possible fragmentations of "|10=067|8=FIX." block between messages 2 and 3
+ for (int l = 1; l <= 9; l++) { // possible fragmentations of "|10=067|" suffix of message 3
final int consumeFromStart = i;
final int consumeFromBoundaryMsg1Msg2 = j;
final int consumeFromBoundaryMsg2Msg3 = k;
final int consumeFromMsg3Checksum = l;
- performIteration(bb, messages, new BytesToConsumeCalculator()
- {
+ performIteration(bb, messages, new BytesToConsumeCalculator() {
@Override
- public int getBytesToConsume(final int fromPosition)
- {
- if (fromPosition == startOfFirstMessage)
- {
+ public int getBytesToConsume(final int fromPosition) {
+ if (fromPosition == startOfFirstMessage) {
return consumeFromStart;
}
- if (fromPosition < offsetOfFirstMessageChecksum)
- {
+ if (fromPosition < offsetOfFirstMessageChecksum) {
return offsetOfFirstMessageChecksum - fromPosition + consumeFromBoundaryMsg1Msg2;
}
- if (fromPosition < offsetOfSecondMessageChecksum)
- {
+ if (fromPosition < offsetOfSecondMessageChecksum) {
return offsetOfSecondMessageChecksum - fromPosition + consumeFromBoundaryMsg2Msg3;
}
- if (fromPosition < offsetOfLastMessageChecksum)
- {
+ if (fromPosition < offsetOfLastMessageChecksum) {
return offsetOfLastMessageChecksum - fromPosition + consumeFromMsg3Checksum;
}
return wholeString.length() - fromPosition;
@@ -147,40 +129,31 @@ public int getBytesToConsume(final int fromPosition)
}
@SuppressWarnings("checkstyle:regexpsinglelinejava")
- private void performIteration(final ByteBuffer bb, final List expectedMessages, final BytesToConsumeCalculator bytesConsumer)
- {
+ private void performIteration(final ByteBuffer bb, final List expectedMessages, final BytesToConsumeCalculator bytesConsumer) {
final List messages = new ArrayList();
final List offsetsUsedForIteration = new ArrayList();
- final MessageParserCallback callback = new MessageParserCallback()
- {
+ final MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(byte[] buffer, int offset, int length)
- {
+ public void onMessage(byte[] buffer, int offset, int length) {
messages.add(Arrays.copyOfRange(buffer, offset, offset + length));
}
@Override
- public void onTruncatedMessage()
- {
-
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(String error)
- {
-
+ public void onParseError(String error) {
}
};
final ByteStreamMessageParser parser = new FixStreamMessageParser(MAX_MESSAGE_SIZE);
parser.initialise(callback);
- try
- {
+ try {
int position = 0;
- while (bb.position() < bb.capacity())
- {
+ while (bb.position() < bb.capacity()) {
final int bytesToConsume = Math.min(bytesConsumer.getBytesToConsume(position), bb.capacity() - bb.position());
final int newLimit = position + bytesToConsume;
@@ -194,51 +167,39 @@ public void onParseError(String error)
assertThat(messages.size(), is(expectedMessages.size()));
assertThat(messages, containsAllItems(expectedMessages));
- }
- catch (AssertionError e)
- {
+ } catch (AssertionError e) {
handleException(bb, offsetsUsedForIteration, e);
throw e;
- }
- catch (RuntimeException e)
- {
+ } catch (RuntimeException e) {
handleException(bb, offsetsUsedForIteration, e);
throw e;
}
bb.clear();
}
- private void handleException(ByteBuffer bb, List offsetsUsedForIteration, Throwable e)
- {
+ private void handleException(ByteBuffer bb, List offsetsUsedForIteration, Throwable e) {
System.out.println("Failed! Message segments used for test: ");
Integer start = 0;
- for (Integer end : offsetsUsedForIteration)
- {
+ for (Integer end : offsetsUsedForIteration) {
System.out.println(FixMessageUtil.convertFixControlCharacters(Arrays.copyOfRange(bb.array(), start, end)));
start = end;
}
}
- private Matcher super List> containsAllItems(final List expectedMessages)
- {
- return new TypeSafeMatcher>()
- {
+ private Matcher super List> containsAllItems(final List expectedMessages) {
+ return new TypeSafeMatcher>() {
@Override
- protected boolean matchesSafely(List actualMessages)
- {
- if (actualMessages.size() != expectedMessages.size())
- {
+ protected boolean matchesSafely(List actualMessages) {
+ if (actualMessages.size() != expectedMessages.size()) {
return false;
}
Iterator it1 = expectedMessages.iterator(), it2 = actualMessages.iterator();
- for (; it1.hasNext() && it2.hasNext(); )
- {
+ for (; it1.hasNext() && it2.hasNext(); ) {
byte[] expected = it1.next();
byte[] actual = it2.next();
- if (!Arrays.equals(expected, actual))
- {
+ if (!Arrays.equals(expected, actual)) {
return false;
}
}
@@ -246,8 +207,7 @@ protected boolean matchesSafely(List actualMessages)
}
@Override
- public void describeTo(Description description)
- {
+ public void describeTo(Description description) {
description.appendText("Expecting list containing ")
.appendValue(expectedMessages.size())
.appendText(" items: ")
@@ -256,26 +216,21 @@ public void describeTo(Description description)
};
}
- private interface BytesToConsumeCalculator
- {
+ private interface BytesToConsumeCalculator {
int getBytesToConsume(int fromPosition);
}
- private static class RandomBytesConsumer implements BytesToConsumeCalculator
- {
-
+ private static class RandomBytesConsumer implements BytesToConsumeCalculator {
private final int minBytesPerSegment;
private final int maxBytesPerSegment;
- RandomBytesConsumer(final int minBytesPerSegment, final int maxBytesPerSegment)
- {
+ RandomBytesConsumer(final int minBytesPerSegment, final int maxBytesPerSegment) {
this.minBytesPerSegment = minBytesPerSegment;
this.maxBytesPerSegment = maxBytesPerSegment;
}
@Override
- public int getBytesToConsume(final int fromPosition)
- {
+ public int getBytesToConsume(final int fromPosition) {
return ThreadLocalRandom.current().nextInt(minBytesPerSegment, maxBytesPerSegment + 1);
}
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java
index 1a1632b..43011c6 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixStreamMessageParserTest.java
@@ -28,44 +28,38 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-public final class FixStreamMessageParserTest
-{
+public final class FixStreamMessageParserTest {
private static final int MAX_MESSAGE_SIZE = 4096;
@Test
- public void shouldParseFragmentedMessageAtFixMessageStartCodecBoundary()
- {
+ public void shouldParseFragmentedMessageAtFixMessageStartCodecBoundary() {
final byte[] part1 = FixMessageUtil.convertFixControlCharacters(
- "8=FIX.4.2|9=279|35=X|49=LMXBL|56=user|34=56|52=19700101-00:00:00.000|262=123456|268=3|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.0001|271=63.7|290=1|279=1|269=0|55=XYZ|" +
+ "8=FIX.4.2|9=279|35=X|49=LMXBL|56=user|34=56|52=19700101-00:00:00.000|262=123456|268=3|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.0001|271=63.7|290=1|279=1|269=0|55=XYZ|" +
"48=349857|22=8|207=LMAX|270=0.00009|271=64.6|290=2|279=1|269=1|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=23.2|290=1|10=244|" +
"8=FI");
ByteBuffer inputStream1 = ByteBuffer.wrap(part1);
final byte[] part2 = FixMessageUtil.convertFixControlCharacters(
- "X.4.2|9=140|35=X|49=LMXBL|56=user|34=57|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=67.3|290=2|10=034|" +
+ "X.4.2|9=140|35=X|49=LMXBL|56=user|34=57|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=67.3|290=2|10=034|" +
"8=FIX.4.2|9=140|35=X|49=LMXBL|56=user|34=59|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=73.7|290=2|10=037|");
ByteBuffer inputStream2 = ByteBuffer.wrap(part2);
final List messages = new ArrayList();
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
messages.add(Arrays.copyOf(buffer, length));
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
ByteStreamMessageParser parser = new FixStreamMessageParser(MAX_MESSAGE_SIZE);
@@ -78,18 +72,17 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseFragmentedMessageWhichHasIncompleteMessagePrefixAtEnd()
- {
+ public void shouldParseFragmentedMessageWhichHasIncompleteMessagePrefixAtEnd() {
final byte[] part1 = FixMessageUtil.convertFixControlCharacters(
- "8=FIX.4.2|9=279|35=X|49=LMXBL|56=user|34=56|52=19700101-00:00:00.000|262=123456|268=3|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.0001|271=63.7|290=1|279=1|269=0|55=XYZ|" +
+ "8=FIX.4.2|9=279|35=X|49=LMXBL|56=user|34=56|52=19700101-00:00:00.000|262=123456|268=3|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.0001|271=63.7|290=1|279=1|269=0|55=XYZ|" +
"48=349857|22=8|207=LMAX|270=0.00009|271=64.6|290=2|279=1|269=1|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=23.2|290=1|10=244|" +
"8=FI");
final byte[] part2 = FixMessageUtil.convertFixControlCharacters(
- "X.4.2|9=140|35=X|49=LMXBL|56=user|34=57|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=67.3|290=2|10=034|8");
+ "X.4.2|9=140|35=X|49=LMXBL|56=user|34=57|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=67.3|290=2|10=034|8");
final byte[] part3 = FixMessageUtil.convertFixControlCharacters(
- "=FIX.4.2|9=140|35=X|49=LMXBL|56=user|34=59|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=73.7|290=2|10=037|");
+ "=FIX.4.2|9=140|35=X|49=LMXBL|56=user|34=59|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=73.7|290=2|10=037|");
final ByteBuffer inputStream1 = ByteBuffer.wrap(part1);
final ByteBuffer inputStream2 = ByteBuffer.wrap(part2);
@@ -98,7 +91,7 @@ public void shouldParseFragmentedMessageWhichHasIncompleteMessagePrefixAtEnd()
final List messages = new ArrayList();
final MessageParserCallback callback = createMessageParserCallback(
- new MyMessageParserCallbackTestFactory(messages));
+ new MyMessageParserCallbackTestFactory(messages));
final ByteStreamMessageParser parser = new FixStreamMessageParser(MAX_MESSAGE_SIZE);
parser.initialise(callback);
@@ -110,18 +103,17 @@ public void shouldParseFragmentedMessageWhichHasIncompleteMessagePrefixAtEnd()
}
@Test
- public void shouldParseFragmentedMessageWhichHasIncompleteEnd()
- {
+ public void shouldParseFragmentedMessageWhichHasIncompleteEnd() {
final byte[] part1 = FixMessageUtil.convertFixControlCharacters(
- "8=FIX.4.2|9=279|35=X|49=LMXBL|56=user|34=56|52=19700101-00:00:00.000|262=123456|268=3|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.0001|271=63.7|290=1|279=1|269=0|55=XYZ|" +
+ "8=FIX.4.2|9=279|35=X|49=LMXBL|56=user|34=56|52=19700101-00:00:00.000|262=123456|268=3|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.0001|271=63.7|290=1|279=1|269=0|55=XYZ|" +
"48=349857|22=8|207=LMAX|270=0.00009|271=64.6|290=2|279=1|269=1|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=23.2|290=1|10=244|" +
"8=FI");
final byte[] part2 = FixMessageUtil.convertFixControlCharacters(
- "X.4.2|9=140|35=X|49=LMXBL|56=user|34=57|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=67.3|290=2|10=");
+ "X.4.2|9=140|35=X|49=LMXBL|56=user|34=57|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=67.3|290=2|10=");
final byte[] part3 = FixMessageUtil.convertFixControlCharacters(
- "034|8=FIX.4.2|9=140|35=X|49=LMXBL|56=user|34=59|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=73.7|290=2|10=037|");
+ "034|8=FIX.4.2|9=140|35=X|49=LMXBL|56=user|34=59|52=19700101-00:00:00.000|262=123456|268=1|279=1|269=0|55=XYZ|48=349857|22=8|207=LMAX|270=0.00009|271=73.7|290=2|10=037|");
final ByteBuffer inputStream1 = ByteBuffer.wrap(part1);
final ByteBuffer inputStream2 = ByteBuffer.wrap(part2);
@@ -142,8 +134,7 @@ public void shouldParseFragmentedMessageWhichHasIncompleteEnd()
@Test
- public void shouldParseMessageSegmentContainingNeitherCompleteStartPrefixNorEndSuffix() throws Exception
- {
+ public void shouldParseMessageSegmentContainingNeitherCompleteStartPrefixNorEndSuffix() throws Exception {
final byte[] part1 = FixMessageUtil.convertFixControlCharacters("8=FIX.");
final byte[] part2 = FixMessageUtil.convertFixControlCharacters("4.2|9=");
final byte[] part3 = FixMessageUtil.convertFixControlCharacters("208|10");
@@ -186,28 +177,23 @@ public void shouldParseMessageSegmentContainingNeitherCompleteStartPrefixNorEndS
}
@Test
- public void shouldParseSingleMessageInSegment()
- {
+ public void shouldParseSingleMessageInSegment() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream = ByteBuffer.wrap(newOrderSingle);
final byte[] result = new byte[newOrderSingle.length];
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
System.arraycopy(buffer, offset, result, 0, length);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -220,14 +206,12 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseSingleMessageAtEndOfSegmentAfterLateJoin()
- {
+ public void shouldParseSingleMessageAtEndOfSegmentAfterLateJoin() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
final int previousMessageFragmentSize = 70;
ByteBuffer inputStream = ByteBuffer.allocate(newOrderSingle.length + previousMessageFragmentSize);
- for (int i = 0; i < previousMessageFragmentSize; i++)
- {
+ for (int i = 0; i < previousMessageFragmentSize; i++) {
inputStream.put((byte)88); // 'X'
}
@@ -236,22 +220,18 @@ public void shouldParseSingleMessageAtEndOfSegmentAfterLateJoin()
final byte[] result = new byte[newOrderSingle.length];
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
System.arraycopy(buffer, offset, result, 0, length);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -264,8 +244,7 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseTwoMessagesInSegment()
- {
+ public void shouldParseTwoMessagesInSegment() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream = ByteBuffer.allocate(newOrderSingle.length * 2);
inputStream.put(newOrderSingle);
@@ -274,24 +253,20 @@ public void shouldParseTwoMessagesInSegment()
final List results = new ArrayList();
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
byte[] newMessage = new byte[length];
System.arraycopy(buffer, offset, newMessage, 0, length);
results.add(newMessage);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -306,8 +281,7 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseThreeMessagesInSegment()
- {
+ public void shouldParseThreeMessagesInSegment() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream = ByteBuffer.allocate(newOrderSingle.length * 3);
inputStream.put(newOrderSingle);
@@ -317,24 +291,20 @@ public void shouldParseThreeMessagesInSegment()
final List results = new ArrayList();
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
byte[] newMessage = new byte[length];
System.arraycopy(buffer, offset, newMessage, 0, length);
results.add(newMessage);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -350,8 +320,7 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseLargeMessageFragmentedAcrossTwoBuffers()
- {
+ public void shouldParseLargeMessageFragmentedAcrossTwoBuffers() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream1 = ByteBuffer.allocate(1500);
inputStream1.put(newOrderSingle, 0, newOrderSingle.length - 70);
@@ -359,24 +328,20 @@ public void shouldParseLargeMessageFragmentedAcrossTwoBuffers()
final List results = new ArrayList();
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
byte[] newMessage = new byte[length];
System.arraycopy(buffer, offset, newMessage, 0, length);
results.add(newMessage);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -396,8 +361,7 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumField()
- {
+ public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumField() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream1 = ByteBuffer.allocate(1500);
inputStream1.put(newOrderSingle, 0, newOrderSingle.length - 3);
@@ -405,24 +369,20 @@ public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumField
final List results = new ArrayList();
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
byte[] newMessage = new byte[length];
System.arraycopy(buffer, offset, newMessage, 0, length);
results.add(newMessage);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -442,8 +402,7 @@ public void onParseError(final String error)
}
@Test
- public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumFieldWithFollowingMessage()
- {
+ public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumFieldWithFollowingMessage() {
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream1 = ByteBuffer.allocate(1500);
inputStream1.put(newOrderSingle, 0, newOrderSingle.length - 3);
@@ -451,24 +410,20 @@ public void shouldParseLargeMessageFragmentedAcrossTwoBuffersWithinChecksumField
final List results = new ArrayList();
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
byte[] newMessage = new byte[length];
System.arraycopy(buffer, offset, newMessage, 0, length);
results.add(newMessage);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -490,8 +445,7 @@ public void onParseError(final String error)
}
@Test
- public void shouldRecogniseTruncatedMessageLessThanBufferSize() throws Exception
- {
+ public void shouldRecogniseTruncatedMessageLessThanBufferSize() throws Exception {
final byte[] trunactedExecutionReport = FixMessageUtil.getTruncatedExecutionReport();
final byte[] executionReport = FixMessageUtil.getExecutionReport();
@@ -501,25 +455,21 @@ public void shouldRecogniseTruncatedMessageLessThanBufferSize() throws Exception
final List results = new ArrayList();
final int[] truncated = {0};
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
byte[] newMessage = new byte[length];
System.arraycopy(buffer, offset, newMessage, 0, length);
results.add(newMessage);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
truncated[0]++;
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -535,30 +485,25 @@ public void onParseError(final String error)
}
@Test
- public void shouldThrowErrorAndNotPublishWhenParsingMessageLongerThanMaxAllowedMessageSize() throws Exception
- {
+ public void shouldThrowErrorAndNotPublishWhenParsingMessageLongerThanMaxAllowedMessageSize() throws Exception {
final int allowedMessageSize = 100;
final byte[] newOrderSingle = FixMessageUtil.getNewOrderSingle();
ByteBuffer inputStream = ByteBuffer.wrap(newOrderSingle);
final byte[] result = new byte[newOrderSingle.length];
final byte[] expectedResult = new byte[newOrderSingle.length];
- MessageParserCallback callback = new MessageParserCallback()
- {
+ MessageParserCallback callback = new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
System.arraycopy(buffer, offset, result, 0, length);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
@@ -570,40 +515,32 @@ public void onParseError(final String error)
assertArrayEquals(expectedResult, result);
}
- private static MessageParserCallback createMessageParserCallback(final MessageParserCallbackTestFactory impl)
- {
- return new MessageParserCallback()
- {
+ private static MessageParserCallback createMessageParserCallback(final MessageParserCallbackTestFactory impl) {
+ return new MessageParserCallback() {
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
impl.onMessage(buffer, offset, length);
}
@Override
- public void onTruncatedMessage()
- {
+ public void onTruncatedMessage() {
}
@Override
- public void onParseError(final String error)
- {
+ public void onParseError(final String error) {
}
};
}
- private static class MyMessageParserCallbackTestFactory implements MessageParserCallbackTestFactory
- {
+ private static class MyMessageParserCallbackTestFactory implements MessageParserCallbackTestFactory {
private final List messages;
- MyMessageParserCallbackTestFactory(final List messages)
- {
+ MyMessageParserCallbackTestFactory(final List messages) {
this.messages = messages;
}
@Override
- public void onMessage(final byte[] buffer, final int offset, final int length)
- {
+ public void onMessage(final byte[] buffer, final int offset, final int length) {
messages.add(Arrays.copyOfRange(buffer, offset, offset + length));
}
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java
index 0b6ff7d..fd0c8a3 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/FixTagParserTest.java
@@ -32,20 +32,17 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
-public final class FixTagParserTest
-{
+public final class FixTagParserTest {
private FixTagHandler fixTagHandler;
@Before
- public void setUp() throws Exception
- {
+ public void setUp() throws Exception {
fixTagHandler = mock(FixTagHandler.class);
}
@Test
- public void shouldCountTagsCorrectlyInMessage()
- {
+ public void shouldCountTagsCorrectlyInMessage() {
given(fixTagHandler.isFinished()).willReturn(false);
@@ -64,8 +61,7 @@ public void shouldCountTagsCorrectlyInMessage()
}
@Test
- public void shouldCountTagsSeparatedByMultipleSeparatorsMessage() throws UnsupportedEncodingException
- {
+ public void shouldCountTagsSeparatedByMultipleSeparatorsMessage() throws UnsupportedEncodingException {
given(fixTagHandler.isFinished()).willReturn(false);
final byte[] msg = "8=FIX.4.2\u00019=105|35=A|34=1|49=marketm155yjtfwicmfe\u000152=20100713-17:04:39.641|56=FIX-API|95=9|96=P4ssword.|98=0\u0001108=2|141=Y|10=191|"
@@ -86,8 +82,7 @@ public void shouldCountTagsSeparatedByMultipleSeparatorsMessage() throws Unsuppo
}
@Test
- public void shouldReportFirstThreeTags()
- {
+ public void shouldReportFirstThreeTags() {
given(fixTagHandler.isFinished()).willReturn(false);
final byte[] logonMsg = FixMessageUtil.getLogonMessage();
@@ -107,8 +102,7 @@ public void shouldReportFirstThreeTags()
}
@Test
- public void shouldStopReadingWhenTheMessageIsNotLogon()
- {
+ public void shouldStopReadingWhenTheMessageIsNotLogon() {
final byte[] newOrderSingleMsg = FixMessageUtil.getNewOrderSingle();
final InOrder inOrder = BDDMockito.inOrder(fixTagHandler);
@@ -133,8 +127,7 @@ public void shouldStopReadingWhenTheMessageIsNotLogon()
}
@Test
- public void shouldIgnoreEqualsCharInStringValue()
- {
+ public void shouldIgnoreEqualsCharInStringValue() {
final byte[] msg = "8=FIX.4.4|9=131|35=j|58=Invalid request type [263=3]|10=029|".getBytes(StandardCharsets.US_ASCII);
final FixTagParser parser = new FixTagParser(fixTagHandler, new byte[]{124});
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/MessageParserCallbackTestFactory.java b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/MessageParserCallbackTestFactory.java
index ca56d0e..d7d8828 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/incoming/MessageParserCallbackTestFactory.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/incoming/MessageParserCallbackTestFactory.java
@@ -1,8 +1,5 @@
package com.lmax.nanofix.incoming;
-
-interface MessageParserCallbackTestFactory
-{
+interface MessageParserCallbackTestFactory {
void onMessage(byte[] buffer, int offset, int length);
-
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/ByteBufferMatcher.java b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/ByteBufferMatcher.java
index 1ef6191..d96c7d4 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/ByteBufferMatcher.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/ByteBufferMatcher.java
@@ -22,29 +22,23 @@
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;
-public class ByteBufferMatcher extends TypeSafeMatcher
-{
+public class ByteBufferMatcher extends TypeSafeMatcher {
private final Collection expected;
- ByteBufferMatcher(final Collection expected)
- {
+ ByteBufferMatcher(final Collection expected) {
this.expected = expected;
}
@Override
- protected boolean matchesSafely(final ByteBuffer byteBuffer)
- {
+ protected boolean matchesSafely(final ByteBuffer byteBuffer) {
int matchingAt = 0;
final byte[] array = byteBuffer.array();
- for (FixMessage message : expected)
- {
+ for (FixMessage message : expected) {
final byte[] bytes = message.toFixString().getBytes();
- for (int j = 0; j < bytes.length; j++)
- {
- if (bytes[j] != array[j + matchingAt])
- {
+ for (int j = 0; j < bytes.length; j++) {
+ if (bytes[j] != array[j + matchingAt]) {
return false;
}
}
@@ -55,12 +49,10 @@ protected boolean matchesSafely(final ByteBuffer byteBuffer)
}
@Override
- public void describeTo(final Description description)
- {
+ public void describeTo(final Description description) {
final StringBuilder humanlyExpected = new StringBuilder();
- for (FixMessage message : expected)
- {
+ for (FixMessage message : expected) {
humanlyExpected.append(message.toFixString());
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java
index 2835741..9a8a115 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/FixMessageBuilderTest.java
@@ -7,19 +7,18 @@
import com.lmax.nanofix.fields.EncryptMethod;
import com.lmax.nanofix.fields.MsgType;
+
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-public class FixMessageBuilderTest
-{
+public class FixMessageBuilderTest {
private static final ZonedDateTime SENDING_TIME = ZonedDateTime.of(LocalDateTime.of(2016, 1, 2, 3, 4), ZoneOffset.UTC);
@Test
- public void shouldBuildFix44MessageByDefault()
- {
+ public void shouldBuildFix44MessageByDefault() {
final FixMessage fixMessage = new FixMessageBuilder().messageType(MsgType.LOGIN).senderCompID("SenderCompID").
targetCompID("TargetCompId").encryptMethod(EncryptMethod.NONE).heartBtInt(1).msgSeqNum(1).sendingTime(SENDING_TIME).build();
final String expectedFixMessage = fixMessage.toFixString();
@@ -28,8 +27,7 @@ public void shouldBuildFix44MessageByDefault()
}
@Test
- public void shouldBuildFix42MessageWhenSpecified()
- {
+ public void shouldBuildFix42MessageWhenSpecified() {
final FixMessage fixMessage = new FixMessageBuilder("FIX.4.2").messageType(MsgType.LOGIN).senderCompID("SenderCompID").
targetCompID("TargetCompId").encryptMethod(EncryptMethod.NONE).heartBtInt(1).msgSeqNum(1).sendingTime(SENDING_TIME).build();
final String expectedFixMessage = fixMessage.toFixString();
@@ -38,8 +36,7 @@ public void shouldBuildFix42MessageWhenSpecified()
}
@Test
- public void shouldBuildFix424MessageWithRawData()
- {
+ public void shouldBuildFix424MessageWithRawData() {
final FixMessage fixMessage = new FixMessageBuilder("FIX.4.2").messageType(MsgType.LOGIN).senderCompID("SenderCompID").
targetCompID("TargetCompId").encryptMethod(EncryptMethod.NONE).rawData("RawData").heartBtInt(1).msgSeqNum(1).sendingTime(SENDING_TIME).build();
final String expectedFixMessage = fixMessage.toFixString();
@@ -48,16 +45,14 @@ public void shouldBuildFix424MessageWithRawData()
}
@Test
- public void shouldBeAbleToBuildMessageWithArbitaryTagAndValue()
- {
+ public void shouldBeAbleToBuildMessageWithArbitaryTagAndValue() {
final FixMessage fixMessage = new FixMessageBuilder("FIX.99").append(666666, "JunkData").build();
final String expectedFixMessage = fixMessage.toFixString();
assertThat(expectedFixMessage, is("8=FIX.99\u00019=16\u0001666666=JunkData\u000110=111\u0001"));
}
@Test
- public void shouldBuildAnInvalidFixMessageBecauseOfTagOrder()
- {
+ public void shouldBuildAnInvalidFixMessageBecauseOfTagOrder() {
FixMessage fixMessage = new FixMessageBuilder("FIX.4.2")
.msgSeqNum(100)
.append(123, "Y")
@@ -69,13 +64,11 @@ public void shouldBuildAnInvalidFixMessageBecauseOfTagOrder()
}
@Test
- public void shouldBuildFixMessageContainingPriceWithTrailingZeros()
- {
+ public void shouldBuildFixMessageContainingPriceWithTrailingZeros() {
FixMessage fixMessage = new FixMessageBuilder("FIX.4.2")
.price("10.0000")
.build();
assertThat(fixMessage.toFixString(), is("8=FIX.4.2\u00019=11\u000144=10.0000\u000110=237\u0001"));
-
}
}
\ No newline at end of file
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/OutboundMessageHandlerTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/OutboundMessageHandlerTest.java
index cf6b453..1cb97ef 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/OutboundMessageHandlerTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/outgoing/OutboundMessageHandlerTest.java
@@ -44,22 +44,19 @@
import static com.google.common.collect.Lists.newArrayList;
import static com.lmax.nanofix.FixUtil.DATE_TIME_FORMATTER;
-public class OutboundMessageHandlerTest
-{
+public class OutboundMessageHandlerTest {
private final WritableByteChannel writableByteChannel = mock(WritableByteChannel.class);
private final ConnectionObserver connectionObserver = mock(ConnectionObserver.class);
private final OutboundMessageHandler handler = new OutboundMessageHandler(connectionObserver);
@Before
- public void setUp()
- {
+ public void setUp() {
handler.initialiseOutboundChannel(writableByteChannel);
}
@Test
- public void shouldPlaceMultipleMessagesInSameBuffer() throws Exception
- {
+ public void shouldPlaceMultipleMessagesInSameBuffer() throws Exception {
final ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.parse("19981231-23:58:59.000", DATE_TIME_FORMATTER), ZoneOffset.UTC);
final FixMessage loginMessage = new FixMessageBuilder().messageType(MsgType.LOGIN).msgSeqNum(1).senderCompID("username").targetCompID("LMXBL")
.sendingTime(zonedDateTime).username("username").password("password").heartBtInt(100000).encryptMethod(EncryptMethod.NONE).build();
@@ -73,62 +70,46 @@ public void shouldPlaceMultipleMessagesInSameBuffer() throws Exception
}
@Test(expected = TransportClosedException.class)
- public void shouldNotifyTransportObserverIfAClosedChannelExceptionIsThrownWhileWriting() throws Exception
- {
+ public void shouldNotifyTransportObserverIfAClosedChannelExceptionIsThrownWhileWriting() throws Exception {
given(writableByteChannel.write(any(ByteBuffer.class))).willThrow(new ClosedChannelException());
- try
- {
+ try {
handler.send(new FixMessageBuilder().build());
- }
- finally
- {
+ } finally {
verify(connectionObserver).connectionClosed();
}
}
@Test(expected = TransportClosedException.class)
- public void shouldNotifyTransportObserverIfAnClosedChannelExceptionIsThrownWhileWritingACollection() throws Exception
- {
+ public void shouldNotifyTransportObserverIfAnClosedChannelExceptionIsThrownWhileWritingACollection() throws Exception {
given(writableByteChannel.write(any(ByteBuffer.class))).willThrow(new ClosedChannelException());
- try
- {
+ try {
handler.send(Collections.singletonList(new FixMessageBuilder().build()));
- }
- finally
- {
+ } finally {
verify(connectionObserver).connectionClosed();
}
}
@Test(expected = TransportClosedException.class)
- public void shouldNotifyTransportObserverWhenAnIOExceptionIsThrownAndCloseTheTransportWhileWritingACollection() throws Exception
- {
+ public void shouldNotifyTransportObserverWhenAnIOExceptionIsThrownAndCloseTheTransportWhileWritingACollection() throws Exception {
given(writableByteChannel.write(any(ByteBuffer.class))).willThrow(new IOException("Broken pipe"));
- try
- {
+ try {
handler.send(Collections.singletonList(new FixMessageBuilder().build()));
- }
- finally
- {
+ } finally {
verify(connectionObserver).connectionClosed();
verify(writableByteChannel).close();
}
}
@Test(expected = TransportClosedException.class)
- public void shouldNotifyTransportObserverWhenAnIOExceptionIsThrownAndCloseTheTransportWhileWriting() throws Exception
- {
+ public void shouldNotifyTransportObserverWhenAnIOExceptionIsThrownAndCloseTheTransportWhileWriting() throws Exception {
given(writableByteChannel.write(any(ByteBuffer.class))).willThrow(new IOException("Broken pipe"));
- try
- {
+ try {
handler.send(new FixMessageBuilder().build());
- }
- finally
- {
+ } finally {
verify(connectionObserver).connectionClosed();
verify(writableByteChannel).close();
}
diff --git a/nanofix-client/src/test/java/com/lmax/nanofix/transport/TcpTransportTest.java b/nanofix-client/src/test/java/com/lmax/nanofix/transport/TcpTransportTest.java
index 01520e6..1b57d94 100644
--- a/nanofix-client/src/test/java/com/lmax/nanofix/transport/TcpTransportTest.java
+++ b/nanofix-client/src/test/java/com/lmax/nanofix/transport/TcpTransportTest.java
@@ -29,16 +29,14 @@
import static org.mockito.Mockito.verify;
-public class TcpTransportTest
-{
+public class TcpTransportTest {
private final PublishingConnectionObserver publishingTransportObserver = mock(PublishingConnectionObserver.class);
private final SocketFactory socketFactory = mock(SocketFactory.class);
private final DelegatingServerSocketChannel serverSocketChannel = mock(DelegatingServerSocketChannel.class);
private final InetSocketAddress socketAddress = new InetSocketAddress("host", 222);
@Test
- public void shouldBindToSocketOnListen()
- {
+ public void shouldBindToSocketOnListen() {
given(socketFactory.bind(socketAddress)).willReturn(serverSocketChannel);
final TcpTransport tcpTransport = new TcpTransport(publishingTransportObserver, socketAddress, socketFactory, new TransportConfigImpl(false));
@@ -48,8 +46,7 @@ public void shouldBindToSocketOnListen()
}
@Test
- public void shouldRemoveBindOnWhenTheConnectionClosesByDefault() throws Exception
- {
+ public void shouldRemoveBindOnWhenTheConnectionClosesByDefault() throws Exception {
given(socketFactory.bind(socketAddress)).willReturn(serverSocketChannel);
final TcpTransport tcpTransport = new TcpTransport(publishingTransportObserver, socketAddress, socketFactory, new TransportConfigImpl(false));
@@ -61,8 +58,7 @@ public void shouldRemoveBindOnWhenTheConnectionClosesByDefault() throws Exceptio
}
@Test
- public void shouldStayBoundOnWhenTheConnectionClosesIfConfiguredToMaintainBind() throws Exception
- {
+ public void shouldStayBoundOnWhenTheConnectionClosesIfConfiguredToMaintainBind() throws Exception {
given(socketFactory.bind(socketAddress)).willReturn(serverSocketChannel);
final TcpTransport tcpTransport = new TcpTransport(publishingTransportObserver, socketAddress, socketFactory, new TransportConfigImpl(true));
@@ -74,8 +70,7 @@ public void shouldStayBoundOnWhenTheConnectionClosesIfConfiguredToMaintainBind()
}
@Test
- public void shouldCreateAnOutboundSocketWhenConnecting()
- {
+ public void shouldCreateAnOutboundSocketWhenConnecting() {
final TcpTransport tcpTransport = new TcpTransport(publishingTransportObserver, socketAddress, socketFactory, new TransportConfigImpl(false));
tcpTransport.connect();
@@ -83,8 +78,7 @@ public void shouldCreateAnOutboundSocketWhenConnecting()
}
@Test
- public void shouldNotAcceptTryAcceptNewConnectionsWhenInitiatingOutboundConnections()
- {
+ public void shouldNotAcceptTryAcceptNewConnectionsWhenInitiatingOutboundConnections() {
final TcpTransport tcpTransport = new TcpTransport(publishingTransportObserver, socketAddress, socketFactory, new TransportConfigImpl(true));
tcpTransport.connect();
tcpTransport.connectionClosed();