public class TTESwitch extends AtomicCommunicationAspect
CommunicationAspect
that, when its
sendToken(Receiver, Receiver, Token)
method is called, delays
the delivery of the specified token to the specified receiver
according to a service rule.
The actor differentiates between two kinds of tokens: time-triggered
and event-triggered, which is defined by the parameter type in
the port which is associated with this communication aspect.
When tokens are received they are delivered with a delay given by the
serviceTime parameter. If the actor is currently servicing a previous
event-triggered token when it receives a time-triggered token, the event-triggered
token is queued again and the time-triggered token is serviced. After the
time-triggered token is sent, the event-triggered token in the queue is selected
and delivered after the full serviceTime. If an event-triggered token arrives
while another event-triggered token arrives, the new event-triggered token is queued.
If a time-triggered token is received while another time-triggered token is serviced
an exception is thrown. Time-triggered messages should have a fixed delay. In a
time-triggered ethernet implementation an offline calculated schedule ensures that only
one time-triggered message is received by the TTESwitch at a time.
Event-triggered tokens are processed in FIFO order.
.
Entity.ContainedObjectsIterator
Modifier and Type | Field and Description |
---|---|
Parameter |
serviceTime
The service time.
|
_parameters, _tokenCount
_typesValid
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
decoratorHighlightColorName
COMPLETED, NOT_READY, STOP_ITERATING
Constructor and Description |
---|
TTESwitch(CompositeEntity container,
java.lang.String name)
Construct a TTESwitch with a name and a container.
|
Modifier and Type | Method and Description |
---|---|
void |
attributeChanged(Attribute attribute)
If the attribute is serviceTime, then ensure that the value
is positive.
|
java.lang.Object |
clone(Workspace workspace)
Clone this actor into the specified workspace.
|
IntermediateReceiver |
createIntermediateReceiver(Receiver receiver)
Create an intermediate receiver and determine type of tokens received on the
port associated with this receiver.
|
void |
fire()
If there is a time-triggered token scheduled to be sent then deliver this
token, otherwise send first token in the queue of event-triggered tokens.
|
Receiver |
getReceiver(Receiver receiver,
IOPort port)
Create a receiver to mediate a communication via the specified receiver.
|
boolean |
postfire()
If a token has been sent in the fire method then schedule the next firing.
|
void |
reset()
Reset the communication aspect and clear the tokens.
|
void |
sendToken(Receiver source,
Receiver receiver,
Token token)
Receive a token and store it in the queue.
|
_sendToReceiver, createDecoratorAttributes, decoratedObjects, initialize, isGlobalDecorator, registerListener, sendCommunicationEvent, setContainer
_containedTypeConstraints, _customTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, stop, stopFire, terminate, wrapup
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
description, getContainer, getDisplayName, getFullName, getName, getName, setName
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, isStrict, iterate, prefire, stop, stopFire, terminate
addInitializable, preinitialize, removeInitializable, wrapup
getDerivedLevel, getDerivedList, propagateValue
public Parameter serviceTime
public TTESwitch(CompositeEntity container, java.lang.String name) throws IllegalActionException, NameDuplicationException
container
- The container.name
- The name of this actor.IllegalActionException
- If the container is incompatible
with this actor.NameDuplicationException
- If the name coincides with
an actor already in the container.public IntermediateReceiver createIntermediateReceiver(Receiver receiver) throws IllegalActionException
createIntermediateReceiver
in interface CommunicationAspect
createIntermediateReceiver
in class AtomicCommunicationAspect
receiver
- The receiver that is being wrapped.IllegalActionException
- If parameterpublic Receiver getReceiver(Receiver receiver, IOPort port) throws IllegalActionException
receiver
- Receiver whose communication is to be mediated.port
- Port of the communication aspect.IllegalActionException
- If the receiver cannot be created.public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
clone
in class AtomicCommunicationAspect
workspace
- The workspace for the cloned object.java.lang.CloneNotSupportedException
- If cloned ports cannot have
as their container the cloned entity (this should not occur), or
if one of the attributes cannot be cloned.NamedObj.exportMoML(Writer, int, String)
,
NamedObj.setDeferringChangeRequests(boolean)
public void attributeChanged(Attribute attribute) throws IllegalActionException
attributeChanged
in class NamedObj
attribute
- The attribute that changed.IllegalActionException
- If the service time is negative.public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class AtomicActor<TypedIOPort>
IllegalActionException
- Not thrown in this base class.public boolean postfire() throws IllegalActionException
postfire
in interface Executable
postfire
in class AtomicActor<TypedIOPort>
IllegalActionException
- Not thrown in this base class.public void sendToken(Receiver source, Receiver receiver, Token token) throws IllegalActionException
source
- Receiver that sent the token.receiver
- The receiver for which this communication aspect is mediating
communication.token
- The token for the communication to mediate.IllegalActionException
- If the token cannot be sent.public void reset()