An rpc-engine subclass that makes doing pub-sub things super easy.
Making a remote procedure call to an EventEmitter
's on
or removeListener
methods doesn't really do what you want.
JSON-RPC style notifications + wrappers for on
and removeListener
. See the API section below.
var Rpc = require('rpc-events')
var a = new Rpc()
var b = new Rpc()
a.send = b.receive
b.send = a.receive
a.subscribe('event', handler)
function handler (evt) {
console.log(evt) // => 42
a.unsubscribe('event', handler)
}
b.getInterface().emit('event', 42)
$ npm run test
See rpc-engine for the superclass API.
Same as superclass, but iface
must implement on
and removeListener
(see EventEmitter
API).
Subscribe to a remote event.
eventName
AString
.handler
AFunction
.onerror
AFunction
. Will be called if the remote side removes the interface before the local side has calledunsubscribe
.
Unsubscribe from a remote event.
eventName
AString
.handler
AFunction
.
This method will reinform the remote about the currently active subscriptions. This is useful for implementing persistent connections where transports may come and go transparently.
This method extends the superclass implementation to ensure all local and remote subscriptions are torn down before cancelling outstanding requests.
These methods are invoked by rpc.close
but can be useful independently. Closing the local side removes everything created by calls to rpc.subscribe
, and closing the remote side removes all subscriptions created by the remote peer. rpc.closeRemote
is useful in situations where you plan to reopen the connection at some point without losing track of your subscriptions, but can't be sure if the remote plans to do the same.
- 2.1
- Add
open
method - Split
close
out into its local and remote components
- Add
- 2.0
- rpc-engine@6.0.0
- Alter API to support scenario where remote side removes the interface a local subscription is associated with.
- Try to ensure local behavior is correct even if remote side misses messages or receives them out of order.
- 1.0
- First release
MIT