MCPcopy Index your code
hub / github.com/Effect-TS/effect / handler

Function handler

packages/experimental/src/EventLogServer.ts:41–135  ·  view source on GitHub ↗
(socket: Socket.Socket)

Source from the content-addressed store, hash-verified

39 let chunkId = 0
40
41 function* handler(socket: Socket.Socket) {
42 const subscriptions = yield* FiberMap.make<string>()
43 const writeRaw = yield* socket.writer
44 const chunks = new Map<number, {
45 readonly parts: Array<Uint8Array>
46 count: number
47 bytes: number
48 }>()
49 let latestSequence = -1
50
51 function* writeGen(response: typeof ProtocolResponse.Type) {
52 const data = encodeResponse(response)
53 if (response._tag !== "Changes" || data.byteLength <= constChunkSize) {
54 return yield* writeRaw(data)
55 }
56 const id = chunkId++
57 for (const part of ChunkedMessage.split(id, data)) {
58 yield* writeRaw(encodeResponse(part))
59 }
60 }
61 const write = (response: typeof ProtocolResponse.Type) => Effect.gen(() => writeGen(response))
62
63 yield* Effect.fork(write(new Hello({ remoteId })))
64
65 function handleRequest(request: typeof ProtocolRequest.Type) {
66 switch (request._tag) {
67 case "Ping": {
68 return write(new Pong({ id: request.id }))
69 }
70 case "WriteEntries": {
71 if (request.encryptedEntries.length === 0) {
72 return write(
73 new Ack({
74 id: request.id,
75 sequenceNumbers: []
76 })
77 )
78 }
79 return Effect.gen(function*() {
80 const entries = request.encryptedEntries.map(({ encryptedEntry, entryId }) =>
81 new PersistedEntry({
82 entryId,
83 iv: request.iv,
84 encryptedEntry
85 })
86 )
87 const encrypted = yield* storage.write(request.publicKey, entries)
88 latestSequence = encrypted[encrypted.length - 1].sequence
89 return yield* write(
90 new Ack({
91 id: request.id,
92 sequenceNumbers: encrypted.map((e) => e.sequence)
93 })
94 )
95 })
96 }
97 case "RequestChanges": {
98 return Effect.gen(function*() {

Callers 1

EventLogServer.tsFile · 0.70

Calls 7

decodeRequestFunction · 0.85
writeFunction · 0.70
handleRequestFunction · 0.70
makeMethod · 0.65
forkMethod · 0.65
pipeMethod · 0.65
runMethod · 0.45

Tested by

no test coverage detected