# Команды сервера Numass # ### Адрес сервера ### Адрес сервера в локальной сети по-умолчанию `192.168.111.1`, адрес сервера в сети института `172.20.75.178` ### Хранение данных ### Хранение данных осуществляется в файловом репозитории `/home/trdat/numass-repo`. Считается, что все фалы репозитория с названиями, начинающимися с `@` являются системными. ### Формат сообщения ### Сообщение содержит иерархически организованный текст в формате JSON (meta), а также может опционально содержать данные в бинарном формате (data). ## Команды ## Сообщение содержит два поля, определяющих его содержание: поле типа сообщения `type` и поле типа действия `action`. Поддерживаются следующие типы команд: - `numass.storage` - Загрузка и получение данных из репозитория - `numass.state` - Получение или изменение состояния текущего сеанса (напряжение, токи, и т. д.) - `numass.event` - Отправка сообщения по текущему сеансу - `numass.control` - Отправка управляющей команды для оборудования - `numass.run` - получение или изменение параметров текущего сеанса #### numass.storage #### Обращение к репозиторию текущего сеанса. #### numass.state #### Считывание или изменение состояния для текущего сеанса. Доступны следующие действия: - `get` - считать состояние (или состояния) - *Not tested* *Запрос:* ``` { "type": "numass.state", "action": "get", "name": [ "", "", ... ] } ``` *Ответ*: ``` { "type": "numass.state.get.response", "state": [ { "name": "", "value": }, { "name": "", "value": }, ... ] } ``` В запросе вместо массива может стоять простая строка `state: "<>"`. В этом случае в ответе вместо массива будет один JSON объект. - `set` - установить состояние (или состояния) - *Not tested* *Запрос:* ``` { "type": "numass.state", "action": "set", "state": [ { "name": "", "value": }, { "name": "", "value": }, ... ] } ``` или ``` { "type": "numass.state", "action": "set", "name": "", "value": } ``` *Ответ*: ``` { type: "numass.state.get.response", state: [ { "name": "", "value": }, { "name": "", "value": }, ... ] } ``` Если запрашивалось изменение единичного состояния, то возвращается единичный JSON объект. #### numass.event #### *Not implemented* #### numass.control #### *Not implemented* #### numass.run #### Считываие или изменение текущего сеанса. Доступны следующие действия: - `get` - Считать конфигурацию текущего сеанса *Запрос:* ``` { "type": "numass.run", "action": "get", } ``` *Ответ:* ``` { "type": "numass.run.response", "run": { "path": "", "meta": { } } } ``` - `start` - Начать новый сеанс и обозначить его как текущий *Запрос:* ``` { "type": "numass.run", "action": "start", "path: "", "meta": { } } ``` *Ответ:* То же, что и в `get`. - `reset` - Сбросить настройки текущего сеанса Эквивалентно `get` с пустым путем или `default` в качестве пути. Дополнительных аргументов нет ## Протокол dataforge-envelope ## Для обмена сообщениями может использоваться протокол dataforge-envelope (типа message). В этой вариации протокола запрещено автоматическое определение длинны метаданных и данных, в качестве метаданных используется JSON в кодировке UTF-8. Используются следующие атрибуты конверта: version = 1; type = 33; metaType = 1; metaEncoding = 0; Пакет с `dataType = 0xffffffff` считается терминирующим пакетом, закрывающим соединение. Порт сервера для работы по этому протоколу по умолчанию `8335`. ## Протокол Http ## Пока не реализован. > Written with [StackEdit](https://stackedit.io/).