/// <summary> /// Register a description of all the request methods supported by the RPC server /// </summary> public void RegisterRequestMethod(RequestType requestType, RequestHandler requestHandler) { requestMethods.Add(requestType.Method, new RequestMethod() { Type = requestType, HandleRequest = requestHandler }); }
public ResponseWaitState(RequestType requestType, string requestId, TaskCompletionSource<ResponseResultOrError> taskCompletionSource) { this.RequestType = requestType; this.RequestId = requestId; this.TaskCompletionSource = taskCompletionSource; }
public ResponseWaitState(RequestType requestType, string requestId, TaskCompletionSource <ResponseResultOrError> taskCompletionSource) { this.RequestType = requestType; this.RequestId = requestId; this.TaskCompletionSource = taskCompletionSource; }
/// <summary> /// Send an async request to the client and await later for the response or error /// </summary> public Task<ResponseResultOrError> SendRequest(RequestType requestType, object parameters) { JObject jsonMessage = new JObject(); PrepareJsonPRCMessage(jsonMessage); // Generate a unique id for the request int id = Interlocked.Increment(ref sequenceNumber); string requestId = id.ToString(); jsonMessage["id"] = requestId; jsonMessage["method"] = requestType.Method; if (parameters != null) { jsonMessage["params"] = JToken.FromObject(parameters); } // Send text message messageServer.SendMessage(jsonMessage.ToString(Formatting.None)); // Remember all elements which will be needed to handle correctly the response to the request TaskCompletionSource<ResponseResultOrError> taskCompletionSource = new TaskCompletionSource<ResponseResultOrError>(); ResponseWaitState responseWaitState = new ResponseWaitState(requestType, requestId, taskCompletionSource); responsesExpected.Add(requestId, responseWaitState); // The completion of the task will be signaled later, when the response arrives return taskCompletionSource.Task; }
private ResponseResultOrError CallSignatureHelp(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { SignatureHelp result = OnSignatureHelp((TextDocumentIdentifier)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallWorkspaceSymbol(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { List<SymbolInformation> result = OnWorkspaceSymbol((WorkspaceSymbolParams)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallRename(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { WorkspaceEdit result = OnRename((RenameParams)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallShutdown(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { shutdownReceived = true; OnShutdown(); resultOrError = new ResponseResultOrError() { result = null }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallInitialize(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { InitializeResult result = OnInitialize((InitializeParams)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message, data = new InitializeError() { retry = false } }; } return resultOrError; }
private ResponseResultOrError CallReferences(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { List<Location> result = OnReferences((ReferenceParams)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallHoverRequest(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { Hover result = OnHover((TextDocumentPosition)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallDocumentSymbol(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { List<SymbolInformation> result = OnDocumentSymbol((TextDocumentIdentifier)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallDocumentRangeFormatting(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { List<TextEdit> result = OnDocumentRangeFormatting((DocumentRangeFormattingParams)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
private ResponseResultOrError CallCompletionResolve(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { CompletionItem result = OnCompletionResolve((CompletionItem)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch (Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }
// --- Generic notification and request handlers --- private ResponseResultOrError CallCodeAction(RequestType requestType, object parameters) { ResponseResultOrError resultOrError = null; try { List<Command> result = OnCodeAction((CodeActionParams)parameters); resultOrError = new ResponseResultOrError() { result = result }; } catch(Exception e) { resultOrError = new ResponseResultOrError() { code = ErrorCodes.InternalError, message = e.Message }; } return resultOrError; }