Skip to content

Utils

Helps RPC protocol services buffer messages until their receive loop starts.

Client and server protocol constructors use these helpers to expose a stable service before the active receiver is installed. Writes made before run starts are buffered with their current Context, then replayed once the receiver is ready.

2 exports Added in v4.0.0 Source

Services

withRun

Added in v4.0.0 Source

Builds a service with a run method that buffers writes until run installs a writer, replays buffered writes with their original contexts, and restores the previous writer when the run ends.

Signature

declare function withRun<
  A extends {
    readonly run: (f: (...args: Array<any>) => Effect<void>) => Effect<never>;
  },
>(): <EX, RX>(
  f: (write: Parameters<A["run"]>[0]) => Effect<Omit<A, "run">, EX, RX>,
) => Effect<A, EX, RX>;

Builds an RPC client protocol service that tracks active client IDs and buffers server responses per client until that client's run handler is installed.

Signature

declare function withRunClient<EX, RX>(f: (write: (clientId: number, response: FromServerEncoded) => Effect<void>, clientIds: ReadonlySet<number>) => Effect<Omit<{
  readonly run: (clientId: number, f: (data: FromServerEncoded) => Effect<void>) => Effect<never>;
  readonly send: (clientId: number, request: FromClientEncoded, transferables?: readonly Array<Transferable>) => Effect<void, RpcClientError>;
  readonly supportsAck: boolean;
  readonly supportsTransferables: boolean;
}, "run">, EX, RX>): Effect<{
  readonly run: (clientId: number, f: (data: FromServerEncoded) => Effect<void>) => Effect<never>;
  readonly send: (clientId: number, request: FromClientEncoded, transferables?: readonly Array<Transferable>) => Effect<void, RpcClientError>;
  readonly supportsAck: boolean;
  readonly supportsTransferables: boolean;
}, EX, RX>