ClientMessageBridge. Механизм сохранения истории сообщений
Glossary Item Box
Общие положения
В идеальном случае на момент публикации сообщения внутри системы присутствует обработчик (рис. 1).
Рис. 1. — Идеальный процесс взаимодействия
Но возможна ситуация, когда обработчик еще не загружен (рис. 2).
Рис. 2. — Процесс взаимодействия с отсутствующим обработчиком
Чтобы не потерять необработанные сообщения, реализована возможность ожидания появления слушателя перед публикацией. В случае отсутствия слушателя, сообщения сохраняются в истории. Перед публикацией каждого сообщения проверяется наличие слушателя. Когда слушатель загружен, ему публикуются все сохраненные сообщения в порядке их получения. После публикации сообщений из истории вся история очищается.
Пример конфигурирования обработки сообщения с сохранением в историю
Для реализации описанной возможности необходимо, добавляя новый конфигурационный объект, указать в нем признак isSaveHistory равным true.
init: function() { // Вызов родительского метода init(). this.callParent(arguments); // Добавление нового конфигурационного объекта в коллекцию конфигурационных объектов. this.addMessageConfig({ // sender — имя сообщения, получаемого по WebSocket. sender: "OrderStepCalculated", // messageName — имя сообщения, с которым оно будет разослано внутри системы. messageName: "OrderStepCalculated", // isSaveHistory — признак, указывающий на необходимость сохранения истории. isSaveHistory: true }); },
Механизм сохранения истории
Класс ClientMessageBridge является наследником абстрактного класса BaseMessageBridge, в котором присутствуют абстрактные методы saveMessageToHistory, getMessagesFromHistory, deleteSavedMessages. В ClientMessageBridge сохранение истории сообщений реализовано с использованием localStorage браузера, а реализация абстрактных методов позволяет манипулировать данными в хранилище. Для работы с localStorage используется класс Terrasoft.LocalStore.
Методы:
- saveMessageToHistory — обеспечивает сохранение нового сообщения в коллекции сообщений;
- getMessagesFromHistory — обеспечивает получение массива сообщений по передаваемому имени;
- deleteSavedMessages — удаляет все сохраненные сообщения по передаваемому имени.
В случае если есть потребность реализовать работу с другим типом хранилища, необходимо создать наследника класса BaseMessageBridge и реализовать все абстрактные методы (saveMessageToHistory, getMessagesFromHistory, deleteSavedMessages).