@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
JavaScript
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
;