Interface ServerListener<T extends Client>
- All Superinterfaces:
AutoCloseable
,Closeable
- All Known Implementing Classes:
ServerSocketListener
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 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 underlyingCloseable
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 anyIOException
that occurs when closing the underlying resource(s).- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-