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))
}
}