Documentation

Push and Pull

Module allows to organize transport to send instant commands. Implementation of this feature as a separate module allows for any module (including modules of the third party developers) to send instant motifications and messages to clients via API.

Connecting the module:

if (!CModule::IncludeModule('pull'))
   return false;

Also, module dependency must be registered for the Push and Pull module. Registration of dependency handler:

RegisterModuleDependences("pull", "OnGetDependentModule", "your_module", "CYourModulePullSchema", "OnGetDependentModule" );

Events and push-notifications are sent to list servers in the page epilogue. If you send events in ajax-handlers, you need to use CMain::FinalActions() at the handler's finish.

Example of the class code

class CYourModulePullSchema
{
    public static function OnGetDependentModule()
    {
        return Array(
            'MODULE_ID' => "your_module",
            'USE' => Array("PUBLIC_SECTION")
     );
     }
}

To handle the commands sent via PHP the following JS code must be used in the layout:

Trap for desktop app pages (all events, except online events):

BX.addCustomEvent("onPullEvent-moduleName", BX.delegate(function(command,params){
   console.log('Events of moduleName', command, params);
}, this));

Trap for mobile app pages for module app pages (all events, except online events):

BX.addCustomEvent("onPull-moduleName", BX.delegate(function(data){
    console.log('Events of moduleName', data.command, data.params);
}, this));

Note: don't forget to change the name of your module in the "moduleName" example.

Example of code to handle PHP classes of the module (Pull, Pull Shared, Pull Watch):

BX.addCustomEvent("onPullEvent-main", function(module_id,command,params) {
    if (command == 'check')
    {
        console.log('Command from module MAIN - its work!');
    }
});

In the example we are subscribing to the command receiving event (onPullEvent-moduleName). ModuleName - is the name of your module, for example - main. Then we receive 'command' and 'params' in the function that we specified when sending a command via PHP. After that, we are processing our commands according to our own logic.

If your logic requires collecting all events, then the format will be a little different: (available on any version of pull)

Trap for desktop app pages (all events except online events):

BX.addCustomEvent("onPullEvent", BX.delegate(function(module_id,command,params){
   console.log(module_id, command, params);
}, this));

Trap for mobile app pages (all events except online events):

BX.addCustomEvent("onPull", BX.delegate(function(data){
    console.log(data.module_id, data.command, data.params);
}, this));

Example of code to handle PHP classes of the module (Pull, Pull Shared, Pull Watch):

BX.addCustomEvent("onPullEvent", function(module_id,command,params) {
    if (module_id == "test" && command == 'check')
    {
        console.log('Work!');
    }
});

In this example we are subscribing to the command receiving event (onPullEvent) and receive module_id command, params in the function, which we have specified when sending commands via PHP. Then we process our commands with account of your logic.

Notes:
  • To retrieve data about online events, use the [link=6657716]onPullOnlineEvent[/link] event.
  • It's preferable to use event handlers for specific modules, instead on a handler for all events. Such format will be more efficient.



User Comments

User comments are not part of official documentation. Use information provided by other users in the comments at your own risk.

The User Comments section is not to be used as a feature discussion board. Only registered users can post comments. Your comment will be visible once it has been approved by the moderator.
© «Bitrix Inc.», 2001-2021, «Bitrix Inc.», 2021