2.1.0 • Published 8 years ago

dual-broadcast v2.1.0

Weekly downloads
2
License
MIT
Repository
github
Last release
8 years ago

Broadcaster for dual-protocol Build Status

Fan-out dual-protocol messages.

Construct a broadcasting domain

dual-protocol domains may be extended with the dual-broadcast module:

var dual = require('dual-protocol').use(require('dual-broadcast'));

Domains with this extension can create broadcast objects:

var domain = dual();
var broadcaster = domain.broadcast(['b']);

Here we've provided a specific mount point for the broadcaster at ['b']. newListener and removeListener events will be emitted below that endpoint. By default, the broadcaster is mounted at ['broadcast'].

Register a broadcast recipient

To register a mount point ['client', xxxxx] as potential recipient of broadcasts:

broadcaster.register(['client', xxxxx]);

A map of subscriptions is created for each client. The subscriptions will be removed when the ['disconnect', 'client', xxxx] event is emitted on the domain.

Subscribe a registered client to a broadcast channel

To subscribe the registered ['client', xxxxx] to the broadcast point ['bbc', 'eight']:

	broadcaster.subscribe(['client', xxxxx], ['bbc', 'eight']); 

The registered client ['client', xxxxx] would now receive broadcasts from ['bbc', 'eight'].

Broadcasting

Broadcast a message to every subscribed recipient by

broadcaster.send(['bbc', 'eight'], 'hello', { optional: 'metadata' });

All subscribers would receive a message from ['bbc', 'eight'] with body 'hello', and the given dualapi options.

Unsubscribing

Broadcast clients may be unsubscribed from specific subscriptions:

broadcaster.unsubscribe(['client', xxxxx], ['bbc', 'eight']);

Disconnecting

A client is unsubscribed from all subscriptions, and removed as a potential subscription host, when the domain emits a disconnect event:

domain.send(['disconnect', 'client', xxxxx]);

Auto-registering clients

Clients may be automatically registered on ['connect', '**'] events by using the autoregister function.

broadcaster.autoregister(['client', '*']);
domain.send(['connect', 'client', 'zzz']);

At this point, ['client', 'zzz'] would be registered, as would any other client matching ['client', '*'] when they connect.

newListener events

When a subscriber is added to a broadcast channel, the domain emits a newListener event

domain.mount(['b', 'newListener'], function (body, ctxt) {
   console.log(body.join('/'), ' is now a subscriber to ', ctxt.from.join('/'));
});

New subscribers on specific broadcast channels are are emitted below the newListener endpoint:

domain.mount(['b', 'newListener', 'bbc', 'eight'], function (body, ctxt) {
   console.log(body.join('/'), ' is now a subscriber to ', ctxt.from.join('/'));
});

removeListener events

When a subscriber is removed from a broadcast channel, either by unsubscribe or disconnecting, the domain emits a removeListener event

domain.mount(['b', 'removeListener'], function (body, ctxt) {
   console.log(body.join('/'), ' is no longer a subscriber to ', ctxt.from.join('/'));
});

Subscribers leaving a specific broadcast channel are emitted below the removeListener endpoint:

domain.mount(['b', 'removeListener', 'bbc', 'eight'], function (body, ctxt) {
   console.log(body.join('/'), ' is no longer a subscriber to ', ctxt.from.join('/'));
});
2.1.0

8 years ago

2.0.0

8 years ago

1.0.0

9 years ago

0.2.1

9 years ago

0.2.0

9 years ago

0.1.1

9 years ago

0.1.0

10 years ago