/** * Get a set of accepted connections. * * @param connectionType Identifies the set of connections to return. * @return A set of sockets, each wrapped in a {@link SocketWrapper}. * @throws ShutdownException If the acceptor is shutdown. */ ResourcePool getSocketSet(final ConnectionType connectionType) throws ShutdownException { synchronized (m_socketSets) { if (m_isShutdown) { throw new ShutdownException("Acceptor has been shut down"); } final ResourcePool original = (ResourcePool) m_socketSets.get(connectionType); if (original != null) { return original; } else { final ResourcePool newSocketSet = new ResourcePoolImplementation(); newSocketSet.addListener( new ResourcePool.Listener() { public void resourceAdded(ResourcePool.Resource resource) { final ConnectionIdentity connection = ((SocketWrapper) resource).getConnectionIdentity(); getListeners(connectionType) .apply( new ListenerSupport.Informer() { public void inform(Object listener) { ((Listener) listener).connectionAccepted(connectionType, connection); } }); } public void resourceClosed(ResourcePool.Resource resource) { final ConnectionIdentity connection = ((SocketWrapper) resource).getConnectionIdentity(); getListeners(connectionType) .apply( new ListenerSupport.Informer() { public void inform(Object listener) { ((Listener) listener).connectionClosed(connectionType, connection); } }); } }); m_socketSets.put(connectionType, newSocketSet); return newSocketSet; } } }