2012-02-29 4 views
3

socket.ioが許可する方法でデータを送信するときに、イベントタイプを宣言することは可能ですか?node.jsシリアルポートモジュールのイベントタイプ

serialPort.write("OMG IT WORKS\r"); 

として受信されている:として現在SERIALPORTと書くことである

serialPort.on("data", function (data) { 
    foo(data); 
}); 

iは異なるイベントの数を例えば送信したいです"positionUpdate"、 "data"、 "timeSync" ..etc

serialPort.emit( "positionUpdate"、slavePosition);

おかげ

答えて

3

編集:serialportはオプションparserを受け入れるようだ、EventEmitterと生のバッファを取ります

var myParser = function(emitter, buffer) { 
    // Inspect buffer, emit on emitter: 
    if(buffer.toString("utf8", 0, 3) === "foo") 
    emitter.emit("foo", buffer); 
    else 
    emitter.emit("data", buffer); 
}; 

var serialport = new SerialPort("/dev/foo", { parser: myParser }); 

serialport.on("foo", function(data) { 
    // Do stuff 
}); 

更新:明らかに、あなたはバッファする必要があります。データが入ってきて、何らかの方法でそれをマッサージしますが、どのデータを期待しているのか分かりません。ご紹介としてserialport's readline parserをご覧ください。

これをテストしないと、これはより良い方法だと思うが、私は以下の初期解決策を残す。

プロキシでこれを行うことができます:

var events = require('events'); 
var util = require('util'); 

var SerialProxy = function(serialport){ 
    events.EventEmitter.call(this); 
    var self = this; 
    serialport.on("data", function(data) { 
    // Inspect data to see which event to emit 
    // data is a Buffer object 
    var prefix = data.toString("utf8", 0, 3); 
    if(prefix === "foo") 
     self.emit("foo", data.toString("utf8", 3)); 
    else if(prefix === "bar") 
     self.emit("bar", data.toString("utf8", 3)); 
    else 
     self.emit("data", data.toString("utf8")); 
    }); 
}; 

util.inherits(SerialProxy, events.EventEmitter); 

は使用方法:

var serialProxy = new SerialProxy(serialport); 

serialProxy.on("foo", function(data) { 
    // ... 
}); 

serialProxy.on("bar", function(data) { 
    // ... 
}); 

serialProxy.on("data", function(data) { 
    // ... 
}); 
+0

問題なし。必要な唯一の編集は、次のようにデータを文字列に変換することでした: data = data.toString();残りの部分を続けてください。 var prefix = data.substring(0、3); if(prefix === "") など – htown0724082

+0

偉大な - 私は実際にパーサーで(私の最初の更新後の代替ソリューション、私は実際にその方法をお勧めします)、それに応じて他のソリューションを更新します。注意:たくさんのデータがある場合、例えば 'buffer.toString( 'utf8'、0、3)'を使って直接 'Buffer 'を操作したいかもしれません。 [node.js buffer docs](http://nodejs.org/docs/latest/api/buffers.html)を参照してください。 –

+0

興味深いことに、最新のソリューションをテストしましたか? options.parser(me、buffer) ^ TypeError:オブジェクト#の 'パーサー'は[オブジェクトオブジェクト]の関数 ではありません。 (/var/lib/cloud9/node_modules/serialport/serialport.js:82:17) – htown0724082