MCPcopy Index your code
hub / github.com/callstack/agent-device / createSocketServer

Function createSocketServer

src/daemon/server/transport.ts:30–134  ·  view source on GitHub ↗
(handleRequest: DaemonInvokeFn)

Source from the content-addressed store, hash-verified

28};
29
30export function createSocketServer(handleRequest: DaemonInvokeFn): DaemonServer {
31 const sockets = new Set<net.Socket>();
32 const server: DaemonServer = net.createServer((socket) => {
33 sockets.add(socket);
34 socket.on('close', () => sockets.delete(socket));
35 let buffer = '';
36 let inFlightRequests = 0;
37 const activeRequestIds = new Set<string>();
38 let canceledInFlight = false;
39 const cancelInFlightRunnerSessions = () => {
40 if (canceledInFlight || inFlightRequests === 0) return;
41 canceledInFlight = true;
42 for (const requestId of activeRequestIds) {
43 markRequestCanceled(requestId);
44 }
45 emitDiagnostic({
46 level: 'warn',
47 phase: 'request_client_disconnected',
48 data: {
49 inFlightRequests,
50 },
51 });
52 void (async () => {
53 try {
54 const deadline = Date.now() + disconnectAbortMaxWindowMs;
55 while (inFlightRequests > 0 && Date.now() < deadline) {
56 const { abortAllIosRunnerSessions } =
57 await import('../../platforms/apple/core/runner/runner-client.ts');
58 await abortAllIosRunnerSessions();
59 if (inFlightRequests <= 0) break;
60 await sleep(disconnectAbortPollIntervalMs);
61 }
62 } catch (err) {
63 emitDiagnostic({
64 level: 'error',
65 phase: 'request_client_disconnect_abort_failed',
66 data: {
67 message: err instanceof Error ? err.message : String(err),
68 inFlightRequests,
69 },
70 });
71 }
72 })();
73 };
74 socket.setEncoding('utf8');
75 socket.on('close', cancelInFlightRunnerSessions);
76 socket.on('error', cancelInFlightRunnerSessions);
77 socket.on('data', async (chunk) => {
78 const parsed = consumeTextLines(buffer, chunk);
79 buffer = parsed.buffer;
80 for (const line of parsed.lines) {
81 let response: DaemonResponse;
82 inFlightRequests += 1;
83 let requestIdForCleanup: string | undefined;
84 let streamProgress = false;
85 try {
86 const req = JSON.parse(line) as DaemonRequest;
87 streamProgress = shouldStreamRequestProgress(req);

Callers 2

openDaemonServersFunction · 0.90

Calls 15

consumeTextLinesFunction · 0.90
resolveRequestTrackingIdFunction · 0.90
registerRequestAbortFunction · 0.90
isRequestCanceledFunction · 0.90
withRequestProgressSinkFunction · 0.90
normalizeErrorFunction · 0.90
clearRequestCanceledFunction · 0.90
deleteMethod · 0.80

Tested by

no test coverage detected