Exemplo n.º 1
0
 constructor(type, header, options = {}) {
   super(options);
   toolkit.promisify(this, { name: "BottleWriter(" + type + ")" });
   this._writableState.objectMode = options.objectModeWrite ? options.objectModeWrite : true;
   this._readableState.objectMode = options.objectModeRead ? options.objectModeRead : false;
   this._writeHeader(type, header);
 }
Exemplo n.º 2
0
 return Promise.promisify(fs.open)(realFilename, access, state.mode || parseInt("666", 8)).then(fd => {
   const outStream = fs.createWriteStream(realFilename, { fd });
   toolkit.promisify(outStream);
   outStream.on("error", error => reader.emit("error", error));
   dataStream.pipe(countingOutStream).pipe(outStream);
   return outStream.finishPromise();
 }).catch(error => {
Exemplo n.º 3
0
 constructor(type, header, stream) {
   super({ objectMode: true });
   this.type = type;
   this.header = header;
   this.stream = stream;
   this.lastPromise = Promise.resolve();
   toolkit.promisify(this, { name: "BottleReader(" + this.typeName() + ")" });
   this.__log(`${this.__name} reading from ${this.stream.__name || "???"}`);
 }
Exemplo n.º 4
0
function readBottleHeader(stream) {
  toolkit.promisify(stream, { name: "BottleHeader" });
  stream.__log("readBottleHeader");
  return stream.readPromise(8).then((buffer) => {
    if (!buffer) throw new Error("End of stream");
    for (let i = 0; i < 4; i++) {
      if (buffer[i] != MAGIC[i]) throw new Error("Incorrect magic (not a 4bottle archive)");
    }
    if (buffer[4] != VERSION) throw new Error(`Incompatible version: ${buffer[4].toString(16)}`);
    if (buffer[5] != 0) throw new Error(`Incompatible flags: ${buffer[5].toString(16)}`);
    const type = (buffer[6] >> 4) & 0xf;
    const headerLength = ((buffer[6] & 0xf) * 256) + (buffer[7] & 0xff);
    return stream.readPromise(headerLength).then((headerBuffer) => {
      const rv = { type, header: bottle_header.unpack(headerBuffer) };
      if (stream.__debug) stream.__log("readBottleHeader -> " + util.inspect(rv, { depth: null }));
      return rv;
    });
  });
}