123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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
- .channel(context.name).channel('cmd')
- .emit(cmd,req,res)
- .done((evt)=> {
- if(evt.count == 0) {
- context
- .channel(context.name)
- .emit("cmd",req,res).done(() => { this.cli.prompt() });
- }
- this.cli.prompt();
- });
- });
- this.cli.prompt();
- },
- stop(context) {
- log.info("Closing cli");
- this.cli.close();
- },
- completer(str) {
- var hits = this.manager.listeners
- .filter((v)=> {
- var re = new RegExp("^"+ this.context.name + ":cmd:" +str + ".*");
- if(re.test(v.name)) {
- return v;
- }
- }).map((v) => v.name.split(":")[2] + " ");
- return [hits,str];
- },
- output(str) {
- this.stdout.write(str + "\n");
- },
- registerCommands(context) {
- }
-
- }
- module.exports.bundleActivator = shellActivator;
|