В этом разделе описаны параметры конфигурации jCjS
<!--
===============================================================
============== Описание полей секции server =================
===============================================================
Обязательные поля (зарезервировано):
port порт WEB-сервера (если указать 0 то будет выделен ОС)
Небязательные поля (зарезервировано):
locale Принудительное указание локали приложению
по умолчанию "ru-RU"
language Принудительное указание языка по умолчанию "ru"
"auto" - Автоматически
(обязательны файлы .qm в директории translations)
termCodec Кодек вывода в терминал - по умолчанию "System"
(актуально в некоторых "старых" ОС UNIX)
logTrsh Уровень выводимых сообщений (по умолчанию 2)
1 - info, 2 - debug, 3 - trace, 4 - trace+
(максимальный уровень - 8)
logFilterSec Фильтр, сколько времени не выводить повторные сообщения
logMaxLenQueue Величина накопительной емкости для вывода лога в WEB интерфейсе
defFiles Файлы, отдаваемые сервером по умолчанию
compressor протокол http(s): Включить сжатие содержимого
===============================================================
============== Описание полей секции auth ===================
===============================================================
type тип используемой авторизации
"jcjs" - стандартная авторизация
"os" - с учетными записями ОС или Домена (только в Windows)
baseAuthUserName Логин для базовой авторизации (если type = "jcjs")
baseAuthUserPass Пароль для базовой авторизации (если type = "jcjs")
===============================================================
===============================================================
============== Описание полей секции ssl ====================
===============================================================
enabled Разрешить шифрованное соединение https
dir директория, в которой лежит приватный ключ и сертификат
privateKeyPass пароль на закрытый ключ SSL шифрования
ignoreSelfSignSsl разрешать использование самоподписанного сертификата
===============================================================
============== Описание полей секции folders ================
===============================================================
stat Путь к каталогу со статичным контентом
data Путь к каталогу с данными, доступ к которым возможна из JS
logs Каталог для лог-файлов
stuff Путь к каталогу с приложениями jCjS
inc Список include каталогов для JS
(если скрипт не будет найден относительно <post defDirs/>
поиск будет продолжен по этим директориям)
По умолчанию ../stuff/include/ ../stat/js/
===============================================================
-->
<server
port = "8080"
logTrsh = "3"
logFilterSec = "360"
termCodec = ""
locale = "ru-RU"
language = "ru"
logMaxLenQueue = "24"
defFiles = "index.html index.htm"
compressor = "true"
>
<auth
type = "jcjs"
baseAuthUserName = ""
baseAuthUserPass = ""
/>
<ssl
enabled = "false"
ignoreSelfSignSsl= "true"
dir = "../etc/ssl"
>
<!-- описание портов и привязанных к ним сертификатов -->
<!-- если ssl.enabled = false, то поддержки шифрования везде отключено -->
<!-- если cert.enabled = false, то поддержки шифрования на этом порту отключено -->
<!-- если cert.cert_name - имя сертификата в каталоге cert.dir -->
<!-- если cert.port == server.port то эти настройки коснуться главного порта -->
<cert port = "8080"
enabled = "false"
dir = "../etc/ssl"
cert_name = "jcjs"
privateKeyPass = ""
/>
<cert port = "8443"
enabled = "false"
dir = "../etc/ssl"
cert_name = "localhost"
privateKeyPass = ""
/>
</ssl>
<folders
stat = "../stat/"
data = "../data/"
logs = "../logs/"
stuff = "../stuff/"
inc = "../stuff/include/ ../stat/js/"
/>
</server>
<!--
===============================================================
============== Описание полей секции post ===================
===============================================================
Обязательные поля (зарезервировано):
objectName Имя поста (по умолчанию post_1, post_2, post_3 .... )
description Описание поста
portDebug Порт удаленной отладки (в текущей версии не реализовано полностью)
debug Включение локальной отладки
Альтернативное включение отладки: Добавить в первую строку init.js
строку debug=true;
profiling Включение режима профилирования поста. Внимание! функционал существенно
снижает производительность и должен использоваться только для
оптимизации при разработке. Также не рекомендуется
пользоваться Web-интерфейсом при включеном профилировании
Секция handlers Описывает скрипты jCjS, с логикой работы поста
init скрипт инициализации поста
cmd скрипт ответа http
end скрипт завершения
ВНИМАНИЕ! В файле обязательно вызвать post.finished();
ВНИМАНИЕ! Если не указывать скрипты cmd и/или end, то будут выполнены
дефолтные скрипты из дериктории stuff/include
Пользовательские поля используется в контексте(в скрипте) поста
могут принимать различные имена(a-zA-Z_)
могут принимать значения (от чисел до строк)
Пример:
<threshold value="10" warn="15" alarm="20" />
<lang_alarm value="Внимание тревога" />
<param countPorts=3 port_1="COM1" port_2="COM2" port_3="COM3" />
в скрипте можно обратиться к этим ресурсам
var val=threshold.value + threshold.warn + threshold.alarm;
var str=lang_alarm.value;
Внимание,
удобно обращаться к переменным обращаясь к ним как к именованному массиву
var ports = [];
for(var i=0; i<param.countPorts; i++)
{
ports[i] = param["port_"+i];
}
Есть возможность объявления объектов JS и функций в настройках поста
<someObject
script = "{ x:2.3, y: 1.2 }"
/>
<numbers
script = "[['curly', 3], [2, 'dede'], [3, 'myrli']]"
/>
<someFunc
script = "function() { return 20; }"
/>
<params a="fdfd" b="dededde">
<app a="a1" b="a2"/>
<ar a="a1" b="a2"/>
</params>
Обращение к этим объектам также через пространство имени post
post.someObject
post.numbers
post.someFunc()
post.params // { a: "fdfd", b: "dededde",
app: { a: "a1", b:"a2"},
ar: { a: "a1", b:"a2"}
}
post.params.a // fdfd
post.params.app.a // a1
post.params.ar.b // a2
Вывести в лог все объекты и параметры post
post.log( jsext.stringify(post, 0, 2) )
Можно объявить функцию и сразу ее выполнить
<myFunc
script = "function() {
post.evalScript('null_modem_mirror.js');
var nullModem = new NullModem(post.real_port, post.null_modem);
return nullModem;
}"
eval = "var nm = post.myFunc();
console.log(nm);"
/>
Равноценно следующей записи
<myFunc
eval = "
post.evalScript('null_modem_mirror.js');
var nm = new NullModem(post.real_port, post.null_modem);
console.log(nm);"
/>
с одним различием - не будет создан объект post.myFunc
===============================================================
-->
<post
objectName = "postsTable"
description = "Список постов"
portDebug = "0"
debug = "0"
profiling = "1"
defDirs = "stuff@postsTable"
>
<handlers
cmd = "cmd.js"
init = "init.js"
end = "end.js"
/>
</post>
<hide>
<!-- =============================================================== -->
<!-- ============= Пост можно объявить и более лаконично =========== -->
<!-- =============================================================== -->
<post defDirs="stuff@postsTable" config="jcjs_postTable.xml"></post>
</hide>
Напомню, секция server объявляется один раз,
секций post может быть несколько