MCPcopy
hub / github.com/Effect-TS/effect / onFromClient

Function onFromClient

packages/rpc/src/RpcClient.ts:654–708  ·  view source on GitHub ↗
({ message })

Source from the content-addressed store, hash-verified

652 ...options,
653 supportsAck,
654 onFromClient({ message }) {
655 switch (message._tag) {
656 case "Request": {
657 const rpc = group.requests.get(message.tag)! as any as Rpc.AnyWithProps
658 const schemas = RpcSchema.getStreamSchemas(rpc.successSchema.ast)
659 const collector = supportsTransferables ? Transferable.unsafeMakeCollector() : undefined
660
661 const fiber = Option.getOrThrow(Fiber.getCurrentFiber())
662
663 const entry: ClientEntry = {
664 rpc,
665 context: collector
666 ? Context.add(fiber.currentContext, Transferable.Collector, collector)
667 : fiber.currentContext,
668 decodeChunk: Option.isSome(schemas)
669 ? Schema.decodeUnknown(Schema.NonEmptyArray(schemas.value.success))
670 : undefined
671 }
672 entries.set(message.id, entry)
673
674 return Schema.encode(rpc.payloadSchema)(message.payload).pipe(
675 Effect.locally(FiberRef.currentContext, entry.context),
676 Effect.orDie,
677 Effect.flatMap((payload) =>
678 send({
679 ...message,
680 id: String(message.id),
681 payload,
682 headers: Object.entries(message.headers)
683 }, collector && collector.unsafeClear())
684 )
685 ) as Effect.Effect<void, RpcClientError>
686 }
687 case "Ack": {
688 const entry = entries.get(message.requestId)
689 if (!entry) return Effect.void
690 return send({
691 _tag: "Ack",
692 requestId: String(message.requestId)
693 }) as Effect.Effect<void, RpcClientError>
694 }
695 case "Interrupt": {
696 const entry = entries.get(message.requestId)
697 if (!entry) return Effect.void
698 entries.delete(message.requestId)
699 return send({
700 _tag: "Interrupt",
701 requestId: String(message.requestId)
702 }) as Effect.Effect<void, RpcClientError>
703 }
704 case "Eof": {
705 return Effect.void
706 }
707 }
708 }
709 })
710
711 yield* run((message) => {

Callers

nothing calls this directly

Calls 8

StringInterface · 0.85
encodeMethod · 0.80
entriesMethod · 0.80
sendFunction · 0.70
getMethod · 0.65
addMethod · 0.65
setMethod · 0.65
pipeMethod · 0.65

Tested by

no test coverage detected