Здесь описываются команды OnAir для зеркалирования и внешнего управления.

Для обмена сообщениями используется утилита SLMessageServer.

В Установках программы OnAir зеркалированием управляют следующие настройки:
  Принимать и исполнять команды -- позволяет данному экземпляру приложения исполнять команды, приходящие как от других экземпляров в режиме зеркалирования, так и любых других внешних программ. Команды запроса состояния исполняются всегда, независимо от этой настройки.
  Посылать команды машинам (список машин) -- транслирует на указанные машины действия оператора с данным приложением. Команды посылки сообщений из расписания исполняются всегда, независимо от этой настройки.

Каждый экземпляр OnAir #1, OnAir #2 и т.д. открывает для приема очередь с именем "FDOnAir1", "FDOnAir2" и т.д.
В режиме зеркалирования программа посылает сообщения в очередь с тем же именем на указанной машине.
Поле сообщения "Subject" всегда содержит строку "OnAir1.Mirror" (Цифра 1 -- версия протокола)
Поле сообщения "Body" содержит строку команды.

Исполняемые строки, за исключением некоторых команд, всегда пишутся в Лог-файл.
В Лог-файл пишется сначала источник команды (кнопка, горячая клавиша или сообщение), затем сама строка.
Строка состоит из имени команды и параметров, разделенных пробелами.
В именах команд большие/маленькие буквы не различаются.

Исполяются следующие команды:

Loading.Break
  Прервать загрузку расписания (состояние расписания на зеркалящихся машинах может оказаться разным)

Folder.Refresh Number
  Обновить информацию а файлах в указанной папке

Player.SetVolume Node Value
  Установить громкость звуковой линии в децибелах
  Например: "Player.SetVolume 1 -48"
  Не пишется в Лог-файл.

Player.SetForeFade Duration
  Установить длительность проявления/гашения логотипа/титров в миллисекундах
  Например: "Player.SetForeFade 500"
  Не пишется в Лог-файл.

Player.SetBackFade Duration
  Установить длительность перехода для команд фона в миллисекундах
  Например: "Player.SetBackFade 500"
  Не пишется в Лог-файл.

Player.PrepareVideo Number
  Подготовить видео на проход (превью)
  Например: "Player.PrepareVideo 1"

Player.Video Number
  Включить видео на проход
  Например: "Player.Video 1"
  "Player.Video 0" - включить на проход ранее подготовленное видео

Player.SwitchVideo Number
  Переключить видео, идущее на проход
  Например: "Player.SwitchVideo 1"

Player.PureVideo Number
  Включить видео на проход с выключением логотипа и титров
  Например: "Player.PureVideo 1"

Player.Default Number
  Показать заставку
  Например: "Player.Default 1"

Player.SetLogotip 0/1
  Разрешить/Запретить показ логотипа
  Например: "Player.SetLogotip 1"

Player.SetTitling 0/1
  Разрешить/Запретить показ титров
  Например: "Player.SetTitling 1"

Player.TurnLogotip
  Изменить состояние показа логотипа

Player.TurnTitling
  Изменить состояние показа титров

Player.SoundFileStop
  Остановить проигрыш звукового файла

Player.ForeTitleStop
  Остановить проигрыш полноэкранного титра

Player.SetAux 0/1
  Включить/Выключить микрофон
  Например: "Player.SetAux 1"

Player.TurnAux
  Изменить состояние микрофона

Player.SetMute Node 0/1
  Установить заглушение звуковой линии
  Например: "Player.SetMute 1"

Player.SetAudioBound 0/1/2
  Установить диапазон индикаторов звукового миксера -48/-72/-96 децибел
  Например: "Player.SetAudioBound 3"

Player.SetTitleButton Number 0/1
  Установить состояние титровальной кнопки
  Например: "Player.SetTitleButton 1 0"

Player.AbortTitleButton Number
  Прервать задание титровальной кнопки
  Например: "Player.AbortTitleButton 1"

Player.ClearTitleButton Number
  Очистить задание титровальной кнопки
  Например: "Player.ClearTitleButton 1"

Player.ReloadTitleButton Number
  Перезагрузить задание титровальной кнопки
  Например: "Player.ReloadTitleButton 1"

Player.SetTitleObject {ObjectName} 0/1
  Установить состояние титровального объекта
  Например: "Player.SetTitleObject {Строка1} 0"

Player.SetTitleObjects {Object1,Object2,..} 0/1
  Установить состояние нескольких титровальных объектов

Player.AbortTitleObject {ObjectName}
  Прервать задание титровального объекта
  Например: "Player.AbortTitleObject {Строка1}"

Player.AbortTitleObjects {Object1,Object2,..}
  Прервать задание нескольких титровальных объектов

Player.SetTitleObjectTask {ObjectName} TaskName
  Загрузить задание в титровальный объект
  Например: "Player.SetTitleObjectTask {Строка1} D:/реклама/утренний блок.spt"

Player.SetWaitVideo 0/1
  Установить, ожидает ли раписание окончания исполнения текущей команды видео
  Например: "Player.SetWaitVideo 0"

Player.SetWaitSound 0/1
  Установить, ожидает ли раписание окончания исполнения текущего файла звука
  Например: "Player.SetWaitSound 0"

Player.SetWaitTitle 0/1
  Установить, ожидает ли раписание окончания исполнения текущего полноэкранного титра
  Например: "Player.SetWaitTitle 0"

Player.SetWaitPause 0/1
  Установить, ожидает ли раписание окончания исполнения текущей команды индикатора "Пауза"
  Например: "Player.SetWaitPause 0"

Shedule.Start
  Запустить расписание

Shedule.ShowFirst
  Показать первый кадр

Shedule.Break
  Прервать проигрыш

Shedule.SetPause 0/1
  Продолжить исполнение/Остановить расписание
  Например: "Shedule.SetPause 0"

Shedule.SetRunShedule 0/1
  Задать текущее исполняемое расписание
  Например: "Shedule.SetRunShedule 1"

Shedule.TurnRunShedule
  Сменить текущее исполняемое расписание

Shedule.SetEditPosition Shedule Line
  Задать позицию редактирования
  Например: "Shedule.SetEditPosition 0 5"

Shedule.SetRunPosition Shedule Line
  Задать позицию испонения
  Например: "Shedule.SetRunPosition 1 5"

Shedule.SetItemDuration Shedule Line Duration
  Задать длительность команды в расписании в миллисекундах
  Например: "Shedule.SetItemDuration 0 5 1500"

Shedule.SetItemFade Shedule Line Duration
  Задать длительность перехода команды в расписании в миллисекундах
  Например: "Shedule.SetItemFade 0 5 100"

Shedule.SetItemWaitDecrease Shedule Line Duration
  Задать параметр WaitDecrease для команд ожидания в расписании в миллисекундах
  Например: "Shedule.SetItemWaitDecrease 0 5 1500"

Shedule.SetItemName Shedule Line Name
  Задать имя команды в расписании (для команд с редактируемым именем, например начало блока)
  Например: "Shedule.SetItemName 0 5 Именованный блок"

Shedule.SetItemWaitType Shedule Line 0/1
  Задать переключение команд "wait operator"/"wait follow" или "Wait time" - пассивное/активное состояние
  Например: "Shedule.SetItemWaitType 0 5 0"

Shedule.SetItemWaitStart Shedule Line StartTime
  Задать время старта команды "wait time" в миллисекундах
  Например: "Shedule.SetItemWaitStart 0 5 72000000"

Shedule.SetItemInOut Shedule Line In Out
  Задать параметры In и Out для команды в расписании в миллисекундах
  Например: "Shedule.SetItemInOut 0 5 1000 60000"

Shedule.SetItemWaitDuration Shedule Line 0/1
  Задать, будет ли расписание ждать окончания исполнения команды (или сразу запустит следующую)
  Например: "Shedule.SetItemWaitDuration 0 5 0"

Shedule.SetItemLogo Shedule Line 0/1/2
  Задать Logo-флаг команды 0-None/1-Off/2-On
  Например: "Shedule.SetItemLogo 0 5 2"

Shedule.SetItemTitle Shedule Line 0/1/2
  Задать Title-флаг команды 0-None/1-Off/2-On
  Например: "Shedule.SetItemTitle 0 5 2"

Shedule.SetItemSkipBlock Shedule Line 0/12
  Задать флаг skipblock для команды gpiwaitshout
  Например: "Shedule.SetItemSkipBlock 0 5 1"

Shedule.AddItem Shedule Line Insert Logo Title Command
  Добавить в расписание команду. 
  Insert - 0/1 задает моду Замена/Вставка
  Logo, Title - 0/1/2 задает соответствующие флаги 0-None/1-Off/2-On
  Command - строка команды, как в файле расписания
  Например: "Shedule.AddItem 0 5 1 0 0 movie 0:00:02.00 [2.00] D:\TEMP\Glass.avi"

Shedule.SetInsertMode 0/1
  Задает моду Замена/Вставка
  Например: "Shedule.SetInsertMode 1"

Shedule.SetLockRun 0/1
  Задает удержание строки исполнения в зоне видимости
  Например: "Shedule.SetLockRun 0"

Shedule.DeleteItem Shedule Line
  Удалить команду из расписания
  Например: "Shedule.DeleteItem 0 5"

Shedule.DeleteItemAbove Shedule Line
  Удалить из расписания команды выше указанной позиции
  Например: "Shedule.DeleteItemAbove 0 5"

Shedule.EraseList Shedule
  Очистить расписание
  Например: "Shedule.EraseList 0"

Shedule.SaveToFile Shedule FileName
  Сохранить расписание в файл
  Например: "Shedule.SaveToFile 0 D:/My Documents/example.air"

Shedule.CheckState
  Проверить состояние команд в расписаниях

Shedule.TimeShift Shedule Line Shift
  Сдвинуть все команды ожидания времени, начиная с указанной линии, на время в миллисекундах
  Например: "Shedule.TimeShift 1 1 -3600000"

Shedule.ReadFromFile Shedule FileName
  Загрузить расписание из файла
  Например: "Shedule.ReadFromFile 1 D:\TEMP\g.air"

Shedule.InsertFromFile Shedule Line FileName
  Вставить расписание из файла
  Например: "Shedule.InsertFromFile 1 5 D:\TEMP\g.air"

Shedule.SkipBlock
  Перейти к исполнению следующего блока

Shedule.RenameFile Shedule "OldName" "NewName" ? Result
  Заменить все вхождения файла OldName на NewName
  Возвращает: 1 - таких файлов нет, либо все файлы успешно заменены; 0 - существуют файлы, которые не удалось заменить
  Например: "Shedule.RenameFile 1 "D:\TEMP\g.avi" "D:\TEMP\h.avi" 1"

Shedule.RenameFileAtLine Shedule Line "OldName" "NewName" ? Result
  Заменить в указанной команде файл OldName на NewName
  Возвращает: 1 - файл успешно заменен; 0 - имя файла не совпадает; -1 - замена не применима к команде; -2 - замена блокирована
  Например: "Shedule.RenameFileAtLine 1 5 "D:\TEMP\g.avi" "D:\TEMP\h.avi" -2"

Запрос и получение информации о текущем состоянии OnAir.

Для запроса посылается сообщение с полем "Subject", содержащем строку "OnAir1.MirrorQuery".
Поле сообщения "Body" содержит список запрашиваемых параметров, разделенных переводом cтроки.
В ответ OnAir посылает сообщение с полем "Subject", содержащем строку "OnAir1.MirrorAnswer".
Поле сообщения "Body" содержит тот же список параметров, дополненных требуемой информацией.
Пример: 
Строка запроса - "Player.Volume 1"
Строка ответа - "Player.Volume 1 -48"
Нераспознанные строки возвращаются без изменений (можно использовать как разделитель или комментарий).

Возвращаются следующие параметры: (знак ? в возвращаемой строке не присутствует!!)

Setting.Name ? Value
  Запрос параметра установки
  Name - имя параметра, такое же как в реестре OnAir\#n\Settings
  На неопознанный параметр возвращается NOTFOUND 

Folder.Summary ? FoldersCount ChangeCount
  Количество папок файлов и общий счетчик изменений

Folder.Info FolderNumber ? TypeString FileCount ChangeCount FolderXmlString
  Тип папки, число файлов, счетчик изменений и строка XML с другими параметрами папки:
  <folder 
    type="Movies" 
    name="MyFilms" 
    path="d:\MyFilms" 
    object="" (для титров)
    filter="*.avi" 
  />
  Типы папок: Pictures, AlphaPictures, Movies, AlphaMovies, Sounds, TitleScripts, Shedules, RPM, Custom, TitleObjects

Folder.FileInfo FolderNumber FileNumber ? FileXmlString
  Информация о файле в формате XML:
  <file 
    type="movie" 
    fullname="d:\MyFilms\bull.avi" 
    id="" (для титров и RPM-фрагментов)
    duration="00:10:00.00" 
    start="" finish="" logo="" title="" UserLock="" AppLock="" (для RPM-фрагментов)
    icon="iconFilm"
  />
  Типы файлов: pictire, titlePicture, movie, titleMovie, sound, titleScript, shedule, rpmfragment, titleObject
  Виды иконок: iconTitleFilm, iconTitle, iconFilm, iconFilms, iconFilmWav, iconFilmNoWav, iconFilmErr, iconPict, iconRpmErr, iconRpmNorm, iconRpmGrab, iconRpmFuture, iconRpmBroken, iconRpmErrLock, iconRpmNormLock, iconRpmGrabLock, iconRpmFutureLock, iconRpmBrokenLock, iconScript, iconTitleScript, iconClock, iconTitleErr, iconTitleErrGreen, iconSound

Player.Time ? CurrentTime
  Текущее время

Player.Block ? StartTime PlayedTime Duration Command
  Информация о текущем блоке
  StartTime - время старта блока
  PlayedTime - длительность проигрывания блока
  Duration - полная длительность блока
  Command - строка команды старта блока, как в файле расписания
  Например: "Player.Block 14:03:11:00 0:00:01.45 0:00:33.15 wait follow 0 Test block #1"
  Если PlayedTime >= Duration, то проигрыш закончен 

Player.BlockInfo Shedule BlockNumber ? StartTime PlayedTime Duration ChangeCount BlockId Line Length Command 
  Информация о блоке в расписании
  StartTime - время старта блока
  PlayedTime - длительность проигрывания блока
  Duration - полная длительность блока
  ChangeCount - счетчик изменений блока
  BlockId - уникальный номер блока
  Line - позиция блока в расписании
  Length - количество команд в блоке
  Command - строка команды старта блока, как в файле расписания

Player.Volume Node ? Value
  Громкость звуковой линии в децибелах
  Например: "Player.Volume 1 -48"

Player.Mute Node ? 0/1
  Заглушение звуковой линии 
  Например: "Player.Mute 1 0"

Player.LineEnabled Node ? 0/1
  Разрешение входной линии 
  Например: "Player.LineEnabled 1 1"

Player.Peak Node ? Value
  Текущее пиковое значение звуковой линии в децибелах
  Например: "Player.Peak 1 -13"

Player.AudioBound 0/1/2
  Диапазон индикаторов звукового миксера -48/-72/-96 децибел
  Например: "Player.AudioBound 3"

Player.ForeFade ? Duration
  Длительность проявления/гашения логотипа/титров в миллисекундах
  Например: "Player.ForeFade 500"

Player.BackFade ? Duration
  Длительность перехода для команд фона в миллисекундах
  Например: "Player.BackFade 500"

Player.Logotip ? 0/1
  Разрешение показа логотипа
  Например: "Player.Logotip 1"

Player.Titling ? 0/1
  Разрешение показа титров
  Например: "Player.Titling 1"

Player.Aux ? 0/1
  Включение микрофона
  Например: "Player.Aux 1"

Player.Video ? StartTime PlayedTime Wait(0/1) Command
  Текущая команда Video
  StartTime - время старта команды
  PlayedTime - длительность проигрывания команды
  Wait(0/1) - должно ли расписание ждать окончания проигрыша
  Command - строка команды, как в файле расписания
  Например: "Player.Video 14:03:11:00 0:00:01.45 1 movie 0:00:02.00 [2.00] D:\TEMP\Glass.avi"
  Если PlayedTime >= Duration, то проигрыш закончен 
  Если индикатор пуст, строка команды отсутствует

Player.Sound ? StartTime PlayedTime Wait Command
  Текущая команда Sound

Player.Title ? StartTime PlayedTime Wait Command
  Текущая команда полноэкранных титров

Player.Pause ? StartTime PlayedTime Wait Command
  Текущая команда индикатора Pause

Player.TitleButton Number ? {ObjectName} On Run LoopCount RestTime Duration TaskName
  Информация о титровальной кнопке
  Number - номер кнопки, 0 для логотипа
  ObjectName - имя назначенного титровального объекта
  On(0/1) - включена ли кнопка
  Run(0/1) - проигрывается ли объект (необходимо On & Player.Titling)
  LoopCount - количество повторов (-1 для зацикленных)
  RestTime - сколько осталось проиграть
  Duration - длительность задания
  TaskName - имя задания
  Например: "Player.TitleButton 1 {Строка1} 1 0 -1 0:01:30.62 0:02:00.00 D:/реклама/утренний блок.spt"

Player.TitleObject {ObjectName} ? On Run LoopCount RestTime Duration TaskName
  Информация о титровальном объекте ( Run = 0,1, 2 -- stopping )
  Например: "Player.TitleObject {Строка1} 1 0 -1 0:01:30.62 0:02:00.00 D:/реклама/утренний блок.spt"

Player.TitleObjectList ? Count {ObjectName1} {ObjectName2} ...
  Список титровальных объектов
  Например: "Player.TitleObjectList 3 {Логотип} {Строка1} {Строка2}"

Shedule.GetNextErrorLine Shedule FromLine ? NextErrorLine
  Позиция следующей ошибки в расписании, либо -1

Shedule.EditId Shedule ? ChangeCount
  Счетчик изменений указанного расписания

Shedule.BlockPositions Shedule ? PositionsList
  Позиции блоков в расписании, через пробел

Shedule.Pause ? 0/1
  Остановлено ли расписание
  Например: "Shedule.Pause 1"

Shedule.Length Shedule ? Lenght
  Количество строк в расписании
  Например: "Shedule.Length 0 257"

Shedule.EditPosition ? Shedule Line
  Позиция редактирования
  Например: "Shedule.EditPosition 0 12"

Shedule.ActiveShedule ? Shedule
  Активное расписание 0/1
  Например: "Shedule.ActiveShedule 1"

Shedule.RunPosition Shedule ? Line
  Позиция исполнения в расписании
  Например: "Shedule.RunPosition 1 12"

Shedule.InsertMode ? 0/1
  Мода "Замена"/"Вставка"
  Например: "Shedule.InsertMode 1"

Shedule.LockRun ? 0/1
  Удержание строки исполнения в зоне видимости
  Например: "Shedule.LockRun 1"

Shedule.Item Shedule Line ? Logo Title Command
  Команда из расписания 
  Logo, Title - 0/1/2 задает соответствующие флаги 0-None/1-Off/2-On
  Command - строка команды, как в файле расписания
  Например: "Shedule.Item 0 5 0 0 movie 0:00:02.00 [2.00] D:\TEMP\Glass.avi"

Shedule.ItemEx Shedule Line ? State Date Time Logo Title Command
  Команда из расписания с состоянием и временем старта
  State - None(0),Loading(1),GlueLoading(2),Ready(3),GlueReady(4),Error(5),Invalid(6),Sealed(7),GlueSealed(8),Play(9)
  Date - 2008-07-21
  Time - 08:00:00.99
  Logo, Title - 0/1/2 задает соответствующие флаги 0-None/1-Off/2-On
  Command - строка команды, как в файле расписания
  Например: "Shedule.ItemEx 0 5 3 2008-07-21 08:00:00.99 0 0 movie 0:00:02.00 [2.00] D:\TEMP\Glass.avi"

Shedule.ItemXML Shedule Line ? Logo Title CommandXML
  Команда из расписания в XML формате
  Logo, Title - 0/1/2 задает соответствующие флаги 0-None/1-Off/2-On
  CommandXML - строка команды в XML формате

Shedule.ItemXMLEx Shedule Line ? State Date Time Logo Title CommandXML
  Команда из расписания в XML формате с состоянием и временем старта
  State - None(0),Loading(1),GlueLoading(2),Ready(3),GlueReady(4),Error(5),Invalid(6),Sealed(7),GlueSealed(8),Play(9)
  Date - 2008-07-21
  Time - 08:00:00.99
  Logo, Title - 0/1/2 задает соответствующие флаги 0-None/1-Off/2-On
  CommandXML - строка команды в XML формате