This interface exists primarily to abstract away the details of the client's underlying {@code Socket} and the concurrency associated withhandling multiple clients. Such realities make it difficult to create effective unit tests for the {@link ServerRunner} that are easy to understand and maintain.
This interface captures the only those details about a client that the {@code ServerRunner} cares about; namely, that it is something that
|
|