org.apache.coyote

## Class AsyncStateMachine<S>

- java.lang.Object
- - org.apache.coyote.AsyncStateMachine<S>

    public class AsyncStateMachine<S>
    extends Object

Manages the state transitions for async requests.

     The internal states that are used are:
     DISPATCHED    - Standard request. Not in Async mode.
     STARTING      - ServletRequest.startAsync() has been called but the
                     request in which that call was made has not finished
                     processing.
     STARTED       - ServletRequest.startAsync() has been called and the
                     request in which that call was made has finished
                     processing.
     MUST_COMPLETE - complete() has been called before the request in which
                     ServletRequest.startAsync() has finished. As soon as that
                     request finishes, the complete() will be processed.
     COMPLETING    - The call to complete() was made once the request was in
                     the STARTED state. May or may not be triggered by a
                     container thread - depends if start(Runnable) was used
     TIMING_OUT    - The async request has timed out and is waiting for a call
                     to complete(). If that isn't made, the error state will
                     entered.
     MUST_DISPATCH - dispatch() has been called before the request in which
                     ServletRequest.startAsync() has finished. As soon as that
                     request finishes, the dispatch() will be processed.
     DISPATCHING   - The dispatch is being processed.
     ERROR         - Something went wrong.

     |----------------->--------------|
     |                               \|/
     |   |----------<---------------ERROR
     |   |      complete()         /|\ | \
     |   |                          |  |  \---------------|
     |   |                          |  |                  |dispatch()
     |   |                          |  |postProcess()    \|/
     |   |                   error()|  |                  |
     |   |                          |  |  |--|timeout()   |
     |   |           postProcess()  | \|/ | \|/           |         auto
     |   |         |--------------->DISPATCHED<---------- | --------------COMPLETING<-----|
     |   |         |               /|\  |                 |                 | /|\         |
     |   |         |    |--->-------|   |                 |                 |--|          |
     |   |         ^    |               |startAsync()     |               timeout()       |
     |   |         |    |               |                 |                               |
     |  \|/        |    |  complete()  \|/  postProcess() |                               |
     | MUST_COMPLETE-<- | ----<------STARTING-->--------- | ------------|                 ^
     |         /|\      |               |                 |             |      complete() |
     |          |       |               |                 |             |     /-----------|
     |          |       ^               |dispatch()       |             |    /
     |          |       |               |                 |             |   /
     |          |       |              \|/                /            \|/ /
     |          |       |         MUST_DISPATCH          /           STARTED
     |          |       |           |                   /            /|
     |          |       |           |postProcess()     /            / |
     ^          ^       |           |                 /  dispatch()/  |
     |          |       |           |                /            /   |
     |          |       |           |   |---------- / -----------/    |auto
     |          |       |           |   |          /                  |
     |          |       |           |   |   |-----/                   |
     |          |       | auto     \|/ \|/ \|/                       \|/
     |          |       |---<------DISPATCHING<-----------------TIMING_OUT
     |          |                               dispatch()        |   |
     |          |                                                 |   |
     |          |-------<----------------------------------<------|   |
     |                              complete()                        |
     |                                                                |
     |<--------<-------------------<-------------------------------<--|
                                     error()

### Constructor Summary

Constructors
Constructor and Description
`AsyncStateMachine(Processor<S> processor)`

### Method Summary

Methods
`boolean` `asyncComplete()`
`boolean` `asyncDispatch()`
`void` `asyncDispatched()`
`boolean` `asyncError()`
`AbstractEndpoint.Handler.SocketState` `asyncPostProcess()`
`void` `asyncRun(Runnable runnable)`
`void` `asyncStart(AsyncContextCallback asyncCtxt)`
`boolean` `asyncTimeout()`
`boolean` `isAsync()`
`boolean` `isAsyncDispatching()`
`boolean` `isAsyncError()`
`boolean` `isAsyncStarted()`
`boolean` `isAsyncTimingOut()`
`void` `recycle()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### AsyncStateMachine

    public AsyncStateMachine(Processor<S> processor)

### Method Detail

#### isAsync

    public boolean isAsync()

#### isAsyncDispatching

    public boolean isAsyncDispatching()

#### isAsyncStarted

    public boolean isAsyncStarted()

#### isAsyncTimingOut

    public boolean isAsyncTimingOut()

#### isAsyncError

    public boolean isAsyncError()

#### asyncStart

    public void asyncStart(AsyncContextCallback asyncCtxt)

#### asyncPostProcess

    public AbstractEndpoint.Handler.SocketState asyncPostProcess()

#### asyncComplete

    public boolean asyncComplete()

#### asyncTimeout

    public boolean asyncTimeout()

#### asyncDispatch

    public boolean asyncDispatch()

#### asyncDispatched

    public void asyncDispatched()

#### asyncError

    public boolean asyncError()

#### asyncRun

    public void asyncRun(Runnable runnable)

#### recycle

    public void recycle()