* Take n bytes from the buffered Buffers * @param {number} n * @returns {Buffer}
(n)
| 15615 | * @returns {Buffer} |
| 15616 | */ |
| 15617 | consume(n) { |
| 15618 | if (n > this.#byteOffset) { |
| 15619 | throw new Error("Called consume() before buffers satiated."); |
| 15620 | } else if (n === 0) { |
| 15621 | return emptyBuffer; |
| 15622 | } |
| 15623 | this.#byteOffset -= n; |
| 15624 | const first = this.#buffers[0]; |
| 15625 | if (first.length > n) { |
| 15626 | this.#buffers[0] = first.subarray(n, first.length); |
| 15627 | return first.subarray(0, n); |
| 15628 | } else if (first.length === n) { |
| 15629 | return this.#buffers.shift(); |
| 15630 | } else { |
| 15631 | let offset = 0; |
| 15632 | const buffer = Buffer.allocUnsafeSlow(n); |
| 15633 | while (offset !== n) { |
| 15634 | const next = this.#buffers[0]; |
| 15635 | const length = next.length; |
| 15636 | if (length + offset === n) { |
| 15637 | buffer.set(this.#buffers.shift(), offset); |
| 15638 | break; |
| 15639 | } else if (length + offset > n) { |
| 15640 | buffer.set(next.subarray(0, n - offset), offset); |
| 15641 | this.#buffers[0] = next.subarray(n - offset); |
| 15642 | break; |
| 15643 | } else { |
| 15644 | buffer.set(this.#buffers.shift(), offset); |
| 15645 | offset += length; |
| 15646 | } |
| 15647 | } |
| 15648 | return buffer; |
| 15649 | } |
| 15650 | } |
| 15651 | writeFragments(fragment) { |
| 15652 | if (this.#maxFragments > 0 && this.#fragments.length === this.#maxFragments) { |
| 15653 | failWebsocketConnection(this.#handler, 1008, "Too many message fragments"); |
no test coverage detected