@selfage/service_handler
Version:
Http-based service handlers on top of expressjs.
42 lines • 5.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamMessageReader = void 0;
const events = require("events");
const parser_1 = require("@selfage/message/parser");
const stream_seperator_1 = require("@selfage/service_descriptor/stream_seperator");
class StreamMessageReader extends events {
constructor(source, messageDescriptor) {
super();
this.source = source;
this.messageDescriptor = messageDescriptor;
this.bufferedJsonStr = new Array();
}
start() {
this.source.setEncoding("utf8");
this.source.on("data", (chunk) => this.collectChunkAndParse(chunk));
this.source.on("end", () => {
this.flushMessage();
this.emit("end");
});
}
collectChunkAndParse(chunk) {
let chunks = chunk.split(stream_seperator_1.STREAM_JSON_SEPARATOR);
for (let i = 0; i < chunks.length; i++) {
this.bufferedJsonStr.push(chunks[i]);
if (i + 1 < chunks.length) {
this.flushMessage();
}
}
}
flushMessage() {
let jsonStr = this.bufferedJsonStr.join("");
// It won't filter out strings with all white spaces.
if (!jsonStr) {
return;
}
this.emit("data", (0, parser_1.parseMessage)(JSON.parse(jsonStr), this.messageDescriptor));
this.bufferedJsonStr.length = 0;
}
}
exports.StreamMessageReader = StreamMessageReader;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtX21lc3NhZ2VfcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RyZWFtX21lc3NhZ2VfcmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFrQztBQUVsQyxvREFBdUQ7QUFDdkQsbUZBQXFGO0FBUXJGLE1BQWEsbUJBQXVCLFNBQVEsTUFBTTtJQUdoRCxZQUNVLE1BQWdCLEVBQ2hCLGlCQUF1QztRQUUvQyxLQUFLLEVBQUUsQ0FBQztRQUhBLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUp6QyxvQkFBZSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFPOUMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBYTtRQUN4QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLHdDQUFxQixDQUFDLENBQUM7UUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUNQLE1BQU0sRUFDTixJQUFBLHFCQUFZLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDMUQsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUEzQ0Qsa0RBMkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50cyA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5pbXBvcnQgeyBNZXNzYWdlRGVzY3JpcHRvciB9IGZyb20gXCJAc2VsZmFnZS9tZXNzYWdlL2Rlc2NyaXB0b3JcIjtcbmltcG9ydCB7IHBhcnNlTWVzc2FnZSB9IGZyb20gXCJAc2VsZmFnZS9tZXNzYWdlL3BhcnNlclwiO1xuaW1wb3J0IHsgU1RSRUFNX0pTT05fU0VQQVJBVE9SIH0gZnJvbSBcIkBzZWxmYWdlL3NlcnZpY2VfZGVzY3JpcHRvci9zdHJlYW1fc2VwZXJhdG9yXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1NZXNzYWdlUmVhZGVyPFQ+IHtcbiAgb24oZXZlbnQ6IFwiZGF0YVwiLCBsaXN0ZW5lcjogKG1lc3NhZ2U6IFQpID0+IHZvaWQpOiB0aGlzO1xuICBvbihldmVudDogXCJlbmRcIiwgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzO1xufVxuXG5leHBvcnQgY2xhc3MgU3RyZWFtTWVzc2FnZVJlYWRlcjxUPiBleHRlbmRzIGV2ZW50cyB7XG4gIHByaXZhdGUgYnVmZmVyZWRKc29uU3RyID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzb3VyY2U6IFJlYWRhYmxlLFxuICAgIHByaXZhdGUgbWVzc2FnZURlc2NyaXB0b3I6IE1lc3NhZ2VEZXNjcmlwdG9yPFQ+LFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuc291cmNlLnNldEVuY29kaW5nKFwidXRmOFwiKTtcbiAgICB0aGlzLnNvdXJjZS5vbihcImRhdGFcIiwgKGNodW5rOiBzdHJpbmcpID0+IHRoaXMuY29sbGVjdENodW5rQW5kUGFyc2UoY2h1bmspKTtcbiAgICB0aGlzLnNvdXJjZS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmZsdXNoTWVzc2FnZSgpO1xuICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0Q2h1bmtBbmRQYXJzZShjaHVuazogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGNodW5rcyA9IGNodW5rLnNwbGl0KFNUUkVBTV9KU09OX1NFUEFSQVRPUik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYnVmZmVyZWRKc29uU3RyLnB1c2goY2h1bmtzW2ldKTtcblxuICAgICAgaWYgKGkgKyAxIDwgY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZsdXNoTWVzc2FnZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hNZXNzYWdlKCk6IHZvaWQge1xuICAgIGxldCBqc29uU3RyID0gdGhpcy5idWZmZXJlZEpzb25TdHIuam9pbihcIlwiKTtcbiAgICAvLyBJdCB3b24ndCBmaWx0ZXIgb3V0IHN0cmluZ3Mgd2l0aCBhbGwgd2hpdGUgc3BhY2VzLlxuICAgIGlmICghanNvblN0cikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdChcbiAgICAgIFwiZGF0YVwiLFxuICAgICAgcGFyc2VNZXNzYWdlKEpTT04ucGFyc2UoanNvblN0ciksIHRoaXMubWVzc2FnZURlc2NyaXB0b3IpLFxuICAgICk7XG4gICAgdGhpcy5idWZmZXJlZEpzb25TdHIubGVuZ3RoID0gMDtcbiAgfVxufVxuIl19