Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
W
wiki
  • Project
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Иван Кубота
  • wiki
  • Wiki
  • Events

Events

Last edited by Zibx Aug 04, 2017
Page history

Как вы помните из страницы про логирование системные события могут передавать параметры первым не строчным элементом.

/* Тэги задаются как #camelCaseWord и служат для дальнейшей фильтрации сообщений в логгере */
/** ВАЖНО: системные события должны содержать в себе настоящий объект с данными для последующей обработки */
console.log('#money, #input', {amount: 20})

Существует системный сервис EventsService который занимается тем что слушает поток логов и оповещает подписчиков о событиях.

Для теста я заставил биллВалидатор слать сообщения о внесённой сумме каждые 500мс, а сообщение об открытии кассеты - каждые 5 секунд.

И вот пример кода который показывает как этим пользоваться на примере простейшего сервиса инкасации:

// Просим Домен запустить сервис Events. Сервис всегда является синглтоном. 
// Если он уже запущен - вернётся ссылка на уже запущенный.
Domain.SvcDomain.startService('Events', function (svc) {
    // переменная в которой мы будем считать сумму внесённых денег
    var count = 0;
    // сервис events реализует метод подписки subscribe, который принимает на вход объект
    svc.subscribe({
        // содержащий ключ listen в который можно передать подписчика объектом или массив подписчиков
        listen: [{
            // event передаётся первый аргумент callback функции. Можно не указывать если не требуется разделение
            event: 'billInsert',
            // NameSpace логирования
            namespace: 'Devices.BillValidator',
            // тэги по которым фильтруются сообщения. 
            // Несколько элементов работают как AND, то есть должны присутствовать одновременно все.
            // если не указать, то будут падать все сообщения из NameSpace
            filter: ['bill']
        }, {
            event: 'incasation',
            namespace: 'Devices.BillValidator',
            filter: ['incasation']
        }],
        // поле fn - callback функция которая будет вызвана при соответствии сообщения фильтрам
        fn: function (
            // поле event подошедшего подписчика
            event, 

            /* второй аргумент - первый не строчный элемент из console.log
               Осторожно, это накладывает некоторое ограничение логирование хлама в системных событиях */
            info,

            // Идущие далее аргументы несут в себе дополнительную информацию и обычно не будут использованы.
            // третий - объект со всеми найденными тегами в текущем сообщении (тэги - ключи объекта)
            matched,

            // четвёртый - объект подписчика из listen, прошедший фильтрацию. Можно использовать для хранения состояния.
            listener,

            // пятый - весь LogObject. Содержит всю информацию связанную с текущим сообщением. Лучше не использовать.
            logObject
        ) {
            // this - весь подписавшийся объект

            if(event === 'billInsert') {
                /* если event подписчика соответствет billInsert -> 
                прибавляем к сумме amount из первого не строчного элемента */
                count += info.amount;
            }else if(event === 'incasation'){
                /* если же произошла инкасация - обнуляем сумму */
                console.log('#incasationService #moneyStackEmpty', count);
                count = 0;
            }
            console.log('#incasationService #amount', count);
        }
    });
});
Clone repository
  • Dialog
  • Event bus (ext. doc)
  • External (extended) documentation
  • Facerecognition
  • Logging (ext. doc)
  • Objects
  • Quokkascript crash course
  • Recfaces camera recognition services
  • Control_back
  • Control_forward
  • Control_main_menu
  • Control_primary_account_number
  • Control_to_main_menu
  • Devices
  • Events
More Pages
×

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.