An instance of this object is created with a
ServerListener and an
Executor. On invocation of the
start() method, it passes itself to the given
returns immediately. On invocation of its
run() method by the
Executor it begins accepting client connections via its
ServerListener. As each new
Client is accepted, the client is
configured with the runner's LoggingContext and is then passed to the
Executor for concurrent execution of the client's service loop.
On invocation of the
stop() method, the runner closes the listener
and each of the connected clients (by invoking
effectively interrupting any blocked I/O calls and causing these concurrent
subtasks to exit gracefully). This ensures that before the
method returns (1) all I/O resources have been released and (2) all of the
threads of the
Executor are idle.
- Carl Harris
Method SummaryModifier and TypeMethodDescription
voidPresents each connected client to the given visitor.
protected abstract booleanConfigures a connected client.
booleanGets a flag indicating whether the server is currently running.
stop()Stops execution of the runner.
Methods inherited from class ch.qos.logback.core.spi.ContextAwareBase
addError, addError, addInfo, addInfo, addStatus, addWarn, addWarn, getContext, getDeclaredOrigin, getStatusManager, setContext
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
ConcurrentServerRunnerConstructs a new server runner.
listener- the listener from which the server will accept new clients
executor- an executor that will facilitate execution of the listening and client-handling tasks; while any
Executoris allowed here, outside of unit testing the only reasonable choice is a bounded thread pool of some kind.
isRunningpublic boolean isRunning()Gets a flag indicating whether the server is currently running.
setRunningprotected void setRunning
stopStops execution of the runner.
This method must cause all I/O and thread resources associated with the runner to be released. If the receiver has not been started, this method must have no effect.
acceptPresents each connected client to the given visitor.
runpublic void run()
configureClientConfigures a connected client.
A subclass implements this method to perform any necessary configuration of the client object before its
Runnable.run()method is invoked.
client- the subject client
trueif configuration was successful; if the return value is
falsethe client connection will be dropped