Все для Joomla. Беспланые шаблоны и расширения.

Диспетчер оперирует двумя очередями "реального времени" и обычной.
Работает в один поток, поэтому долгое исполнение обычной нагрузки на время блокирует прохождение команд "реального времени"
ProcessCommand выбирает первую команду из обычной очереди, засекает время выполнения, исполняет, поддерживает кольцевой буфер истории команд с их результататами и длительностями выполнения, пересчитывает среднюю длительность команд и ожидаемое время исполнения очереди.

ProcessRTCommand выбирает первую команду из очереди "реального времени" и исполняет её.

Основной цикл приложения (в консольном варианте - Repeat Until <флаг выхода>. В графическом - цикл обработки сообщений приложения, куда исполнительная часть интерпретатора вклинивается через Application.QueueAsyncCall(@ProcessCommand,0);  )

выполняет сначала все имеющие команды "реального времени", потом одну команду из основной очереди.
раз в StatInterval выполняет SendStat

Если подключены Viewer'ы - для каждого в очередь ставится команда UpdateGUI для каждого отображаемого списка.

Команды "реального времени" и все остальные

Run - переводит интерпретатор в режим продолжительного исполнения, обновляет статусы
Stop - переводит интерпретатор в режим останова, обновляет статусы
Step - переводит интерпретатор в режим исполнения одиночной команды, обновляет статусы
Open - переводит очередь интерпретатора в состояние "открыто", т.е. можно ставить команды, обновляет статусы
Close - переводит очередь интерпретатора в состояние "закрыто", т.е. можно ставить команды, обновляет статусы
Drop - очищает очередь интерпретатора
Quit -
Stat - вызывает внесение в интерфейс прилагаемого пакета статистики
Announce Worker
Denounce Worker
Connect GUI
Disconnect GUI
Update GUI
Command Status
Create Waiter
Create Lock
Lock Waiter
UnLock

 

Формат команды
<имя исполнителя>:<сервисное поле>:<имя команды>:<параметры>

 

В сервисном поле через запятую перечисляются подполя Sender, SeenBy, ID


отправитель записывает в сервисное поле Sender=<имя отправителя команды>
маршрутизаторы и хост назначения парсят сервисное поле
маршрутизаторы записывают цепочку узлов, которые прошла команда в виде SeenBy=<имя маршрутизатора 1> <имя маршрутизатора 2> <свое имя>

Если команда представляет собой функцию, то ей отправителем присваевается ID <имя отправителя>/<порядковый номер команды по модулю MaxInt>

после обработки команды-функции на конечном исполнителе заускается отправка ответа о результе в адрес отправителя командой
If ID<>'' Then ExecCommand(Sender+'::Command Status:'+ID+':Ok:'+Result);