MCPcopy Create free account
hub / github.com/chronoxor/FastBinaryEncoding / receive

Method receive

projects/JavaScript/proto/fbe.js:5736–5968  ·  view source on GitHub ↗

* Receive data * @this {!Receiver} * @param {!Uint8Array|!ReadBuffer|!WriteBuffer} buffer Buffer * @param {number=} offset Buffer offset, defaulfs is 0 * @param {number=} size Buffer size, defaulfs is undefined

(buffer, offset = 0, size = undefined)

Source from the content-addressed store, hash-verified

5734 * @param {number=} size Buffer size, defaulfs is undefined
5735 */
5736 receive (buffer, offset = 0, size = undefined) {
5737 if (size == null) {
5738 size = buffer.length
5739 }
5740
5741 console.assert(((offset + size) <= buffer.length), 'Invalid offset & size!')
5742 if ((offset + size) > buffer.length) {
5743 throw new Error('Invalid offset & size!')
5744 }
5745
5746 if (size === 0) {
5747 return
5748 }
5749
5750 if ((buffer instanceof ReadBuffer) || (buffer instanceof WriteBuffer)) {
5751 buffer = buffer.buffer
5752 }
5753
5754 // Storage buffer
5755 let offset0 = this._receiveBuffer.offset
5756 let offset1 = this._receiveBuffer.size
5757 let size1 = this._receiveBuffer.size
5758
5759 // Receive buffer
5760 let offset2 = 0
5761 let size2 = size
5762
5763 // While receive buffer is available to handle...
5764 while (offset2 < size2) {
5765 let messageBuffer = null
5766 let messageOffset = 0
5767 let messageSize = 0
5768
5769 // Try to receive message size
5770 let messageSizeCopied = false
5771 let messageSizeFound = false
5772 while (!messageSizeFound) {
5773 // Look into the storage buffer
5774 if (offset0 < size1) {
5775 let count = Math.min(size1 - offset0, 4)
5776 if (count === 4) {
5777 messageSizeCopied = true
5778 messageSizeFound = true
5779 messageSize = Receiver.readUInt32(this._receiveBuffer.buffer, this._receiveBuffer.offset + offset0)
5780 offset0 += 4
5781 break
5782 } else {
5783 // Fill remaining data from the receive buffer
5784 if (offset2 < size2) {
5785 count = Math.min(size2 - offset2, 4 - count)
5786
5787 // Allocate and refresh the storage buffer
5788 this._receiveBuffer.allocate(count)
5789 size1 += count
5790
5791 for (let i = 0; i < count; i++) {
5792 this._receiveBuffer.buffer[offset1 + i] = buffer[offset + offset2 + i]
5793 }

Callers 4

sendAndReceiveFunction · 0.45
sendAndReceiveFinalFunction · 0.45
send_receive.jsFile · 0.45

Calls 5

onReceiveMethod · 0.95
readUInt32Method · 0.45
allocateMethod · 0.45
writeUInt32Method · 0.45
resetMethod · 0.45

Tested by

no test coverage detected