Requesting Subscription

The webos-service module supports subscription feature. You can send a subscription request to another service, for services that support it. For more details about the webos-service module, see webos-service Library API Reference.

Client-side Subscriptions

On the client (requester) side, subscriptions are handled by the Subscription object. In most cases, you merely need to do something like this:

var Service = require('webos-service');
var service = new Service("com.mycom.test");
var sub = service.subscribe("luna://com.webos.service.connectionmanager/getStatus", {"subscribe": true});
sub.on("response", function(message) {
    //do something with the subscription

Service-side Subscriptions

The webos-service library offers some built-in support for services that would like to support subscriptions. If a method has a cancel handler, then it’s considered to be subscribable. The library automatically tracks subscription requests, registering them with System Bus to ensure that cancel event is delivered properly. Your request handler for the method should check the message’s isSubscription property, to determine whether a subscription has been requested. In most cases, you’ll want to add subscribed messages to an array or object hash, in order to keep track of them when it’s time to update them later. Here’s a partial example:

var subscriptions = {};

var heartbeat = service.register("heartbeat2");
heartbeat.on("request", function(message) {
    message.respond({event: "beat"}); // initial response
    if (message.isSubscription) {
        subscriptions[message.uniqueToken] = message; //add message to "subscriptions"
        if (!interval) {
            createInterval(); // launch some async process
heartbeat.on("cancel", function(message) {
    delete subscriptions[message.uniqueToken]; // remove message from "subscriptions"
    var keys = Object.keys(subscriptions);
    if (keys.length === 0) { // count the remaining subscriptions
        console.log("no more subscriptions, canceling interval");
        clearInterval(interval); // don't do work in the background when there are no subscriptions
        interval = undefined;