var readline = require('readline'); var log = require('hlogger').createLogger("shell"); var path = require('path'); var shellActivator = { start(context) { this.context = context; this.manager = context.manager; this.stdout = process.stdout; this.registerCommands(context); this.cli = readline.createInterface(process.stdin,this.stdout,(str) => this.completer(str)); this.cli.setPrompt("HCI> "); this.cli.on('line',(cmd) => { if(cmd.length == "") {this.cli.prompt(); return;} var [cmd,...args] = cmd.split(/\s/); var req = { cmd:cmd, args:args } var res = this.stdout; context.events .channel(context.name,'cmd') .propagate(cmd,req,res) .then((evt)=> { if(evt.count == 0) console.log("Command not found:" + cmd); // This is wrong perhaps this.cli.prompt(); }).catch((err) => { console.log("Promise error: ", err); }); }); this.cli.prompt(); }, stop(context) { log.info("Closing cli"); this.cli.close(); }, completer(str) { // Hack var re = new RegExp("^"+ this.context.name + "/cmd/(" + str + ".*)"); var hits = []; this.manager.eventual._events.ctx.forEach((ctx) => { Object.keys(ctx.listeners).forEach((k) => { var res = k.match(re); if(res) { hits.push(res[1]); } }); }); return [hits,str]; }, output(str) { this.stdout.write(str + "\n"); }, registerCommands(context) { } } module.exports.bundleActivator = shellActivator;