Вот как у меня:
Пользователь подписыается на события связанные с объектом $dctList['UUID']:
\CPullWatch::Add($UserID, $dctList['UUID']);
Отправляем уведомление всем пользователям при событии связанным с объектом с индентификатором $list_uuid
\CPullWatch::AddToStack($list_uuid,
Array(
'module_id' => 'list',
'command' => 'exchange',
'params' => [
'provocative' => $dctData['head']['UID'],
'list_uuid'=> $list_uuid
]
)
);
загрузка модуля:
BX.loadScript('/bitrix/js/pull/protobuf/protobuf.js', ()=>{
BX.loadScript('/bitrix/js/pull/protobuf/model.js', ()=>{
BX.loadScript('/bitrix/js/rest/client/rest.client.js', ()=>{
BX.loadScript('/bitrix/js/pull/client/pull.client.js',()=>{APP.bitrixreinit._pullinit()});
});
});
});
Подписка на события в методе _pullinit:
// подписываемся на события P&P
BX.addCustomEvent("onPullEvent", function(module_id,command,params) {
if (APP.getConfigParam('uid') == params.provocative) {
//if ('production' != APP.getConfigParam('mode')) console.log('собственное событие пропущено');
return;
}
if ('exchange' == command) {
APP.exchange({basis: 'pull', context: params});
}
});
BX.addCustomEvent("onPullStatus", function(status) {
if ('online' != APP.$store.state.status.push_and_pull
&& 'online' == status) {
// не онлайн сменился на онлайн
//let last_sync_time = APP.$store.state.db.sync.last.time.client || 0
//let now_time = Date.now()/1000
//if (now_time - last_sync_time < 30) {
//
//} else {
//
//}
APP.exchange({basis: 'reconnect'});
}
APP.$store.commit("updateStatus",{key:'push_and_pull',data:status})
});
BX.PULL.start();