NetworkSeize


Используется при моделировании транспортных сетей. Объект захватывает для заявки заданное количество сетевых ресурсов. При необходимости может пересылать захваченные ресурсы в заданное место сети и (опять же, при необходимости) присоединять их к заявке. Объект можно рассматривать как очередь Queue заявок, ожидающих ресурсов, за которой могут следовать объекты NetworkSendTo и NetworkAttach. Обратите внимание, что вначале ресурсы запрашиваются для первой заявки из очереди, и пока эта заявка не захватит ресурсы (или не покинет объект по какой-либо другой причине), ресурсы для последующих заявок не выделяются (даже если они и могли бы быть выделены).

Приведем примеры посылки/присоединения ресурсов с помощью этого объекта: пусть требуется отвести пациента (который моделируется как заявка) в процедурную комнату в сопровождении медсестры: после захвата ресурса, моделирующего медсестру, пациент должен дождаться, пока ресурс дойдет до него, затем выполнить операцию присоединения и уже тогда отправиться в комнату в сопровождении медсестры. Другой пример - модель склада, где заявка, моделирующая поддон с грузом ожидает прихода сетевого ресурса - вилочного погрузчика - для транспортировки.

Посылаться и/или присоединяться к заявке могут только движущиеся ресурсы или переносные ресурсы в сопровождении движущихся (см. описание объекта NetworkSendTo). Поэтому если Вы попытаетесь переслать с помощью объекта NetworkSeize статический ресурс или переносной ресурс без сопровождения движущихся ресурсов, объект выдаст ошибку.

Заявка, ожидающая ресурса (или прибытия отосланных ресурсов) отображается на анимации в случайной точке внутри узла (если не задана другая фигура шаблона анимации). 

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

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

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

Queue queue
Очередь, в которой заявки ждут запрашиваемых ресурсов.
NetworkSendTo sendTo
Объект, выполняющий отсылку захваченных ресурсов в заданное место сети (используется в случае необходимости).
NetworkAttach attach
Объект, выполняющий присоединение к заявке захваченных ресурсов (используется в случае необходимости).

Порты

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

Параметры

Список ресурсов { pool1, ... } [динамический]
Список имен объектов NetworkResourcePool, задающих те сетевые ресурсы, которые будут захватываться данным объектом. Указав имя объекта один раз, заявка захватит один ресурс того типа, который задается этим объектом. Поэтому, например, если Вы хотите захватить два ресурса одного и того же типа, напишите имя соответствующего объекта дважды: { doctor, nurse, nurse }.
Синтаксис: NetworkResourcePool[] resources
Локальная переменная: T entity - заявка.
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект.
Синтаксис: void onEnter
Локальная переменная: T entity - заявка.
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект через порт out.
Синтаксис: void onExit
Локальная переменная: T entity - заявка.
Вместимость очереди
[Параметр виден, если не выбрана опция Максимальная вместимость] Вместимость вложенной очереди queue.
Синтаксис: int capacity
Значение по умолчанию: 100
Максимальная вместимость очереди
Если опция выбрана (true), то вместимость очереди queue будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Разрешить уход по таймауту
Если опция выбрана (true), то заявки могут покидать очередь по таймауту. После проведения в очереди максимально допустимого времени заявки будут покидать объект через специальный порт outTimeout.
Синтаксис: boolean enableTimeout
Значение по умолчанию: true
Таймаут [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Выражение, вычисляющее значение таймаута (максимально допустимое время, которое заявка может провести в очереди) для заявки.
Синтаксис: double timeout
Локальная переменная: T entity - заявка.
Значение по умолчанию: Double.POSITIVE_INFINITY
Действие при уходе по таймауту [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Код, выполняемый, когда заявка покидает объект по таймауту (прождав в очереди максимально допустимое время) через специальный порт outTimeout.
Синтаксис: void onExitTimeout
Локальная переменная: T entity - заявка.
Разрешить вытеснение
Если опция выбрана (true), то заявки помещаются в очередь в соответствии с их приоритетами и могут быть вытеснены из очереди заявками с более высокими приоритетами. 
Синтаксис: boolean enablePreemption
Значение по умолчанию: false
Приоритет заявки [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Приоритет поступающей в объект заявки (чем больше значение, тем выше приоритет).
Синтаксис: double priority
Значение по умолчанию: 0
Локальная переменная: T entity - заявка.
Действие при вытеснении [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Код, выполняемый, когда заявка покидает объект через порт outPreempted в результате вытеснения.
Синтаксис: void onExitPreempted
Локальная переменная: T entity - заявка.
Отсылать захваченные ресурсы
Если опция выбрана (true), то захваченные ресурсы будут отсылаться в заданное Место назначения
Синтаксис: boolean sendResources
Значение по умолчанию: false
Место назначения
[Виден, если выбрана опция Отсылать захваченные ресурсы] Определяет место сети, куда объект будет направлять захваченые ресурсы: будет ли это Заданный узел сети, или местоположение текущей заявки (Заявка), текущее или базовое местоположение указанного ниже ресурса (опции Захваченный ресурс и Базовое местоположение захваченного ресурса соответственно).
Синтаксис: int destinationType
Значение по умолчанию: Заданный узел (NetworkSendTo.DEST_NODE)
Допустимые значения: NetworkSendTo.DEST_NODENetworkSendTo.DEST_ENTITYNetworkSendTo.DEST_RESOURCENetworkSendTo.DEST_RESOURCE_HOME
Узел [динамический]
[Виден, если выбрана опция Отсылать захваченные ресурсы и в качестве Места назначения выбран Заданный узел] Имя прямоугольника, задающего узел сети, куда будут отосланы захваченные ресурсы.
Синтаксис: ShapeRectangle destinationNode
Локальная переменная: T entity - заявка.
Ресурс [динамический]
[Виден, если выбрана опция Отсылать захваченные ресурсы и в качестве Места назначения выбран Захваченный ресурс или Базовое местоположение захваченного ресурса] Имя объекта NetworkResourcePool, задающего тот сетевой ресурс, к которому (или к его базовому местоположению) будут посылаться захваченные ресурсы. Если в текущий момент будет захвачено несколько ресурсов указанного типа, то будет выбран первый ресурс из списка.
Синтаксис: NetworkResourcePool destinationResource
Присоединять захваченные ресурсы
Если опция выбрана (true), то перед тем, как заявка покинет объект, к ней будут присоединяться захваченные ресурсы. 
Синтаксис: boolean attachResources
Значение по умолчанию: false
Фигура анимации
Фигура анимации вложенного объекта queue. Тип фигуры зависит от выбранного Типа анимации.
Синтаксис: Shape animationGuide
Тип анимации
Тип анимации вложенного объекта queue. Допустимые значения: Путь, Мешок, Упорядоченная, Набор, Одиночная
Синтаксис: int animationType
Значение по умолчанию: Путь
Допустимые значения: Animator.PATH, Animator.BAG, Animator.ARRANGED, Animator.SET, Animator.SINGLE
Направление анимации
[Параметр виден, если в качестве Типа анимации выбран Путь] Направление движение анимаций заявок по фигуре анимации вложенного объекта queue.
Синтаксис: boolean animationForward
Значение по умолчанию: Вперед (true)
Включить сбор статистики
Если опция выбрана (true), то будет собираться статистика длины очереди заявок.
Синтаксис: boolean enableStats
Значение по умолчанию: false

Функции

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

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

T remove( T entity ) - извлекает заявку entity из очереди queue и возвращает ее. Если такой заявки в очереди обнаружено не будет, метод вернет null.