index.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. var log = require('hlogger').createLogger('loader');
  2. var path = require('path');
  3. var fs = require('fs');
  4. var clitable = require('./clitable');
  5. var loaderActivator = {
  6. start(context) {
  7. this.context = context;
  8. this.manager = context.manager;
  9. this.runPath = context.manager.config.runPath;
  10. if(!this.runPath ) {
  11. log.warn("There is no runPath configured in manager");
  12. return;
  13. }
  14. context.on('hci-installer:installed',() => {
  15. this.loadBundles();
  16. });
  17. this.registerShell(context);
  18. },
  19. loadBundles() {
  20. var mods = fs.readdirSync(this.runPath);
  21. for(var v of mods) {
  22. var modPath = path.join(this.runPath , v);
  23. this.startPlugin(modPath);
  24. }
  25. },
  26. startPlugin(plugPath) {
  27. var dirparts = path.basename(plugPath).split(path.sep);
  28. var dirname = dirparts[dirparts.length-1];
  29. //var plugInfo = require(path.join(plugPath , "package.json"));
  30. var plugName = dirname;
  31. this.manager.register({name:plugName, bundle:plugPath});
  32. },
  33. registerShell(context) {
  34. var prefix = context.prefix(".*:cmd");
  35. prefix.on('lb',(args) => {
  36. var tbl = [];
  37. for(var k in context.manager.registry) {
  38. var v = context.manager.registry[k];
  39. if(v == undefined) {
  40. continue;
  41. }
  42. var modPath = v.modulePath;
  43. if(modPath) {
  44. modPath = modPath.replace(new RegExp("^" + process.env.PWD + "/"),"");
  45. }
  46. tbl.push({
  47. id: v.id,
  48. name:v.name,
  49. state: v.info.state,
  50. package: (v.info.pkgInfo)?v.info.pkgInfo.name:"",
  51. version: (v.info.pkgInfo)?v.info.pkgInfo.version:"",
  52. author: (v.info.pkgInfo)?v.info.pkgInfo.author.name:"",
  53. modulePath: modPath,
  54. });
  55. }
  56. tbl = tbl.sort((a,b) => { return a.id - b.id});
  57. log.info("\n"+clitable(tbl));
  58. });
  59. prefix.on('stop',(args) => {
  60. if(args.length < 2) {
  61. log.error("Not enough parameters");
  62. return;
  63. }
  64. var bcontext = context.manager.get(args[1]);
  65. if(bcontext == null) {
  66. log.error("Bundle not found");
  67. return;
  68. }
  69. bcontext.stop();
  70. });
  71. prefix.on('start',(args) => {
  72. if(args.length < 2) {
  73. log.error("Not enough parameters");
  74. return;
  75. }
  76. var bcontext = context.manager.get(args[1]);
  77. if(bcontext == null) {
  78. log.error("Bundle not found");
  79. return;
  80. }
  81. bcontext.start();
  82. });
  83. prefix.on('reload',(args) => {
  84. if(args.length < 2) {
  85. log.error("Not enough parameters");
  86. return;
  87. }
  88. var bcontext = context.manager.get(args[1]);
  89. if(bcontext == null) {
  90. log.error("Bundle not found");
  91. return;
  92. }
  93. var modulePath = bcontext.modulePath;
  94. context.manager.unregister(bcontext);
  95. context.manager.register({id:bcontext.id, name:bcontext.name, bundle:bcontext.modulePath});
  96. });
  97. prefix.on('unload',(args) => {
  98. if(args.length < 2) {
  99. log.error("Not enough parameters");
  100. return;
  101. }
  102. var bcontext = context.manager.get(args[1]);
  103. if(bcontext == null) {
  104. log.error("Bundle not found");
  105. return;
  106. }
  107. var modulePath = bcontext.modulePath;
  108. context.manager.unregister(bcontext);
  109. });
  110. prefix.on('load',(args) => {
  111. if(args.length < 2) {
  112. log.error("Not enough parameters");
  113. return;
  114. }
  115. log.info("Loading module from: " + process.env.PWD);
  116. context.manager.load(process.env.PWD + "/" + args[1]);
  117. //context.manager.register({name:args[1], bundle:path.resolve(path.join(process.env.PWD, args[2]))});
  118. });
  119. }
  120. };
  121. module.exports.bundleActivator = loaderActivator;