public interface ServerListener<T extends Client> extends Closeable
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.
Modifier and Type | Method and Description |
---|---|
T |
acceptClient()
Accepts the next client that appears on this listener.
|
void |
close()
Closes any underlying
Closeable resources associated with this
listener. |
T acceptClient() throws IOException, InterruptedException
An implementation of this method is expected to block the calling thread and not return until either a client appears or an exception occurs.
IOException
InterruptedException
void close()
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).
close
in interface AutoCloseable
close
in interface Closeable
Copyright © 2010 - 2020 Adobe. All Rights Reserved