| 13 | } |
| 14 | |
| 15 | function encodeFrame(opcode: Opcode, payload: Buffer): Buffer { |
| 16 | const finAndOpcode = 0x80 | opcode; |
| 17 | const payloadLen = payload.length; |
| 18 | |
| 19 | if (payloadLen < 126) { |
| 20 | const header = Buffer.allocUnsafe(2); |
| 21 | header[0] = finAndOpcode; |
| 22 | header[1] = payloadLen; |
| 23 | return Buffer.concat([header, payload]); |
| 24 | } |
| 25 | |
| 26 | if (payloadLen < 65536) { |
| 27 | const header = Buffer.allocUnsafe(4); |
| 28 | header[0] = finAndOpcode; |
| 29 | header[1] = 126; |
| 30 | header.writeUInt16BE(payloadLen, 2); |
| 31 | return Buffer.concat([header, payload]); |
| 32 | } |
| 33 | |
| 34 | const header = Buffer.allocUnsafe(10); |
| 35 | header[0] = finAndOpcode; |
| 36 | header[1] = 127; |
| 37 | header.writeBigUInt64BE(BigInt(payloadLen), 2); |
| 38 | return Buffer.concat([header, payload]); |
| 39 | } |
| 40 | |
| 41 | function tryDecodeFrame( |
| 42 | buffer: Buffer |