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

Method receive

projects/JavaScript/proto/fbe.js:5262–5494  ·  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

5260 * @param {number=} size Buffer size, defaulfs is undefined
5261 */
5262 receive (buffer, offset = 0, size = undefined) {
5263 if (size == null) {
5264 size = buffer.length
5265 }
5266
5267 console.assert(((offset + size) <= buffer.length), 'Invalid offset & size!')
5268 if ((offset + size) > buffer.length) {
5269 throw new Error('Invalid offset & size!')
5270 }
5271
5272 if (size === 0) {
5273 return
5274 }
5275
5276 if ((buffer instanceof ReadBuffer) || (buffer instanceof WriteBuffer)) {
5277 buffer = buffer.buffer
5278 }
5279
5280 // Storage buffer
5281 let offset0 = this._buffer.offset
5282 let offset1 = this._buffer.size
5283 let size1 = this._buffer.size
5284
5285 // Receive buffer
5286 let offset2 = 0
5287 let size2 = size
5288
5289 // While receive buffer is available to handle...
5290 while (offset2 < size2) {
5291 let messageBuffer = null
5292 let messageOffset = 0
5293 let messageSize = 0
5294
5295 // Try to receive message size
5296 let messageSizeCopied = false
5297 let messageSizeFound = false
5298 while (!messageSizeFound) {
5299 // Look into the storage buffer
5300 if (offset0 < size1) {
5301 let count = Math.min(size1 - offset0, 4)
5302 if (count === 4) {
5303 messageSizeCopied = true
5304 messageSizeFound = true
5305 messageSize = Receiver.readUInt32(this._buffer.buffer, this._buffer.offset + offset0)
5306 offset0 += 4
5307 break
5308 } else {
5309 // Fill remaining data from the receive buffer
5310 if (offset2 < size2) {
5311 count = Math.min(size2 - offset2, 4 - count)
5312
5313 // Allocate and refresh the storage buffer
5314 this._buffer.allocate(count)
5315 size1 += count
5316
5317 for (let i = 0; i < count; i++) {
5318 this._buffer.buffer[offset1 + i] = buffer[offset + offset2 + i]
5319 }

Callers

nothing calls this directly

Calls 5

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

Tested by

no test coverage detected