NetworkResourcePool


Используется при моделировании транспортных сетей. Задает набор сетевых ресурсов определенного типа. Единственный порт объекта должен быть соединен с портом объекта Network.

Доступ к сетевым ресурсам (их захват и освобождение) осуществляется объектами NetworkSeize и NetworkRelease. Сетевые ресурсы очень похожи на "обычные" ресурсы (которые задаются с помощью объекта ResourcePool): ресурсы обоих типов представляют собой экземпляры общего базового класса ResourceUnit), но у сетевых ресурсов есть дополниительные свойства, и кроме того они могут работать только в пределах сети. Сетевые ресурсы могут быть статическимидвижущимися или переносными, см. типы сетевых ресурсов. У каждого ресурса есть свое базовое местоположение - узел сети, в котором этот ресурс будет находиться изначально (и если этот ресурс движущийся, то именно сюда он будет возвращаться после освобождения). Базовое местоположение ресурса может быть задано либо как один узел, либо как ломаная, соединяющая несколько узлов (эта ломаная не должна входить в состав группы фигур сети!)  

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

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

Вы можете задавать скорость движения движущихся ресурсов (в пикселах в единицу времени). При необходимости можно задать уникальную скорость для каждого ресурса и изменять ее с помощью метода unit.setSpeed(). Вы можете отображать на презентации занятые и свободные ресурсы различными фигурами, которые, опять же, можно изменять с помощью метода  unit.setShape().

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

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

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

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

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

Переменные

StatisticsContinuous statsUtilization
Статистика использования ресурса. Собирается только в том случае, если выбрана опция объекта Включить сбор статистики.

Порты

NetworkResourcePoolPort port
Порт, который должен быть соединен с одним (и только одним!) портом объекта Network, задающего ту сеть, в которую будут добавлены эти ресурсы.

Параметры

Тип ресурса
Тип этого ресурса: Статтический, Движущийся или Переносной, см. типы сетевых ресурсов.
Синтаксис int type
Значение по умолчанию Движущийся
Valid  values:  Network.RESOURCE_MOVING, Network.RESOURCE_STATIC, Network.RESOURCE_PORTABLE
Количество задано
Определяет, как задано количество ресурсов - Напрямую - численным значением, Табличной функцией, задающей, как количество ресурсов будет изменяться во времени или Фигурой базового местоположения (количество ресурсов будет равно количеству точек ломаной линии, соединяющей узлы базового местоположения). Подробное описание см. выше.
Синтаксис int capacityDefinitionType
Значение по умолчанию Напрямую
Допустимые значения:  NetworkResourcePool.CAPACITY_DIRECTNetworkResourcePool.CAPACITY_HOME_SHAPENetworkResourcePool.CAPACITY_TABLE
Количество ресурсов
[Виден, если Количество задано Напрямую] Количество ресурсов.
Синтаксис int capacity
Значение по умолчанию 1
Табличная функция
[Виден, если Количество задано Табличной функцией] Табличная функция, определяющая, как количество ресрусов будет изменяться с течением времени.
Синтаксис TableFunction capacityTable
Скорость
[Виден, если Тип ресурса: Движущийся] Скорость, с которой ресурсы движутся по сети.
Синтаксис double speed
Значение по умолчанию 10
Новый ресурс [динамический]
Выражение, определяющее, какой ресурс будет создаваться (обычно просто вызов конструктора класса создаваемого ресурса).
Синтаксис ResourceUnit newUnit
Значение по умолчанию new ResourceUnit()
Действие при создании нового ресурса [динамический]
Код, выполняемый при создании нового ресурса (может использоваться для дополнительной инициализации).
Синтаксис void onNewUnit
Локальная переменная T unit - только что созданный ресурс.
Действие при захвате [динамический]
Код, выполняемый при захвате ресурса.
Синтаксис void onSeize
Локальные переменные: T unit - ресурс.
                          Entity entity - заявка, захватывающая ресурс.
Действие при освобождении [динамический]
Код, выполняемый при освобождении ресурса.
Синтаксис void onRelease
Локальные переменные: T unit - ресурс.
                          Entity entity - заявка, освобождающая ресурс.
Фигура анимации свободного ресурса [динамический]
Фигура, которой на презентации будет отображаться свободный ресурс. Фигура доступна с помощью метода unit.getShape() и может быть изменена в любой момент времени с помощью метода unit.setShape(). Поскольку этот параметр динамический, то Вы можете присвоить разным ресурсам разные фигуры (и даже уникальную фигуру для каждого ресурса, написав здесь, например, new ShapeOval()).
Синтаксис Shape idleUnitShape
Локальная переменная: T unit - ресурс.
Фигура анимации занятого ресурса [динамический]
Фигура, которой на презентации будет отображаться занятый (захваченный заявкой) ресурс. Фигура доступна с помощью метода unit.getShape() и может быть изменена в любой момент времени с помощью метода unit.setShape(). Поскольку этот параметр динамический, то Вы можете присвоить разным ресурсам разные фигуры (и даже уникальную фигуру для каждого ресурса, написав здесь, например, new ShapeOval()).
Синтаксис Shape busyUnitShape
Локальная переменная: T unit - ресурс.
Уникальная фигура для каждого ресурса
Если опция выбрана (true), то объект создаст копию заданной фигуры ресурса и присвоит ее создаваемому ресурсу. В этом случае свойства фигуры (и ее содержимое, если это группа фигур) могут быть изменены отдельно для каждого ресурса. Если же опция не выбрана, то все ресурсы будут отображаться с помощью одной и той же фигуры, и любое изменение ее свойств приведет к изменению анимаций всех таких ресурсов. 
Синтаксис boolean uniqueShape
Значение по умолчанию false
Разрешить вращение
Если опция выбрана (true), то при движении ресурсов их фигуры анимации будут всегда поворачиваться согласно текущему направлению движения ресурса.
Синтаксис: boolean enableRotation
Значение по умолчанию: false
Разрешить вращение по вертикали
Если опция выбрана (true), то при движении ресурсов их фигуры анимации будут поворачиваться согласно текущему направлению движения ресурса как по горизонтали, так и по вертикали.
Синтаксис: boolean enableVerticalRotation
Значение по умолчанию: true
Базовое местоположение задается как 
Определяет, как задается базовое местоположение ресурса: как один узел или же как ломаная, соединяющая несколько узлов.
Синтаксис int homeShapeType
Значение по умолчанию Один узел
Допустимые значения:  NetworkResourcePool.HOME_NODENetworkResourcePool.HOME_PATH
Базовый узел
[Виден, если Базовое местоположение задается как Один узел] Прямоугольник, задающий узел сети, который будет играть роль базового местоположения этих ресурсов в сети.
Синтаксис ShapeRectangle homeNode
Путь через узлы
[Виден, если Базовое местоположение задается как Путь через узлы] Ломаная с точками, лежащами внутри узлов, которые будут играть роль узлов базового местоположения этих ресурсов в сети (количество точек этой ломаной также может задавать количество ресурсов данного типа).
Синтаксис ShapePolyLine homePath
Включить сбор статистики
Если опция выбрана (true), то для объекта будет собираться статистика.
Синтаксис boolean enableStats
Значение по умолчанию false

Функции

int idle()- возвращает количество свободных ресурсов. При этом освобожденные ресурсы, возвращающиеся в свои базовые местоположения, считаются занятыми.

int busy() - возвращает количество занятых ресурсов.

int getUnit( int index ) - возвращает ресурс с номером index.

void resetStats() - удаляет собранную статистику использования ресурса.