postal.js/example/node/messaging/machina.postal.js
2012-08-28 12:06:19 -04:00

45 lines
No EOL
1.5 KiB
JavaScript

/*
machina.postal.js
Author: Jim Cowart
License: Dual licensed MIT (http://www.opensource.org/licenses/mit-license) & GPL (http://www.opensource.org/licenses/gpl-license)
Version 0.1.0
*/
module.exports = function ( postal, machina ) {
var bus = machina.bus = {
channels : {},
config : {
handlerChannelSuffix : "",
eventChannelSuffix : ".events"
},
wireHandlersToBus : function ( fsm, handlerChannel ) {
bus.channels[handlerChannel]._subscriptions.push(
bus.channels[handlerChannel].subscribe( "#", function ( data, envelope ) {
fsm.handle.call( fsm, envelope.topic, data, envelope );
} )
);
},
wireEventsToBus : function ( fsm, eventChannel ) {
var publisher = bus.channels[eventChannel].eventPublisher = function () {
try {
bus.channels[eventChannel].publish( { topic : arguments[0], data : arguments[1] || {} } );
} catch ( exception ) {
if ( console && typeof console.log !== "undefined" ) {
console.log( exception.toString() );
}
}
};
fsm.on( "*", publisher );
},
wireUp : function ( fsm ) {
var handlerChannel = fsm.namespace + bus.config.handlerChannelSuffix,
eventChannel = fsm.namespace + bus.config.eventChannelSuffix;
bus.channels[handlerChannel] = postal.channel( { channel : handlerChannel } );
bus.channels[eventChannel] = postal.channel( { channel : eventChannel } );
bus.channels[handlerChannel]._subscriptions = [];
bus.wireHandlersToBus( fsm, handlerChannel );
bus.wireEventsToBus( fsm, eventChannel );
}
};
machina.on( "newFsm", bus.wireUp );
};