opal/wiki/Protocol.wiki
anwinged 7a22017dae
2011-12-20 18:27:45 +00:00

166 lines
6.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#summary Протокол Opal
<wiki:toc max_depth="2" />
----
= Общие сведения =
Протокол 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_)
<wiki:comment>
в будущем
_name_ = _type_ (choice _list_) (default _value_) (check _expr_)
</wiki:comment>
В ответе обязательно должна присутствовать секция 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
//...
}
}
}}}