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

You need to sign in or sign up before continuing.

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.