diff --git a/lib/do_create_instance.js b/lib/do_create_instance.js index cc3e858..0456cf3 100644 --- a/lib/do_create_instance.js +++ b/lib/do_create_instance.js @@ -6,6 +6,8 @@ var bigspinner = require('bigspinner'); var format = require('util').format; +var path = require('path'); +var spawn = require('child_process').spawn; var tabula = require('tabula'); var vasync = require('vasync'); @@ -95,8 +97,10 @@ function do_create_instance(subcmd, opts, args, callback) { return next(); } - var spinner; + var spinner, child, killed; + var died = 0; if (!opts.quiet && process.stderr.isTTY) { + /* spinner = bigspinner.createSpinner({ delay: 250, stream: process.stderr, @@ -105,6 +109,27 @@ function do_create_instance(subcmd, opts, args, callback) { hideCursor: true, fontChar: '#' }); + */ + var game = path.join(__dirname, '../node_modules/.bin/snake-game'); + function makechild() { + var _now = Date.now(); + child = spawn(game, {stdio: 'inherit'}); + child.on('close', function (code) { + child = null; + if (!killed) { + var delta = Date.now() - _now; + died++; + console.error('[snake] survived %s', + common.humanDurationFromMs(delta)); + makechild(); + } else { + var ESC = '\u001b'; + var CSI = ESC + '['; + process.stdout.write(CSI + '?25h'); + } + }); + } + makechild(); } cloudapi.waitForMachineStates({ @@ -114,6 +139,11 @@ function do_create_instance(subcmd, opts, args, callback) { if (spinner) { spinner.destroy(); } + if (child) { + killed = true; + child.kill('SIGINT'); + console.error('[snake] died %d times!', died); + } if (err) { return next(err); } diff --git a/package.json b/package.json index aaba95e..b0cf781 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "once": "1.3.2", "restify-clients": "1.0.0", "smartdc-auth": "git+ssh://git@github.com:joyent/node-smartdc-auth.git#9f21966", + "snake-game": "^0.1.0", "tabula": "1.4.2", "vasync": "1.6.3", "verror": "1.6.0"