編集: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) {
// ...
});
問題なし。必要な唯一の編集は、次のようにデータを文字列に変換することでした: data = data.toString();残りの部分を続けてください。 var prefix = data.substring(0、3); if(prefix === "") など – htown0724082
偉大な - 私は実際にパーサーで(私の最初の更新後の代替ソリューション、私は実際にその方法をお勧めします)、それに応じて他のソリューションを更新します。注意:たくさんのデータがある場合、例えば 'buffer.toString( 'utf8'、0、3)'を使って直接 'Buffer 'を操作したいかもしれません。 [node.js buffer docs](http://nodejs.org/docs/latest/api/buffers.html)を参照してください。 –
興味深いことに、最新のソリューションをテストしましたか? options.parser(me、buffer) ^ TypeError:オブジェクト#