#!/usr/bin/env node
require('arguable')(module, require('cadence')(function (async, program) {
var Operation = require('operation/variadic')
var Destructible = require('destructible')
var destructible = new Destructible(3000, 'olio.serve')
var Descendent = require('descendent')
var descendent = new Descendent(program)
program.on('shutdown', destructible.destroy.bind(destructible))
destructible.addDestructor('descendent', descendent, 'destroy')
var Server = require('./server')
var server = new Server(program, program.argv, descendent)
destructible.completed.wait(async())
async([function () {
destructible.destroy()
}], function () {
destructible.addDestructor('server', server, 'destroy')
server.listen(destructible.monitor('children'))
server.run(program.ultimate.workers, function (index) {
var env = JSON.parse(JSON.stringify(program.env))
env.OLIO_WORKER_INDEX = index
return env
})
}, function () {
program.ready.unlatch()
destructible.completed.wait(async())
})
}))