-
Notifications
You must be signed in to change notification settings - Fork 4
Stores & Processes
Здесь рассказывается про то, как организована связь разных процессов приложения, а также связь всего приложения с OS.
Сервис CardsStorage
, инкапсулирующий взаимодействие процесса визуализации с ОС компьютера, на котором запущено приложение.
ipcRenderer отправляет в основной процесс события, которые триггерят код, некоторым образом взаимодействующий с OS (чтение и запись файлов, создание и удаление папок, загрузка картинок и тп).
За методами сюда обращаются vue-компоненты, когда им нужно что-то получить от системы: сохранить набор, загрузить архив с linka.su.
Содержит смысловую реализацию методов из cервиса CardsStorage
, упомянутые в предыдущем пункте. Фронтендерская версия этого сервиса только посылает события в соседний процесс, а исполняемый код хранится как раз здесь.
Модуль fs
для node импортируется и используется именно здесь.
Файл с интерфейсом хранилища. Описывает все конфигурируемые поля, которые определяют поведение и внешний вид приложения во время работы.
-
UI colors
: primary, secondary, accent -
KeyMapping
: настройки клавиатуры (кнопки на клавиатуре или контроллере, отвечающие за навигацию и выбор) -
Button
: таймаут, по которому срабатывает выбор глазами, активация глазами/мышью/джойстиком, css-свойства кнопки и звук нажатия -
Editor
: формат конфигов, которые описывают внешний вид и поведение редактора наборов. Тип редактируемого набора, его геометрические свойства и прочая конфигурируемая логика -
Explorer
: формат конфигов, которые описывают внешний вид и поведение навигатора по наборам и папкам с наборами.
Файл с реализацией хранилища.
Здесь хранится исходный слепок state и ручки для его обновления. Этот сервис выступает как диспетчер эвентов между процессами приложения и сервисом метрик.
Импортирует уже упомянутый выше frontend-CardService, ipcRenderer и класс Metric, внутри которого содержатся методы для общения с хостом https://metric.linka.su.
В соответствии с парадигмой vuex - мутации это просто сеттеры без лишней логики. Небольшой нюанс в том, что некоторые мутации, хоть и не делают ничего со своими аргументами, еще запускают side-effect-ы: dispatch события в сервис метрик или в основной процесс.
Мутации, которые регистрируют событие для метрики методом Metric.registerEvent
- ui_exitButton
- button_enabled
- button_eyeSelect
- button_eyeActivation
- button_joystickActivation
- button_keyboardActivation
- button_clickSound
- interface_outputLine
Мутация button_timeout
- отправляет сообщение через основной процесс в TobiiProcess и обновляет в нем timeout.
На нескольких полях висит отслеживание изменений через vuex plugin. Их обновленные значения сохраняются в аналог localStorage, которое у электрона называется electron-store.
Значения из electron-store читаются и перетирают исходный слепок state-а при инициализации хранилища, когда приложение запускается.
В соответствии с парадигмой стейт-менеджмента, actions допускают дополнительные действия с передаваемыми данными и дополнительную семантику методов.
Некоторые actions объединяют в себе вызов сразу нескольких мутаций, другие - объединяют взаимодействий с frontend-CardStorage. Например, сохраняют на комп или загружают с него новый набор.