| 229 | s.write(packet); |
| 230 | } |
| 231 | readPacket(s, available) { |
| 232 | let packetBuffer = this.packetBuffer; |
| 233 | if (packetBuffer.length < 5) { |
| 234 | let need = 5 - packetBuffer.length; |
| 235 | let c = s.read(ArrayBuffer, need); |
| 236 | if (!c) |
| 237 | return; |
| 238 | c = new Uint8Array(c); |
| 239 | this.packetBuffer = new Uint8Array(packetBuffer.length + c.length); |
| 240 | this.packetBuffer.set(packetBuffer); |
| 241 | this.packetBuffer.set(c, packetBuffer.length); |
| 242 | packetBuffer = this.packetBuffer; |
| 243 | if (packetBuffer.length < 5) |
| 244 | return; |
| 245 | available -= 5; |
| 246 | |
| 247 | this.packetBuffer = new Uint8Array(((packetBuffer[3] << 8) | packetBuffer[4]) + 5); /* packet length including 5 byte header */ |
| 248 | this.packetBuffer.set(packetBuffer); |
| 249 | packetBuffer = this.packetBuffer; |
| 250 | packetBuffer.offset = 5; |
| 251 | } |
| 252 | let need = packetBuffer.length - packetBuffer.offset; |
| 253 | if (need) { |
| 254 | if (!available) |
| 255 | return; |
| 256 | if (need > available) |
| 257 | need = available; |
| 258 | let c = s.read(ArrayBuffer, need); |
| 259 | if (!c) |
| 260 | return; |
| 261 | this.packetBuffer.set(new Uint8Array(c), packetBuffer.offset); |
| 262 | packetBuffer.offset += c.byteLength; |
| 263 | if (packetBuffer.offset < packetBuffer.length) |
| 264 | return; |
| 265 | } |
| 266 | this.packetBuffer = new Uint8Array; |
| 267 | return packetBuffer.buffer; |
| 268 | } |
| 269 | get bytesAvailable() { |
| 270 | return this.applicationData ? (this.applicationData.end - this.applicationData.position) : 0; |
| 271 | } |