Skip to content

Stores & Processes

Andrew Nenashev edited this page Sep 9, 2023 · 4 revisions

Здесь рассказывается про то, как организована связь разных процессов приложения, а также связь всего приложения с OS.

src/CardsStorage/frontend/index.ts

Сервис CardsStorage, инкапсулирующий взаимодействие процесса визуализации с ОС компьютера, на котором запущено приложение.

ipcRenderer отправляет в основной процесс события, которые триггерят код, некоторым образом взаимодействующий с OS (чтение и запись файлов, создание и удаление папок, загрузка картинок и тп).

За методами сюда обращаются vue-компоненты, когда им нужно что-то получить от системы: сохранить набор, загрузить архив с linka.su.


src/CardsStorage/backend/index.ts

Содержит смысловую реализацию методов из cервиса CardsStorage, упомянутые в предыдущем пункте. Фронтендерская версия этого сервиса только посылает события в соседний процесс, а исполняемый код хранится как раз здесь.

Модуль fs для node импортируется и используется именно здесь.


src/store/LINKaStore.ts

Файл с интерфейсом хранилища. Описывает все конфигурируемые поля, которые определяют поведение и внешний вид приложения во время работы.

  • UI colors: primary, secondary, accent
  • KeyMapping: настройки клавиатуры (кнопки на клавиатуре или контроллере, отвечающие за навигацию и выбор)
  • Button: таймаут, по которому срабатывает выбор глазами, активация глазами/мышью/джойстиком, css-свойства кнопки и звук нажатия
  • Editor: формат конфигов, которые описывают внешний вид и поведение редактора наборов. Тип редактируемого набора, его геометрические свойства и прочая конфигурируемая логика
  • Explorer: формат конфигов, которые описывают внешний вид и поведение навигатора по наборам и папкам с наборами.

src/store/index.ts

Файл с реализацией хранилища.

Здесь хранится исходный слепок state и ручки для его обновления. Этот сервис выступает как диспетчер эвентов между процессами приложения и сервисом метрик.

Импортирует уже упомянутый выше frontend-CardService, ipcRenderer и класс Metric, внутри которого содержатся методы для общения с хостом https://metric.linka.su.

mutations

В соответствии с парадигмой 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 допускают дополнительные действия с передаваемыми данными и дополнительную семантику методов.

Некоторые actions объединяют в себе вызов сразу нескольких мутаций, другие - объединяют взаимодействий с frontend-CardStorage. Например, сохраняют на комп или загружают с него новый набор.