Service


Захватывает для заявки заданное количество ресурсов, задерживает заявку, а затем освобождает захваченные ею ресурсы (заданных указанным объектом ResourcePool). Объект ResourcePool может быть задан как графически, путем соединения его порта с портом access этого объекта Service, так и с помощью параметра Объект ResourcePool (в случае одновременого использования обоих способов будут захватываться ресурсы объекта, указанного в параметре).

Эквивалентен последовательности объектов Seize, Delay, Release (и сам реализован именно таким способом) и должен использоваться в тех случаях, когда все, что требуется - это задержать захваченные ресурсы на заданное время, а затем их отпустить. Большинство параметров этих вложенных объектов вынесены в интерфейс объекта Service

Пожалуйста, обратите внимание, что при завершении заданной задержки, моделирующей операцию, производимую заявкой с ресурсами, объект освободит именно те ресурсы, которые ранее были захвачены для этой заявки. 

Вместимость вложенного объекта delay установлена максимально допустимой (поскольку она фактически все равно будет ограничена количеством ресурсов заданного типа). 

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

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

Вложенные объекты

Seize seize
Захватывает ресурсы. Этот объект в свою очередь содержит объект Queue, представляющий очередь, в которой заявки ждут свои ресурсы.
Delay delay
Задерживает заявку.
Release release
Освобождает ранее захваченные этим объектом ресурсы.

Порты

Port in
Входной порт.
Port access
Порт, который может быть соединен с портом того объекта ResourcePool, чьи ресурсы будут использоваться этим объектом по умолчанию (если не будет указан другой объект в поле Объект ResourcePool).
Port outTimeout
Выходной порт для заявок, покидающих объект по таймауту (вследствие истечения заданного времени ожидания).
Port outPreempted
Выходной порт для заявок, покидающих объект в результате вытеснения.
Port out
Выходной порт.

Параметры

Количество ресурсов [динамический]
Выражение, вычисляющее количество ресурсов, необходимое текущей заявке.
Если Количество ресурсов равно нулю, то наличие ресурсов не проверяется (может ни быть соединен объект ресурсов, ни указано его имя в поле Объект ResourcePool, т.e. там будет значение null), при этом заявка будет просто проходить через объект.
Синтаксис: int quantity
Значение по умолчанию: 1
Локальная переменная: T entity - заявка.. 
Время задержки [динамический]
Выражение, вычисляющее время задержки для заявки.
Синтаксис: double delayTime
Локальная переменная: T entity - текущая заявка.
Значение по умолчанию: triangular( 0.5, 1, 1.5 )
Объект ResourcePool [динамический]
Выражение, возвращающее имя объекта ResourcePool, задающего ресурсы, которые требуются заявке. Если Вы оставите поле пустым, или если выражение будет возвращать null, то будут использоваться ресурсы объекта ResourcePool, соединенного с портом access этого объекта Service.
Синтаксис: ResourcePool resourcePool
Значение по умолчанию: null
Локальная переменная: T entity - заявка.
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект.
Синтаксис: void onEnter
Локальная переменная: T entity - заявка.
Действие при начале задержки [динамический]
Код, выполняемый, когда заявка поступает во вложенный объект delay.
Синтаксис: void onEnterDelay
Локальные переменная: T entity - заявка
                           int quantity - количество ресурсов, захваченных заявкой для обслуживания.
                           ResourcePool pool - объект ResourcePool, задающий ресурсы, захваченные заявкой.
                           double delayTime - время задержки, вычисленное для заявки.
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект через порт out.
Синтаксис: void onExit
Локальная переменная: T entity - заявка.
Вместимость очереди
[Параметр виден, если не выбрана опция Максимальная вместимость] Вместимость вложенной очереди queue.
Синтаксис: int queueCapacity
Значение по умолчанию: 100
Максимальная вместимость очереди
Если опция выбрана (true), то вместимость очереди queue будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Разрешить уход по таймауту
Если опция выбрана (true), то заявки могут покидать очередь queue по таймауту. После проведения в очереди максимально допустимого времени заявки будут покидать объект через специальный порт outTimeout.
Синтаксис: boolean enableTimeout
Значение по умолчанию: true
Таймаут [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Выражение, вычисляющее значение таймаута (максимально допустимое время, которое заявка может провести в очереди) для заявки.
Синтаксис: double timeout
Локальная переменная: T entity - заявка.
Значение по умолчанию: Double.POSITIVE_INFINITY
Действие при уходе по таймауту [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Код, выполняемый, когда заявка покидает объект по таймауту (прождав в очереди queue максимально допустимое время) через специальный порт outTimeout.
Синтаксис: void onExitTimeout
Локальная переменная: T entity - заявка.
Разрешить вытеснение
Если опция выбрана (true), то заявки помещаются в очередь queue в соответствии с их приоритетами и могут быть вытеснены из очереди заявками с более высокими приоритетами. 
Синтаксис: boolean enablePreemption
Значение по умолчанию: false
Приоритет заявки [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Приоритет поступающей в объект заявки (чем больше значение, тем выше приоритет).
Синтаксис: double priority
Значение по умолчанию: 0
Локальная переменная: T entity - заявка.
Действие при вытеснении [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Код, выполняемый, когда заявка покидает объект через порт outPreempted в результате вытеснения из очереди queue.
Синтаксис: void onExitPreempted
Локальная переменная: T entity - заявка.
Фигура анимации (queue)
Фигура анимации вложенного объекта queue. Тип фигуры зависит от выбранного Типа анимации (queue).
Синтаксис: Shape animationGuideQueue
Тип анимации (queue)
Тип анимации вложенного объекта queue. Допустимые значения: Путь, Мешок, Упорядоченная, Набор, Одиночная
Синтаксис: int animationTypeQueue
Значение по умолчанию: Путь
Допустимые значения: Animator.PATH, Animator.BAG, Animator.ARRANGED, Animator.SET, Animator.SINGLE
Направление анимации (queue)
[Параметр виден, если в качестве Типа анимации (queue) выбран Путь] Направление движения анимаций по фигуре анимации вложенного объекта queue.
Синтаксис: boolean animationForwardQueue
Значение по умолчанию:  Вперед (true)
Фигура анимации (delay)
Фигура анимации объекта delay. Тип фигуры зависит от выбранного Типа анимации (delay).
Синтаксис: Shape animationGuideDelay
Тип анимации (delay)
Тип анимации объекта delay. Допустимые значения: Путь, Мешок, Упорядоченная, Набор, Одиночная
Синтаксис: int animationTypeDelay
Значение по умолчанию: Путь
Допустимые значения: Animator.PATH, Animator.BAG, Animator.ARRANGED, Animator.SET, Animator.SINGLE
Направление анимации (delay)
[Параметр виден, если в качестве Типа анимации (delay) выбран Путь] Направление движения анимаций по фигуре анимации объекта delay.
Синтаксис: boolean animationForwardDelay
Значение по умолчанию:  Вперед (true)
Включить сбор статистики
Если опция выбрана (true), то для вложенных объектов queue и delay будет собираться статистика.
Синтаксис: boolean enableStats
Значение по умолчанию: false

Функции

int queueSize() - возвращает количество заявок во вложенном объекте Queue

T queueGet( int index ) -  возвращает заявку, находящуюся в очереди в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).

T queueRemove( T entity ) - извлекает заявку entity из очереди и возвращает ее. 

int delaySize() - возвращает количество заявок во вложенном объекте Delay.

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

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