UNPKG

@selfage/service_handler

Version:

Http-based service handlers on top of expressjs.

42 lines 5.5 kB
"use strict"; 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