| 240 | s.writable -= packet.byteLength; |
| 241 | } |
| 242 | readPacket(s) { |
| 243 | let packetBuffer = this.packetBuffer; |
| 244 | if (!packetBuffer || (packetBuffer.offset < 5)) { |
| 245 | if (!packetBuffer) { |
| 246 | packetBuffer = this.packetBuffer = new Uint8Array(new ArrayBuffer(5, {maxByteLength: 32768})); |
| 247 | packetBuffer.offset = 0; |
| 248 | } |
| 249 | |
| 250 | const need = Math.min(5 - packetBuffer.offset, s.readable); |
| 251 | s.read(this.packetBuffer.subarray(packetBuffer.offset, packetBuffer.offset + need)); |
| 252 | s.readable -= need; |
| 253 | packetBuffer.offset += need; |
| 254 | if (packetBuffer.offset < 5) |
| 255 | return; |
| 256 | |
| 257 | this.packetBuffer.buffer.resize(((packetBuffer[3] << 8) | packetBuffer[4]) + 5); /* packet length including 5 byte header */ |
| 258 | } |
| 259 | let need = packetBuffer.length - packetBuffer.offset; |
| 260 | if (need) { |
| 261 | if (!s.readable) |
| 262 | return; |
| 263 | if (need > s.readable) |
| 264 | need = s.readable; |
| 265 | s.read(packetBuffer.subarray(packetBuffer.offset, packetBuffer.offset + need)); |
| 266 | s.readable -= need; |
| 267 | packetBuffer.offset += need; |
| 268 | if (packetBuffer.offset < packetBuffer.length) |
| 269 | return; |
| 270 | } |
| 271 | delete this.packetBuffer; |
| 272 | return packetBuffer.buffer; |
| 273 | } |
| 274 | putData(data) { |
| 275 | this.applicationData = data; |
| 276 | data.position = data.byteOffset; |