# Методы

# Методы плеера

Плеер Cubic Vision вызывает методы встроенного веб контента для взаимодействия с ним

# Событие готовности

Необходимо дождаться события onWebContentReady, прежде чем можно будет вызывать методы у window.WebContent

# Начать проигрывание

При появлении элемента в контейнере начать воспроизведение

startPlay(): void
window.WebContent.startPlay();

# Приостановить проигрывание

При скрытии элемента в контейнере закончить воспроизведение

stopPlay(): void
window.WebContent.stopPlay();

# Установить состояние

Используется для уведомления веб контента о смене состояния виджета 'Кассовый чек'

setState(channelName: string, state: string | object): void
  • channelName - канал данных: 'MagnetCashbox' | 'ApiRequest' и тд
  • state - JSON строка или объект js с текущим состоянием

# Уведомить об изменении файлов виджета Folder play

Используется для уведомления веб контента о изменении файлов виджета 'Folder play'

notifyFolderPlayUpdate(dirPath: string): void
  • dirPath - путь к папке с файлами виджета 'Folder play'

# Уведомить об изменении переменных плеера

Используется для уведомления веб контента о изменении переменных

notifyVarsChanged(vars: string): void
  • vars - JSON строка следующего формата "[{ "name": "var1", "value": "124:2" }]"
window.WebContent.notifyVarsChanged('[{ "name": "var1", "value": "124:2" }]');

# Создание событий для веб контента

emit(jsonData: string): void
  • jsonData это { type: string, payload: any }
window.WebContent.emit('{ "type": "example", "payload": null }');

# Список событий:

  • Сканирование:
    '{ "type": "scan", "payload": { "barcode": "8005286025879" } }'\
  • Уведомление о статусе загрузке:
    '{ "type": "download-info", "payload": { "processedCount": 3, "allCount": 10 } }'

# Методы веб контента

Встраиваемый в Cubic Vision веб контент может использовать данные методы для более удобной разработки связи с плеером. Методы библиотеки являются надстройкой над реализуемыми плеером интерфейсами. Главная цель - повторное переиспользование кода в веб проектах.

Установка библиотеки:
npm i vision-embedded-web

# Работа с хранилищем плеера

import { playerStoradge } from 'vision-embedded-web';

playerStoradge.get
Получить распарсенные данные от плеера

const parsed = await playerStoradge.get('web-project1');
console.log(parsed); // null если нет в сторе

playerStoradge.getJSON
Получить JSON данные от плеера

const json = await playerStoradge.getJSON('web-project1');
console.log(json); // 'null' если нет в сторе

playerStoradge.set
Сохранить данные, работающие с JSON.stringify на плеере

const key = 'web-project1';
await playerStoradge.set(key, {
  name: 'Ann',
  age: 30,
});
const parsed = await playerStoradge.get(key);
console.log(parsed); // { name: 'Ann', age: 30 }

playerStoradge.setJSON
Сохранить JSON данные на плеере

const key = 'web-project1';
await playerStoradge.setJSON(
  key,
  JSON.stringify({
    name: 'Ann',
    age: 30,
  }),
);
const parsed = await playerStoradge.get(key);
console.log(parsed); // { name: 'Ann', age: 30 }

playerStoradge.getVar
Получить значение переменной плеера

const var1Value = await playerStoradge.getVar('var1');
console.log('var1 value', var1Value);

# Переход между сценами

import { playerScenes } from 'vision-embedded-web';

playerScenes.goToById
Изменить сцену на плерее на указанную (по id)

playerScenes.goToById(1); // Плеер перейдёт на сцену с id 1

playerScenes.goToPrevious
Перейти на предыдущую сцену. Без зацикливания, только на одну сцену назад.

playerScenes.goToById(1); // Плеер перейдёт на сцену с id 1
playerScenes.goToById(2); // Плеер перейдёт на сцену с id 2
playerScenes.goToPrevious(); // Плеер вернётся на сцену с id 1
playerScenes.goToPrevious(); // Плеер останется на сцене с id 1.

# Логирование

Выводит логи на консоль и записывает в файл логов плеера за текущий день.

import { playerLogger, setCleanConsole } from 'vision-embedded-web';

// Если происходит слежение за логами из консоли и вызываются методы playerLogger
// То нужно установить для vision-embedded-web console, которая не будет вызывать его
// Необходимо чтобы предотвратить бесконечный цикл
// setCleanConsole(console)

playerLogger.debug('Tick 1');
playerLogger.info('Get data from player', {
  name: 'Ann',
  age: 30,
});
playerLogger.error('Error', new Error('Test Error'));
playerLogger.warning('Deprecated method call');

# Хуки плеера

import { playerHooks, webContentEvent } from 'vision-embedded-web';

// Создание интерфейса window.WebContent для плеера
playerHooks.createInterface();

playerHooks.registerStartPlay(() => {
  console.log('Start play');
});

playerHooks.registerStopPlay(() => {
  console.log('Stop play');
});

type State = {
  name: string;
  age: number;
};
playerHooks.registerSetState((channelName: string, state: State) => {
  console.log('Set state', channelName, state);
});

playerHooks.registerSetState((channelName: string, state: State) => {
  console.log('Set state', channelName, state);
  // Очистить предыдущее состояние, чтобы registerSetState мог сработать на тех же данных
  playerHooks.clearPrevState();
});

playerHooks.registerFolderPlayUpdate((dirPath: string) => {
  console.log('Folder play updated', dirPath);
});

playerHooks.registerVarsChanged((vars) => {
  console.log('Vars changed', vars);
});

playerHooks.registerVarChanged((varName, varValue) => {
  console.log(`Var changed name: ${varName}, value: ${varValue}`);
});

webContentEvent.on((event) => {
  console.log(`On web content event`, event);
  if (event.type === 'scan') console.log('Scan event', event.payload.barcode);
});

// Вызвать в конце, для уведомления плеера о готовности к работе
playerHooks.notifyAboutRegisterEnd();

# Приложение

import { playerApp } from 'vision-embedded-web';

# Файловая система

import { playerFilesystem } from 'vision-embedded-web';

# Контейнеры

import { playerContainers } from 'vision-embedded-web';

# Загрузка файлов

import { playerDownload } from 'vision-embedded-web';

# Клавиатура

import { playerKeyboard } from 'vision-embedded-web';