Возможен ряд ситуация на стороне клиента, в каждой из которых более пригоден тот или иной сценарий взаимодействия с сервером.
Для выполнения любого из сценариев сеанса рекомендуется следовать алгоритму, описанному далее в "Ходе сеанса синхронизации".
Необходимо запросить снапшот данных в нужном контексте.
Например, при первом запуске приложения потребуется:
- Запросить снапшот глобальных данных.
- Авторизация пользователя.
- Здесь уже может потребоваться запрос разницы по глобальным данным.
- Запросить снапшот личных данных пользователя.
- Запросить снапшот хотя бы одной команды, которая выбрана (пользователем или автоматически) в пользовательском интерфейсе клиента.
Полный снапшот данных уже запрашивался ранее, но после этого пользователь не вносил локальных изменений.
Если дата создания прошлого снапшота не превышает срока давности (см. ограничения), можно запросить разницу. В противном случае необходимо запросить снапшот.
Если есть локальные изменения, значит ранее уже был получен снапшот.
Поскольку внесение изменений пользователем обычно занимает время, полагается, что после получения последнего снапшота на сервере также могли произойти изменения в данных.
-
Необязательно. Если последняя синхронизация по данному контексту была достаточно давно, запросить разницу, выполнить слияние изменений (с участием или без участия пользователя согласно ТЗ для клиента).
Если последняя синхронизация по данному контексту проводилась настолько давно, что запрос разницы уже невозможен, то возникает ситуация, когда необходимо запросить снапшот, и при этом не утратить локальные изменения пользователя.
-
Отправить локальные изменения на сервер.
- Если изменения применены сервером успешно, то запросить разницу. Эта разница будет содержать в том числе и только что отправленные изменения этим же клиентом.
- Если изменения были отклонены, провести анализ ошибок. Ошибки пользователя показать ему согласно ТЗ. Дать возможность пользователю исправить его ошибки. В конце концов потребуется повторная отправка прежних локальных изменений вместе с новыми будущими, либо их откат с помощью запроса снапшота.