167 lines
6.0 KiB
Markdown
167 lines
6.0 KiB
Markdown
|
||
|
||
---
|
||
|
||
|
||
# Общие сведения #
|
||
|
||
Протокол Opal специально разрабатывался с такой целью, чтобы быть максимально простым в использовании как человеку, так и машине. Не смотря на простоту, протокол обладает большой гибкостью и лаконичностью.
|
||
|
||
Описание протокола можно разделить на две части. Такое разделение связано с архитектурой проекта. Тем не менее, формат сообщений универсален.
|
||
|
||
## Формат сообщения ##
|
||
|
||
|
||
Все сообщения строятся по одному шаблону, очень похожему на протокол JSON. В основе выбранного стиля лежит набор пар ключ-значение, которое в большинстве языков программирования представляется в виде ассоциативного массива.
|
||
|
||
В общем случае сообщение выглядит следующим образом - это набор пар ключ-значение, заключенный в фигурные скобки.
|
||
```
|
||
{ тело сообщения }
|
||
```
|
||
|
||
Пример простейшего сообщения:
|
||
```
|
||
{ request = info }
|
||
```
|
||
|
||
## Ключевые слова ##
|
||
|
||
Некоторые из ключей являются специальными словами, жестко установленными, для возможности адекватного общения меду сервером и клиентом.
|
||
|
||
| **Слово** | Краткое описание |
|
||
|:----------|:-----------------|
|
||
| request | запрос какой-либо информации |
|
||
| answer | ответ на запрос |
|
||
| status | статус опрашиваемого процесса |
|
||
| main | секция с описанием параметров модели |
|
||
| algo | секция с описанием алгоритмов-методов модели |
|
||
| header | секция с описанием заголовка таблицы результатов |
|
||
| table | секция с описанием таблицы результатов |
|
||
| comment | комментарий |
|
||
|
||
Теперь более подробно о каждом из ключевых слов.
|
||
|
||
### request ###
|
||
|
||
### answer ###
|
||
|
||
## Типы данных ##
|
||
|
||
# Соединение сервер - задача #
|
||
|
||
## Запрос информации сервером ##
|
||
|
||
Перед запуском задачи для того, чтобы узнать какие параметры нужно передавать для корректного выполнения алгоритма, сервер запускает задачу с ключом -i или --info:
|
||
|
||
`task (-i|--info)`
|
||
|
||
Результатом работы будет набор строк, который описывает все доступные значения для данной задачи. Строки описываются в следующем формате:
|
||
|
||
_name_ = _type_ (choice _list_) (default _value_)
|
||
|
||
<a href='Hidden comment:
|
||
в будущем
|
||
_name_ = _type_ (choice _list_) (default _value_) (check _expr_)
|
||
'></a>
|
||
|
||
В ответе обязательно должна присутствовать секция Main, в которой описываются все параметры модели. Другие секции описывают параметры доступных алгоритмов в задаче и их количество не ограничено.
|
||
|
||
## Передача списка параметров ##
|
||
|
||
## Получение результата ##
|
||
|
||
# Соединение сервер - ГИП #
|
||
|
||
# Пример сессии #
|
||
|
||
```
|
||
// запрос сервера на получение информации о задаче
|
||
{
|
||
request = info
|
||
}
|
||
// ответ клиента-задачи
|
||
{
|
||
answer = ok
|
||
|
||
meta = {
|
||
detailed = true
|
||
}
|
||
|
||
main = {
|
||
size = int default 100
|
||
x = float default 20.0
|
||
y = float default 0.0
|
||
time = period default 00:00 to 24:00 comment twenty-four hours
|
||
}
|
||
|
||
algo = {
|
||
|
||
genetic = {
|
||
method = string choice [std, last] default std
|
||
poplulation = int default 1000
|
||
}
|
||
|
||
bellman = {
|
||
xpart = float partition 0 to 100 by 1
|
||
ypart = float partition 0 to 50 by 0.5
|
||
}
|
||
}
|
||
}
|
||
// запрос сервера на вычисления по указанным параметрам
|
||
{
|
||
request = calculate
|
||
|
||
main = {
|
||
size = 100
|
||
x = 20.0
|
||
y = 5.0
|
||
time = 00:00 to 48:00
|
||
}
|
||
|
||
algo = {
|
||
genetic = {
|
||
method = last
|
||
population = 1200
|
||
}
|
||
}
|
||
}
|
||
// ответ клиента задачи о том, что вычисления начались
|
||
{
|
||
answer = ok
|
||
status = inprogress
|
||
}
|
||
// запрос сервера о статусе вычислений
|
||
{
|
||
request = status
|
||
}
|
||
// ответ клиента-задачи о том, что прошла уже половина вычислений
|
||
{
|
||
answer = ok
|
||
status = inprogress
|
||
percent = 0.50
|
||
comment = 10 минут, полет нормальный
|
||
}
|
||
// снова запрос сервера о статусе
|
||
{
|
||
request = status
|
||
}
|
||
// клиент сообщает, что вычисления завершены, и предоставляет таблицу результатов
|
||
{
|
||
answer = ok
|
||
status = ready
|
||
|
||
header = {
|
||
time = datetime
|
||
x = float
|
||
y = float
|
||
u = float comment management
|
||
}
|
||
|
||
table = {
|
||
00:00 20.0 5.0 0.0
|
||
01:00 18.0 6.0 1.0
|
||
02:00 16.0 7.0 2.0
|
||
//...
|
||
}
|
||
}
|
||
``` |