MCPcopy Index your code
hub / github.com/microsoft/vscode-languageserver-node / _createMessageConnection

Function _createMessageConnection

jsonrpc/src/main.ts:357–1044  ·  view source on GitHub ↗
(messageReader: MessageReader, messageWriter: MessageWriter, logger: Logger, strategy?: ConnectionStrategy)

Source from the content-addressed store, hash-verified

355}
356
357function _createMessageConnection(messageReader: MessageReader, messageWriter: MessageWriter, logger: Logger, strategy?: ConnectionStrategy): MessageConnection {
358 let sequenceNumber = 0;
359 let notificationSquenceNumber = 0;
360 let unknownResponseSquenceNumber = 0;
361 const version: string = '2.0';
362
363 let starRequestHandler: StarRequestHandler | undefined = undefined;
364 let requestHandlers: { [name: string]: RequestHandlerElement | undefined } = Object.create(null);
365 let starNotificationHandler: StarNotificationHandler | undefined = undefined;
366 let notificationHandlers: { [name: string]: NotificationHandlerElement | undefined } = Object.create(null);
367
368 let timer: NodeJS.Timer | undefined;
369 let messageQueue: MessageQueue = new LinkedMap<string, Message>();
370 let responsePromises: { [name: string]: ResponsePromise } = Object.create(null);
371 let requestTokens: { [id: string]: CancellationTokenSource } = Object.create(null);
372
373 let trace: Trace = Trace.Off;
374 let tracer: Tracer | undefined;
375
376 let state: ConnectionState = ConnectionState.New;
377 let errorEmitter: Emitter<[Error, Message | undefined, number | undefined]> = new Emitter<[Error, Message, number]>();
378 let closeEmitter: Emitter<void> = new Emitter<void>();
379 let unhandledNotificationEmitter: Emitter<NotificationMessage> = new Emitter<NotificationMessage>();
380
381 let disposeEmitter: Emitter<void> = new Emitter<void>();
382
383 function createRequestQueueKey(id: string | number): string {
384 return 'req-' + id.toString();
385 }
386
387 function createResponseQueueKey(id: string | number | null): string {
388 if (id === null) {
389 return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
390 } else {
391 return 'res-' + id.toString();
392 }
393 }
394
395 function createNotificationQueueKey(): string {
396 return 'not-' + (++notificationSquenceNumber).toString();
397 }
398
399 function addMessageToQueue(queue: MessageQueue, message: Message): void {
400 if (isRequestMessage(message)) {
401 queue.set(createRequestQueueKey(message.id), message);
402 } else if (isResponseMessage(message)) {
403 queue.set(createResponseQueueKey(message.id), message);
404 } else {
405 queue.set(createNotificationQueueKey(), message);
406 }
407 }
408
409 function cancelUndispatched(_message: Message): ResponseMessage | undefined {
410 return undefined;
411 }
412
413 function isListening(): boolean {
414 return state === ConnectionState.Listening;

Callers 1

createMessageConnectionFunction · 0.85

Calls 15

fireMethod · 0.95
throwIfClosedOrDisposedFunction · 0.85
computeMessageParamsFunction · 0.85
traceSendNotificationFunction · 0.85
throwIfNotListeningFunction · 0.85
undefinedToNullFunction · 0.85
traceSendingRequestFunction · 0.85
isClosedFunction · 0.85
isDisposedFunction · 0.85
throwIfListeningFunction · 0.85
forEachMethod · 0.80

Tested by

no test coverage detected