(requestMessage: RequestMessage)
| 499 | }; |
| 500 | |
| 501 | function handleRequest(requestMessage: RequestMessage) { |
| 502 | if (isDisposed()) { |
| 503 | // we return here silently since we fired an event when the |
| 504 | // connection got disposed. |
| 505 | return; |
| 506 | } |
| 507 | |
| 508 | function reply(resultOrError: any | ResponseError<any>, method: string, startTime: number): void { |
| 509 | let message: ResponseMessage = { |
| 510 | jsonrpc: version, |
| 511 | id: requestMessage.id |
| 512 | }; |
| 513 | if (resultOrError instanceof ResponseError) { |
| 514 | message.error = (<ResponseError<any>>resultOrError).toJson(); |
| 515 | } else { |
| 516 | message.result = resultOrError === void 0 ? null : resultOrError; |
| 517 | } |
| 518 | traceSendingResponse(message, method, startTime); |
| 519 | messageWriter.write(message); |
| 520 | } |
| 521 | function replyError(error: ResponseError<any>, method: string, startTime: number) { |
| 522 | let message: ResponseMessage = { |
| 523 | jsonrpc: version, |
| 524 | id: requestMessage.id, |
| 525 | error: error.toJson() |
| 526 | }; |
| 527 | traceSendingResponse(message, method, startTime); |
| 528 | messageWriter.write(message); |
| 529 | } |
| 530 | function replySuccess(result: any, method: string, startTime: number) { |
| 531 | // The JSON RPC defines that a response must either have a result or an error |
| 532 | // So we can't treat undefined as a valid response result. |
| 533 | if (result === void 0) { |
| 534 | result = null; |
| 535 | } |
| 536 | let message: ResponseMessage = { |
| 537 | jsonrpc: version, |
| 538 | id: requestMessage.id, |
| 539 | result: result |
| 540 | }; |
| 541 | traceSendingResponse(message, method, startTime); |
| 542 | messageWriter.write(message); |
| 543 | } |
| 544 | |
| 545 | traceReceivedRequest(requestMessage); |
| 546 | |
| 547 | let element = requestHandlers[requestMessage.method]; |
| 548 | let type: MessageType | undefined; |
| 549 | let requestHandler: GenericRequestHandler<any, any> | undefined; |
| 550 | if (element) { |
| 551 | type = element.type; |
| 552 | requestHandler = element.handler; |
| 553 | } |
| 554 | let startTime = Date.now(); |
| 555 | if (requestHandler || starRequestHandler) { |
| 556 | let cancellationSource = new CancellationTokenSource(); |
| 557 | let tokenKey = String(requestMessage.id); |
| 558 | requestTokens[tokenKey] = cancellationSource; |
no test coverage detected