func handle()

in Sources/LanguageServerProtocolJSONRPC/JSONRPCConnection.swift [261:290]


  func handle(_ message: JSONRPCMessage) {
    switch message {
    case .notification(let notification):
      notification._handle(receiveHandler!, connection: self)
    case .request(let request, id: let id):
      let semaphore: DispatchSemaphore? = syncRequests ? .init(value: 0) : nil
      request._handle(receiveHandler!, id: id, connection: self) { (response, id) in
        self.sendReply(response, id: id)
        semaphore?.signal()
      }
      semaphore?.wait()

    case .response(let response, id: let id):
      guard let outstanding = outstandingRequests.removeValue(forKey: id) else {
        log("Unknown request for \(id)", level: .error)
        return
      }
      outstanding.replyHandler(.success(response))
    case .errorResponse(let error, id: let id):
      guard let id = id else {
        log("Received error response for unknown request: \(error.message)", level: .error)
        return
      }
      guard let outstanding = outstandingRequests.removeValue(forKey: id) else {
        log("No outstanding requests for request ID \(id)", level: .error)
        return
      }
      outstanding.replyHandler(.failure(error))
    }
  }