UNPKG

@hazae41/kcp

Version:

Zero-copy KCP protocol for the web

1 lines 2.98 kB
{"version":3,"file":"writer.cjs","sources":["../../../../src/mods/kcp/writer.ts"],"sourcesContent":["import { Writable } from \"@hazae41/binary\";\nimport { Future } from \"@hazae41/future\";\nimport { KcpSegment } from \"./segment.js\";\nimport { SecretKcpDuplex } from \"./stream.js\";\n\nexport class SecretKcpWriter {\n\n constructor(\n readonly parent: SecretKcpDuplex,\n ) { }\n\n async onWrite(fragment: Writable) {\n const { lowDelay = 300, highDelay = 3000 } = this.parent.params\n\n const conversation = this.parent.conversation\n const command = KcpSegment.commands.push\n const serial = this.parent.sendCounter++\n const unackSerial = this.parent.recvCounter\n\n const segment = KcpSegment.newOrThrow({ conversation, command, serial, unackSerial, fragment })\n\n this.parent.output.enqueue(segment)\n\n const start = Date.now()\n\n const retry = setInterval(() => {\n if (this.parent.closed) {\n clearInterval(retry)\n return\n }\n\n const delay = Date.now() - start\n\n if (delay > highDelay) {\n clearInterval(retry)\n return\n }\n\n this.parent.output.enqueue(segment)\n }, lowDelay)\n\n const { resolveOnClose, resolveOnError } = this.parent\n\n const resolveOnAck = new Future<void>()\n\n Promise\n .race([resolveOnAck.promise, resolveOnClose.promise, resolveOnError.promise])\n .finally(() => clearInterval(retry))\n\n this.parent.resolveOnAckBySerial.set(serial, resolveOnAck)\n }\n\n}"],"names":["KcpSegment","segment","Future"],"mappings":";;;;;MAKa,eAAe,CAAA;AAGf,IAAA,MAAA,CAAA;AADX,IAAA,WAAA,CACW,MAAuB,EAAA;QAAvB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAiB;KAC7B;IAEL,MAAM,OAAO,CAAC,QAAkB,EAAA;AAC9B,QAAA,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;AAE/D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAA;AAC7C,QAAA,MAAM,OAAO,GAAGA,kBAAU,CAAC,QAAQ,CAAC,IAAI,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;AACxC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;AAE3C,QAAA,MAAMC,SAAO,GAAGD,kBAAU,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAA;QAE/F,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAACC,SAAO,CAAC,CAAA;AAEnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AAExB,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBACtB,aAAa,CAAC,KAAK,CAAC,CAAA;gBACpB,OAAM;aACP;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;AAEhC,YAAA,IAAI,KAAK,GAAG,SAAS,EAAE;gBACrB,aAAa,CAAC,KAAK,CAAC,CAAA;gBACpB,OAAM;aACP;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAACA,SAAO,CAAC,CAAA;SACpC,EAAE,QAAQ,CAAC,CAAA;QAEZ,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;AAEtD,QAAA,MAAM,YAAY,GAAG,IAAIC,aAAM,EAAQ,CAAA;QAEvC,OAAO;AACJ,aAAA,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;aAC5E,OAAO,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;QAEtC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;KAC3D;AAEF;;;;"}