From 520aa73c7d0a8c69b8ef856adc61eac83abf7558 Mon Sep 17 00:00:00 2001 From: traggatt Date: Thu, 3 Aug 2017 16:49:38 +0100 Subject: [PATCH] Fix for dropped logout message issue --- .../java/quickfix/mina/SessionConnector.java | 21 ++++++++++++++++++- .../quickfix/mina/SessionConnectorTest.java | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java b/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java index 77da1aed9..4757b9a12 100644 --- a/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java +++ b/quickfixj-core/src/main/java/quickfix/mina/SessionConnector.java @@ -195,6 +195,25 @@ public boolean isLoggedOn() { return true; } + /** + * Check if we have at least one session and that at least one session is logged on. + * + * @return false if no sessions exist or all sessions are logged off, true otherwise + */ + //visible for testing only + boolean anyLoggedOn() { + // if no session, not logged on + if (sessions.isEmpty()) + return false; + for (Session session : sessions.values()) { + // at least one session logged on + if (session.isLoggedOn()) + return true; + } + // no sessions are logged on + return false; + } + private Set getLoggedOnSessions() { Set loggedOnSessions = new HashSet<>(sessions.size()); for (Session session : sessions.values()) { @@ -219,7 +238,7 @@ protected void logoutAllSessions(boolean forceDisconnect) { } } - if (isLoggedOn()) { + if (anyLoggedOn()) { if (forceDisconnect) { for (Session session : sessions.values()) { try { diff --git a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java index 52413ce48..572cccdf1 100644 --- a/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java +++ b/quickfixj-core/src/test/java/quickfix/mina/SessionConnectorTest.java @@ -129,6 +129,7 @@ public void testOneSessionLoggedOnOneSessionNotLoggedOne() throws Exception { assertNotNull(session2); sessions.put(session2.getSessionID(), session2); assertFalse(connector.isLoggedOn()); + assertTrue(connector.anyLoggedOn()); } /**