UNPKG

@jsonjoy.com/reactive-rpc

Version:

Reactive-RPC is a library for building reactive APIs over WebSocket, HTTP, and other RPCs.

45 lines 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildE2eClient = void 0; const Codecs_1 = require("@jsonjoy.com/json-pack/lib/codecs/Codecs"); const Fuzzer_1 = require("@jsonjoy.com/util/lib/Fuzzer"); const Writer_1 = require("@jsonjoy.com/util/lib/buffers/Writer"); const context_1 = require("../../server/context"); const RpcCodecs_1 = require("../codec/RpcCodecs"); const RpcMessageCodecs_1 = require("../codec/RpcMessageCodecs"); const rpc_1 = require("../rpc"); const buildE2eClient = (caller, opt = {}) => { const writer = opt.writer ?? new Writer_1.Writer(Fuzzer_1.Fuzzer.randomInt2(opt.writerDefaultBufferKb ?? [4, 4]) * 1024); const codecs = new RpcCodecs_1.RpcCodecs(new Codecs_1.Codecs(writer), new RpcMessageCodecs_1.RpcMessageCodecs()); const ctx = new context_1.ConnectionContext(opt.ip ?? '0.0.0.0', opt.ip ?? '', null, {}, codecs.value.cbor, codecs.value.cbor, codecs.messages.binary); let client; const streamProcessor = new rpc_1.RpcMessageStreamProcessor({ caller, send: (messages) => { const encoded = ctx.msgCodec.encode(ctx.resCodec, messages); setTimeout(() => { const decoded = ctx.msgCodec.decodeBatch(ctx.resCodec, encoded); client.onMessages(decoded); }, 1); }, bufferSize: Fuzzer_1.Fuzzer.randomInt2(opt.serverBufferSize ?? [1, 1]), bufferTime: Fuzzer_1.Fuzzer.randomInt2(opt.serverBufferTime ?? [0, 0]), }); client = new rpc_1.StreamingRpcClient({ send: (messages) => { const encoded = ctx.msgCodec.encode(ctx.reqCodec, messages); setTimeout(() => { const decoded = ctx.msgCodec.decodeBatch(ctx.reqCodec, encoded); streamProcessor.onMessages(decoded, {}); }, 1); }, bufferSize: Fuzzer_1.Fuzzer.randomInt2(opt.clientBufferSize ?? [1, 1]), bufferTime: Fuzzer_1.Fuzzer.randomInt2(opt.clientBufferTime ?? [0, 0]), }); const typedClient = client; return { client: typedClient, }; }; exports.buildE2eClient = buildE2eClient; //# sourceMappingURL=buildE2eClient.js.map