1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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;
|