Stability: 1 - Experimental
Implementation of a membrane for Tiny Actor Run-Time in JavaScript.
An implementation of a membrane.
To run the below example run:
npm run readme
"use strict";
var membrane = require('../index.js');
var tart = require('tart');
var sponsor = tart.minimal();
var aliceReport = function aliceReport(charlie) {
return function aliceReportBeh(message) {
var alice = this.self;
console.log('alice received response from charlie');
console.log('message.alice === alice:', message.alice === alice);
console.log('message.charlie === charlie:', message.charlie === charlie);
};
};
var aliceBeh = function aliceBeh(message) {
var alice = this.self;
// send charlie everything alice knows
message.charlie({alice: alice, charlie: message.charlie});
this.behavior = aliceReport(message.charlie);
};
var charlieBeh = function charlieBeh(message) {
var charlie = this.self;
// send alice everything charlie knows
message.alice({alice: message.alice, charlie: charlie});
console.log('charlie received message from alice');
console.log('message.charlie === charlie:', message.charlie === charlie);
};
var alice = sponsor(aliceBeh);
var charlie = sponsor(charlieBeh);
var membraneBehs = membrane.behaviors();
var revokeMembrane = sponsor(membraneBehs.revokeBeh);
var charlieProxyBeh = membraneBehs.proxy(charlie);
var charlieProxy = sponsor(charlieProxyBeh);
// get alice to send message to charlie and report a response
alice({charlie: charlieProxy});
// alternatively, membrane factory pattern can be used
var membraneFactoryCaps = membrane.factory(sponsor);
var dennis = sponsor(function () {});
var dennisProxy1 = membraneFactoryCaps.proxy(dennis);
var dennisProxy2 = membraneFactoryCaps.proxy(dennis);
console.log('dennisProxy1 === dennisProxy2:', dennisProxy1 === dennisProxy2);
npm test