Add simple connection management capabilities to the broker. An external codebase will now be able to monitor and close the opened connections.

This commit is contained in:
Luis Barrios
2017-01-12 17:00:18 +01:00
parent 964efd341e
commit d7d97a74d8
15 changed files with 404 additions and 7 deletions
@@ -137,4 +137,11 @@ class MapDBMessagesStore implements IMessagesStore {
}
m_retainedStore.remove(topic);
}
@Override
public int getPendingPublishMessages(String clientID) {
ConcurrentMap<Integer, MessageGUID> messageIdToGuidMap = m_db
.getHashMap(MapDBSessionsStore.messageId2GuidsMapName(clientID));
return messageIdToGuidMap.size();
}
}
@@ -168,6 +168,15 @@ class MapDBSessionsStore implements ISessionsStore {
PersistentSession storedSession = m_persistentSessions.get(clientID);
return new ClientSession(clientID, m_messagesStore, this, storedSession.cleanSession);
}
@Override
public Collection<ClientSession> getAllSessions() {
Collection<ClientSession> result = new ArrayList<ClientSession>();
for (Map.Entry<String, PersistentSession> entry : m_persistentSessions.entrySet()) {
result.add(new ClientSession(entry.getKey(), m_messagesStore, this, entry.getValue().cleanSession));
}
return result;
}
@Override
public void updateCleanStatus(String clientID, boolean cleanSession) {
@@ -318,4 +327,25 @@ class MapDBSessionsStore implements ISessionsStore {
}
return m_messagesStore.getMessageByGuid(guid);
}
@Override
public int getInflightMessagesNo(String clientID) {
if (!m_inflightStore.containsKey(clientID))
return 0;
else
return m_inflightStore.get(clientID).size();
}
@Override
public int getPendingPublishMessagesNo(String clientID) {
return m_messagesStore.getPendingPublishMessages(clientID);
}
@Override
public int getSecondPhaseAckPendingMessages(String clientID) {
if (!m_secondPhaseStore.containsKey(clientID))
return 0;
else
return m_secondPhaseStore.get(clientID).size();
}
}