Modifier and Type | Class and Description |
---|---|
private static class |
AgentBase.AwaitClosure
Returns the current value of the Agent's state
|
Modifier and Type | Field and Description |
---|---|
private static groovy.lang.Closure |
awaitClosure |
private groovy.lang.Closure |
copy
Function converting the internal state during read to prevent internal state escape from
the protected boundary of the agent
|
protected T |
data
Holds the internal mutable state
|
private java.util.Collection<groovy.lang.Closure> |
listeners
Holds all listeners interested in state updates
A listener should be a closure accepting the old and the new value in this order.
|
protected java.util.concurrent.locks.ReadWriteLock |
lock
Allows reads not to wait in the message queue.
|
private java.util.Collection<groovy.lang.Closure> |
validators
Holds all validators checking the agent's state
A validator should be a closure accepting the old and the new value in this order.
|
currentThread
Constructor and Description |
---|
AgentBase(T data) |
AgentBase(T data,
groovy.lang.Closure copy)
Creates a new Agent around the supplied modifiable object
|
Modifier and Type | Method and Description |
---|---|
void |
addListener(groovy.lang.Closure listener)
Adds a listener interested in state updates
A listener should be a closure accepting the old and the new value in this order plus optionally the agent reference as the first argument.
|
void |
addValidator(groovy.lang.Closure validator)
Adds a validator checking the agent's state
A listener should be a closure accepting the old and the new value in this order plus optionally the agent reference as the first argument.
|
void |
await()
Blocks until all messages in the queue prior to call to await() complete.
|
private groovy.lang.Closure |
checkClosure(groovy.lang.Closure code)
Only two-argument closures are allowed
|
T |
getInstantVal()
A shorthand method for safe message-based retrieval of the internal state.
|
T |
getVal()
A shorthand method for safe message-based retrieval of the internal state.
|
(package private) void |
onMessage(groovy.lang.Closure code)
Accepts and invokes the closure
|
(package private) void |
onMessage(org.codehaus.groovy.runtime.NullObject obj)
Accepts a NullObject instance and sets the internal state to null
|
(package private) void |
onMessage(T message)
Other messages than closures are accepted as new values for the internal state
|
T |
sendAndWait(groovy.lang.Closure message)
Submits the closure waiting for the result
|
void |
updateValue(T newValue)
Allows closures to set the new internal state as a whole
Do not call this method directly from the outside.
|
void |
valAsync(groovy.lang.Closure callback)
A shorthand method for safe asynchronous message-based retrieval of the internal state.
|
attachToThreadPool, call, getErrors, handleMessage, hasErrors, isFair, leftShift, makeFair, registerError, send, setPGroup
protected java.util.concurrent.locks.ReadWriteLock lock
protected T data
private final groovy.lang.Closure copy
private final java.util.Collection<groovy.lang.Closure> listeners
private final java.util.Collection<groovy.lang.Closure> validators
private static final groovy.lang.Closure awaitClosure
AgentBase(T data)
AgentBase(T data, groovy.lang.Closure copy)
data
- The object to use for storing the internal state of the variablecopy
- A closure to use to create a copy of the internal state when sending the internal state outfinal void onMessage(org.codehaus.groovy.runtime.NullObject obj)
obj
- The received messagefinal void onMessage(groovy.lang.Closure code)
code
- The received messagefinal void onMessage(T message)
message
- The received messagepublic final void updateValue(T newValue)
newValue
- The value to set the internal state topublic final T getInstantVal()
public final T getVal() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the thread gets interrupted while waiting for a value to be boundpublic final void valAsync(groovy.lang.Closure callback)
callback
- A closure to invoke with the internal state as a parameterpublic final T sendAndWait(groovy.lang.Closure message) throws java.lang.InterruptedException
message
- The message/closure to sendjava.lang.InterruptedException
- If the thread gets interrupted while waiting for a value to be boundpublic final void await() throws java.lang.InterruptedException
java.lang.InterruptedException
- If the thread gets interrupted while waiting for a value to be boundpublic void addListener(groovy.lang.Closure listener)
listener
- The closure with two or three argumentspublic void addValidator(groovy.lang.Closure validator)
validator
- The closure with two or three argumentsprivate groovy.lang.Closure checkClosure(groovy.lang.Closure code)
code
- The passed-in closure