Склеенные запросы

Последнее изменение: 02/06/2020 13:36:32

Склеенным, называется запрос вида:

  http://kh.google.com/flatfile?f1-002-i.280+f1-012-i.212+q2-0-q.281&v=1

В приведенном запросе объединены 3 файла: f1-002-i.280, f1-012-i.212, q2-0-q.281. Данный запрос эквивалентен 3-м одиночным запросам:

  http://kh.google.com/flatfile?f1-002-i.280
  http://kh.google.com/flatfile?f1-012-i.212
  http://kh.google.com/flatfile?q2-0-q.281

Количество тайлов в склеенном запросе может быть разным: от 4 в бесплатной версии клиента, и до 10 в версии Pro.

Структура ответа

В ответ на такие запросы клиента, сервер выдаёт ответы-контейнеры следующей структуры:

Delphi code
  1. type
  2.   TSplited = record
  3.     Magic   : Byte;              // идентификатор = $01
  4.     Count   : Byte;              // количество тайлов в контейнере
  5.     Offset  : array of LongWord; // смещение от начала контейнера до n-го тайла
  6.     Data    : array of byte;     // n тайлов, следующие друг за другом
  7.   end;

Размеры тайлов определяются как:

Delphi code
  1. if i = Length(Offset) - 1 then            // для последнего тайла из контейнера
  2.   Size[i] := SplitedTileSize - Offset[i]  // SplitedTileSize - размер контейнера
  3. else                                      // для всех, кроме последнего
  4.   Size[i] := Offset[i+1] - Offset[i];

В случае, если какой-либо тайл на сервере отсутствует, его смещение в контейнере (Offset) указывается равным смещению следующего тайла (т.е. указывается что размер данного тайла равен нулю). И даже, если все запрошенные тайлы отсутствуют, сервер ответит контейнером в котором будут только служебные данные со смещениями для всех тайлов равными размеру контейнера.