Delay

Задерживает заявки на заданный период времени. Время задержки вычисляется динамически, может быть случайным, зависеть от текущей заявки или от каких-то других условий. Это время может, в частности, вычисляться как длина фигуры, заданной в качестве фигуры анимации этого объекта, поделенной на "скорость" заявки.

Одновременно могут быть задержаны сразу несколько заявок (не более заданной вместимости объекта capacity). Заявки задерживаются независимо друг от друга – время задержки вычисляется отдельно для каждой заявки. Как только время задержки истекает, заявка тут же покидает объект. Если объект Delay заполнен полностью, то новую заявку он не примет, и в этом случае Вам нужно будет поместить перед ним специальный объект буферизации, например, Queue.

Пример задания времени задержки: пусть время обработки пакета данных (заявка класса Packet) пропорционально размеру пакета + какое-то случайное время. Тогда Вы можете сделать следующее: указать Packet в качестве Класса заявки объекта Delay и написать processingTimePerDataUnit * entity.size + uniform( timeMin, timeMax ) в поле параметра delayTime

Если вместимость объекта Delay меняется динамически, и количество заявок, находящихся в объекте в данный момент времени, превышает значение вместимости объекта, то объект Delay даст каждой такой заявке завершить ее время ожидания, и не будет принимать новые заявки до тех пор, пока их количество в объекте не станет меньше нового значения вместимости объекта.

Вы можете выполнять любые необходимые Вам действия над содержащимися в объекте заявками, напрмер, узнавать, сколько времени еще заявкам осталось находиться в объекте, и даже извлекать заявки, не дожидаясь того, когда их времена задержек истекут.

Объект Delay может отображать анимации находящихся в нем заявок как движущимися вдоль заданного пути, так и ожидающими в заданных точках. В том случае, если заявки отображаются движущимися, за время их задержки они должны будут пройти весь путь выбранной фигуры анимации объекта Delay.

Обратите внимание, что объект Delay с ограниченной вместимостью по сути эквивалентен комбинации объектов Service + ResourcePool с той же вместимостью, где ресурсы используются только в этом объекте Service.

Параметры класса

Класс заявки
Класс заявок, проходящих через объект, должен быть подклассом Entity. Указав класс заявки, Вы можете напрямую обращаться к полям этого класса в коде динамических параметров, таких, как onEnter.
Синтаксис: T extends Entity
Значение по умолчанию: Entity

Переменные

StatisticsContinuous statsUtilization
Статистика использования объекта (показатель использования высчитывается как size()/capacity).
Статистика собирается только если выбрана опция объекта Включить сбор статистики.

Порты

InPort in
Входной порт.
OutPortPush out
Выходной порт.

Параметры

Задержка задается
Определяет способ задания времени задержки: задержка может быть задана либо Явно, либо как Длина пути /скорость.
Синтаксис: boolean delayTimeDefinedByPath
Значение по умолчанию: Явно (false)
Время задержки [динамический]
[Параметр виден, если Задержка задается как Явно] Выражение, вычисляющее время задержки для заявки.
Синтаксис: double delayTime
Локальная переменная: Т еntity - текущая заявка.
Значение по умолчанию: triangular( 0.5, 1, 1.5 )
Скорость [динамический]
[Параметр виден, если Задержка задается как Длина пути/скорость] Выражение, вычисляющее скорость заявки.
Синтаксис: double delayTime
Локальная переменная: Т еntity - текущая заявка.
Значение по умолчанию: 10
Вместимость
Вместимость объекта Delay. Задает максимальное количество заявок, которое может одновременно находиться в объекте. 
Синтаксис: int capacity
Значение по умолчанию: 1
Максимальная вместимость
Если опция выбрана (true), то вместимость объекта Delay будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект.
Синтаксис: void onEnter
Локальная переменная: Т еntity - заявка.
                          double delayTime - время задержки заявки (уже вычисленное к этому моменту).
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект.
Синтаксис: void onExit
Локальная переменная: Т еntity - заявка.
Фигура анимации
Фигура анимации объекта Delay. Тип фигуры зависит от выбранного Типа анимации.
Синтаксис: Shape animationGuide
Тип анимации
Тип анимации объекта Delay. Допустимые значения: Путь, Мешок, Упорядоченная, Набор, Одиночная
Синтаксис: int animationType
Значение по умолчанию: Путь (Animator.PATH)
Допустимые значения: Animator.PATH, Animator.BAG, Animator.ARRANGED, Animator.SET, Animator.SINGLE
Направление анимации
[Параметр виден, если в качестве Типа анимации выбран Путь] Направление движения анимаций по фигуре анимации объекта.
Синтаксис: boolean animationForward
Значение по умолчанию: Вперед (true)
Включить сбор статистики
Если опция выбрана (true), то для этого объекта будет собираться статистика его использования.
Синтаксис: boolean enableStats
Значение по умолчанию: false

Функции

int size() - возвращает количество заявок, задерживаемых объектом в текущий момент времени.

boolean canEnter() - возвращает true, если объект может принять еще одну заявку, т.e. количество заявок, задерживаемых объектом в текущий момент времени, меньше вместимости объекта Delay.

T get( int index ) - возвращает заявку, находящуюся в позиции с номером index (самая "старая" заявка находится в позиции с номером 0).

T remove( T entity ) - извлекает заданную заявку entity из объекта и возвращает ее.

void resetStats() - удаляет статистику, собранную объектом к текущему моменту времени.

double getRemainingTime( int index ) - возвращает оставшееся время задержки для заявки, находящейся в позиции с номером index.