{"version":3,"file":"index.mjs","sources":["../../../../../src/mods/kcp/writer/index.ts"],"sourcesContent":["import { Writable } from \"@hazae41/binary\";\nimport { Future } from \"@hazae41/future\";\nimport { KcpSegment } from \"../segment/index.js\";\nimport { SecretKcpDuplex } from \"../stream/index.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":[],"mappings":";;;MAKa,eAAe,CAAA;AAGf,IAAA,MAAA;AADX,IAAA,WAAA,CACW,MAAuB,EAAA;QAAvB,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;IAEJ,MAAM,OAAO,CAAC,QAAkB,EAAA;AAC9B,QAAA,MAAM,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAE/D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;AAC7C,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACxC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AAE3C,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QAE/F,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AAEnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;AAExB,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBACtB,aAAa,CAAC,KAAK,CAAC;gBACpB;YACF;YAEA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;AAEhC,YAAA,IAAI,KAAK,GAAG,SAAS,EAAE;gBACrB,aAAa,CAAC,KAAK,CAAC;gBACpB;YACF;YAEA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,CAAC,EAAE,QAAQ,CAAC;QAEZ,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM;AAEtD,QAAA,MAAM,YAAY,GAAG,IAAI,MAAM,EAAQ;QAEvC;AACG,aAAA,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC;aAC3E,OAAO,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAC5D;AAED;;;;"}