节点J退出已注册的事件放大器

时间:2017-01-18 07:03:06

标签: node.js nwjs

我正在使用以下功能代码来获取应用程序的图标,我将获得与所有函数调用相同的base64图像数据。

if (something)

1 个答案:

答案 0 :(得分:0)

一个小时前,我还遇到了图标提取程序包的相同问题。 我的第一个直觉是还检查了事件发射器。但是,在检查了源代码之后,我发现它与发射器无关。 在源代码中,icon-extractor不会清除其 buffer ,该缓冲区在每次调用中都会堆积,并且会多次调用发射器。

两年后您可能不再需要此代码,但是为了避免将来出现问题,我将发布固定版本的代码。

var EventEmitter = require('events');
var fs = require('fs');
var child_process = require('child_process');
var _ = require('lodash');
var os = require('os');
var path = require('path');

var emitter = new EventEmitter();

function IconExtractor(){

  var self = this;
  var iconDataBuffer = "";

  this.emitter = new EventEmitter();
  this.iconProcess = child_process.spawn(getPlatformIconProcess(),['-x']);

  this.getIcon = function(context, path){
    var json = JSON.stringify({context: context, path: path}) + "\n";
    self.iconProcess.stdin.write(json);
  }

  this.iconProcess.stdout.on('data', function(data){

    var str = (new Buffer(data, 'utf8')).toString('utf8');

    iconDataBuffer += str;

    //Bail if we don't have a complete string to parse yet.
    if (!_.endsWith(str, '\n')){
      return;
    }

    //We might get more than one in the return, so we need to split that too.
    _.each(iconDataBuffer.split('\n'), function(buf){

      if(!buf || buf.length == 0){
        return;
      }

      try{
        self.emitter.emit('icon', JSON.parse(buf));
      } catch(ex){
        self.emitter.emit('error', ex);
      }

    });

    iconDataBuffer = "";
  });

  this.iconProcess.on('error', function(err){
    self.emitter.emit('error', err.toString());
  });

  this.iconProcess.stderr.on('data', function(err){
    self.emitter.emit('error', err.toString());
  });

  function getPlatformIconProcess(){
    if(os.type() == 'Windows_NT'){
      return path.join(__dirname,'/bin/IconExtractor.exe');
      //Do stuff here to get the icon that doesn't have the shortcut thing on it
    } else {
      throw('This platform (' + os.type() + ') is unsupported =(');
    }
  }

}

module.exports = new IconExtractor();

将图标提取器模块的bin文件夹复制到可以到达的位置。使用此代码创建一个js文件。因此它将类似于/ YourFolder / bin /和/YourFolder/copiedFilename.js 这样使用

var iconExtractor = require('./YourFolderPath/copiedFilename');

我希望能有所帮助。 我本打算将其推送到Github存储库,但很明显,他不再维护该模块了。