Пример #1
0
  /**
   * 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;
      }
    }
  }