Node.js EventEmitter

2015年1月14日 - 未分類

Node.jsを使ってsendcomを動かして、ブラウザに表示させるまでの方法を書きます。

先ず、sendcomは、デバイスにアクセスするので、sudoしなければ動作しません。しかし、sudoするには、一々、パスワードを入力しなければならないので、プログラムから動かすには面倒です。そこで、パスワードなしで、sudoできるようにしておきます。/etc/sudoresに、

coder ALL=(ALL) NOPASSWD:ALL

としておくと、ユーザーcoderは、sudo時にパスワードを聞かれなくなります。

Node.jsで、子プロセスからsendcomを呼び出します。

var spawn = require(‘child_process’).spawn;

var scanproc = spawn( sudoscripts + ‘/sendcom’,[‘-e ‘+com]);

stdoutに出力があった時にイベントが発生します。

scanproc.stdout.on(‘data’, function (data) {

var temp=data.split(“\n”);

});

sendcomは何度も呼び出されます。Node.jsは、非同期処理なので、いつ、sendcomの処理が終わったか分からないので、分かるようにします。

function command( com ) {

var ev = new EventEmitter;

var spawn = require(‘child_process’).spawn;

var scanproc = spawn( sudoscripts + ‘/sendcom’,[‘-e ‘+com]);

scanproc.stdout.on(‘data’, function (data) {

var ev = new EventEmitter;

var temp=data.split(“\n”);

ev.emit(‘done’, temp[1]);

});

return ev;

};

なるほど、エミッターを導入するのですね。このエミッターのイベントは、

Function oncom(req){

req.on(‘done’,function(arg1) {         }

); }

で捕まえることができます。非同期処理なので、でてくる順序はバラバラです。この順序入れ替えは、クライアント側でするのでしょうね。

sendcomをブラウザで使う目処が立ってきました。

sendcomNodejs

 

Translate »