* 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)
| 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 | } |
nothing calls this directly
no test coverage detected