6.0 KiB
Общие сведения
Протокол 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)
В ответе обязательно должна присутствовать секция 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
//...
}
}