26 lines
574 B
JavaScript
26 lines
574 B
JavaScript
|
|
const { EventEmitter } = require('events');
|
||
|
|
|
||
|
|
module.exports.StreamJsonParser = class StreamJsonParser extends EventEmitter {
|
||
|
|
|
||
|
|
buffer = '';
|
||
|
|
|
||
|
|
data(evt) {
|
||
|
|
// toString it, in case its a buffer!
|
||
|
|
this.buffer += evt.toString();
|
||
|
|
this.processBuffer();
|
||
|
|
}
|
||
|
|
|
||
|
|
processBuffer() {
|
||
|
|
const parts = this.buffer.split(/(\x02[^\x02\x03]*\x03)/g);
|
||
|
|
this.buffer = '';
|
||
|
|
|
||
|
|
for(const message of parts) {
|
||
|
|
if(message.endsWith('\x03')) {
|
||
|
|
const obj = JSON.parse(message.substr(1, message.length - 2));
|
||
|
|
this.emit('message', obj);
|
||
|
|
} else {
|
||
|
|
this.buffer += message;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|