UNPKG

memento

Version:

A Paxos backed replicated state machine key-value store.

97 lines (69 loc) 2.76 kB
/* ___ usage ___ en_US ___ node emissary.bin.js <options> options: --help display help message -b, --bind <sring> interface and port to bind to ___ $ ___ en_US ___ bind is required: the `--bind` is a required argument bind is not integer: the `--bind` must be an integer ___ . ___ */ require('arguable')(module, require('cadence')(function (async, program) { program.helpIf(program.ultimate.help) program.required('bind') program.validate(require('arguable/bindable'), 'bind') var http = require('http') var cadence = require('cadence') var abend = require('abend') var Shuttle = require('prolific.shuttle') var Colleague = require('colleague') var Conference = require('conference') var Destructor = require('destructible') var Memento = require('./memento') var Inquisitor = require('./inquisitor') var Service = require('./middleware') var Cliffhanger = require('cliffhanger') var Colleague = require('colleague') var destructor = new Destructor('memento') process.on('shutdown', destructor.destroy.bind(destructor)) var logger = require('prolific.logger').createLogger('memento') var shuttle = Shuttle.shuttle(program, logger) destructor.addDestructor('shuttle', shuttle, 'close') var nodes = {} var cliffhanger = new Cliffhanger var memento = new Memento(cliffhanger, nodes) var conference = new Conference(memento, function (constructor) { constructor.join() constructor.immigrate() constructor.naturalized() constructor.exile() constructor.method('test') constructor.socket() constructor.receive('set') constructor.receive('delete', 'remove') }) var colleague = new Colleague(conference) var inquisitor = new Inquisitor(conference, cliffhanger, nodes) cadence(function (async) { destructor.stack(async, 'collegue')(function (ready) { destructor.addDestructor('collegue', colleague, 'destroy') colleague.listen(program, async()) colleague.ready.wait(ready, 'unlatch') }) })(abend) var service = new Service(inquisitor) var destroyer = require('server-destroy') var bind = program.ultimate.bind var server = http.createServer(service.reactor.middleware) destroyer(server) destructor.addDestructor('http', server, 'destroy') async(function () { destructor.ready.wait(async()) server.listen(bind.port, bind.address, async()) }, function () { logger.info('started', { params: program.ultimate, argv: program.argv }) }) }))