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

Function write

packages/rpc/src/RpcServer.ts:159–204  ·  view source on GitHub ↗
(clientId: number, message: FromClient<Rpcs>)

Source from the content-addressed store, hash-verified

157 })
158
159 const write = (clientId: number, message: FromClient<Rpcs>): Effect.Effect<void> =>
160 Effect.catchAllDefect(
161 Effect.withFiberRuntime((requestFiber) => {
162 if (isShutdown) return Effect.interrupt
163 let client = clients.get(clientId)
164 if (!client) {
165 client = {
166 id: clientId,
167 latches: new Map(),
168 fibers: new Map(),
169 ended: false
170 }
171 clients.set(clientId, client)
172 } else if (client.ended) {
173 return Effect.interrupt
174 }
175
176 switch (message._tag) {
177 case "Request": {
178 return handleRequest(requestFiber, client, message)
179 }
180 case "Ack": {
181 const latch = client.latches.get(message.requestId)
182 return latch ? latch.open : Effect.void
183 }
184 case "Interrupt": {
185 const fiber = client.fibers.get(message.requestId)
186 return fiber ? Fiber.interruptAsFork(fiber, fiberIdClientInterrupt) : options.onFromServer({
187 _tag: "Exit",
188 clientId,
189 requestId: message.requestId,
190 exit: Exit.interrupt(FiberId.none)
191 })
192 }
193 case "Eof": {
194 client.ended = true
195 if (client.fibers.size > 0) return Effect.void
196 return endClient(client)
197 }
198 default: {
199 return sendDefect(client, `Unknown request tag: ${(message as any)._tag}`)
200 }
201 }
202 }),
203 (defect) => sendDefect(clients.get(clientId)!, defect)
204 )
205
206 const endClient = (client: Client) => {
207 clients.delete(client.id)

Callers 1

McpServer.tsFile · 0.50

Calls 9

endClientFunction · 0.85
sendDefectFunction · 0.85
encodeMethod · 0.80
handleRequestFunction · 0.70
ResponseDefectEncodedFunction · 0.70
getMethod · 0.65
setMethod · 0.65
interruptAsForkMethod · 0.65
interruptMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…