Interface ServerListener<T extends Client>

All Superinterfaces:
AutoCloseable, Closeable
All Known Implementing Classes:
ServerSocketListener

public interface ServerListener<T extends Client> extends Closeable
A listener that accepts Client connections on behalf of a ServerRunner.

This interface exists primarily to abstract away the details of the listener's underlying ServerSocket and the concurrency associated with handling multiple clients. Such realities make it difficult to create effective unit tests for the ServerRunner that are easy to understand and maintain.

This interface captures the only those details about the listener that the ServerRunner cares about; namely, that it is something that has an underlying resource (or resources) that need to be closed before the listener is discarded.

  • Method Summary

    Modifier and Type
    Method
    Description
    Accepts the next client that appears on this listener.
    void
    Closes any underlying Closeable resources associated with this listener.
  • Method Details

    • acceptClient

      Accepts the next client that appears on this listener.

      An implementation of this method is expected to block the calling thread and not return until either a client appears or an exception occurs.

      Returns:
      client object
      Throws:
      IOException
      InterruptedException
    • close

      void close()
      Closes any underlying Closeable resources associated with this listener.

      Note that (as described in Doug Lea's discussion about interrupting I/O operations in "Concurrent Programming in Java" - Addison-Wesley Professional, 2nd edition, 1999) this method is used to interrupt any blocked I/O operation in the client when the server is shutting down. The client implementation must anticipate this potential, and gracefully exit when the blocked I/O operation throws the relevant IOException subclass.

      Note also, that unlike Closeable.close() this method is not permitted to propagate any IOException that occurs when closing the underlying resource(s).

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable