Package it.tidalwave.actor
Interface Collaboration
public interface Collaboration
Represents a single task that is possibly decomposed in multiple subtasks and provides support for waiting for its
completion.
- Author:
- Fabrizio Giudici
-
Nested Class Summary
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionint
Returns the number of messages related to thisCollaboration
not yet delivered.Return the duration of thisCollaboration
.Returns the message that originated thisCollaboration
.int
Returns the number of messages related to thisCollaboration
not yet consumed.int
Returns the number of running threads assigned to thisCollaboration
.Return the time when thisCollaboration
has been created.boolean
Returnstrue
if theCollaboration
has been completed.boolean
Returnstrue
when the currentCollaboration
is suspended.void
Resumes a suspendedCollaboration
.void
resumeAndDie
(Object suspensionToken) Resumes a suspendedCollaboration
and lets it terminate without any further operation.suspend()
Sometimes aCollaboration
must coordinate with the external world, waiting for an external asynchronous event that cannot be modeled with agents.void
Waits for the completion of thisCollaboration
.
-
Field Details
-
NULL_COLLABORATION
-
-
Method Details
-
getOriginatingMessage
Returns the message that originated thisCollaboration
.- Returns:
- the message
-
isCompleted
boolean isCompleted()Returnstrue
if theCollaboration
has been completed.- Returns:
true
if theCollaboration
has been completed
-
waitForCompletion
Waits for the completion of thisCollaboration
.- Throws:
InterruptedException
- if the wait is interrupted
-
getStartTime
Return the time when thisCollaboration
has been created.- Returns:
- the creation time
-
getDuration
Return the duration of thisCollaboration
.- Returns:
- the duration
-
suspend
Object suspend()Sometimes aCollaboration
must coordinate with the external world, waiting for an external asynchronous event that cannot be modeled with agents. For instance, a user intervention (e.g. by clicking a button) or an external piece of software that is not part of theCollaboration
model. In this case, it can be marked as 'suspended' and in this case it won't be considered completed, even though there are no related pending messages or working threads. When the external event occurs, callresume(java.lang.Object, java.lang.Runnable)
. In order to support multiple reasons for suspension, a token is generated and returned. It must be passed toresume()
for resuming.- Returns:
- a token representing the reason for the suspension
- See Also:
-
resume
Resumes a suspendedCollaboration
. It executes the givenRunnable
which is expected to send new messages.- Parameters:
suspensionToken
- the token representing the reason for the suspensionresumerTask
- the code which resumes theCollaboration
- See Also:
-
resumeAndDie
Resumes a suspendedCollaboration
and lets it terminate without any further operation.- Parameters:
suspensionToken
- the token representing the reason for the suspension- See Also:
-
isSuspended
boolean isSuspended()Returnstrue
when the currentCollaboration
is suspended.- Returns:
true
when it's suspended- See Also:
-
getDeliveringMessagesCount
@Nonnegative int getDeliveringMessagesCount()Returns the number of messages related to thisCollaboration
not yet delivered.- Returns:
- the number of messages not yet delivered
-
getPendingMessagesCount
@Nonnegative int getPendingMessagesCount()Returns the number of messages related to thisCollaboration
not yet consumed.- Returns:
- the number of messages not yet consumed
-
getRunningThreadsCount
@Nonnegative int getRunningThreadsCount()Returns the number of running threads assigned to thisCollaboration
.- Returns:
- the number of threads
-