private void HandleRequest(string method, NumberOrString id, string json) { if (handlers.TryGetRequestHandler(method, out var handler)) { try { var tokenSource = new CancellationTokenSource(); handlers.AddCancellationTokenSource(id, tokenSource); var request = Serializer.Instance.Deserialize(handler.RequestType, json); var requestResponse = (ResponseMessageBase)handler.Handle(request, this, tokenSource.Token); handlers.RemoveCancellationTokenSource(id); requestResponse.id = id; SendMessage(requestResponse); } catch (Exception ex) { Console.Error.WriteLine(ex); var requestErrorResponse = Reflector.CreateErrorResponse(handler.ResponseType, ex.ToString()); SendMessage(requestErrorResponse); } } else { Console.Error.WriteLine("WARN: server does not support a request '" + method + "'"); } }
public NumberOrString Next() { var ns = new NumberOrString(_id); _id = (_id == long.MaxValue) ? 0L : _id + 1; return(ns); }
public NumberOrString Next() { NumberOrString ns = new NumberOrString(id); id = id == long.MaxValue ? 0L : id + 1; return(ns); }
private void HandleResponse(NumberOrString id, string json) { if (Handlers.TryRemoveResponseHandler(id, out ResponseHandler handler)) { object response = Serializer.Instance.Deserialize(handler.ResponseType, json); handler.Handle(response); } }
public void SendCancellation(NumberOrString id) { var message = new NotificationMessage <CancelParams> { method = "$/cancelRequest", @params = new CancelParams { id = id } }; SendMessage(message); }
private void HandleCancellation(string json) { NotificationMessage <CancelParams> cancellation = (NotificationMessage <CancelParams>)Serializer.Instance.Deserialize(typeof(NotificationMessage <CancelParams>), json); NumberOrString id = cancellation.Params.Id; if (Handlers.TryRemoveCancellationTokenSource(id, out CancellationTokenSource tokenSource)) { tokenSource.Cancel(); } }
private void HandleResponse(NumberOrString id, string json) { if (handlers.TryRemoveResponseHandler(id, out var handler)) { var response = Serializer.Instance.Deserialize(handler.ResponseType, json); handler.Handle(response); } else { var idString = (id.IsLeft) ? id.Left.ToString() : id.Right; Console.Error.WriteLine("WARN: server does not expect a response to '" + idString + "'"); } }
private void HandleRequest(string method, NumberOrString id, string json) { if (Handlers.TryGetRequestHandler(method, out RequestHandler handler)) { try { CancellationTokenSource tokenSource = new CancellationTokenSource(); Handlers.AddCancellationTokenSource(id, tokenSource); object request = Serializer.Instance.Deserialize(handler.RequestType, json); ResponseMessageBase requestResponse = (ResponseMessageBase)handler.Handle(request, this, tokenSource.Token); Handlers.RemoveCancellationTokenSource(id); requestResponse.Id = id; SendMessage(requestResponse); } catch (Exception ex) { Console.Error.WriteLine(ex); ResponseMessageBase requestErrorResponse = Reflector.CreateErrorResponse(handler.ResponseType, ex.ToString()); SendMessage(requestErrorResponse); } } }
internal ResponseHandler(NumberOrString id, Type responseType, ResponseHandlerDelegate handler) { Id = id; ResponseType = responseType; this.handler = handler; }
internal bool TryRemoveCancellationTokenSource(NumberOrString id, out CancellationTokenSource tokenSource) { return(cancellations.TryRemove(id, out tokenSource)); }
internal void RemoveCancellationTokenSource(NumberOrString id) { cancellations.Remove(id); }
internal void AddCancellationTokenSource(NumberOrString id, CancellationTokenSource tokenSource) { cancellations.Set(id, tokenSource); }
internal bool TryRemoveResponseHandler(NumberOrString id, out ResponseHandler responseHandler) { return(responseHandlers.TryRemove(id, out responseHandler)); }
internal ResponseHandler(NumberOrString id, Type responseType, ResponseHandlerDelegate handler) { _id = id; _responseType = responseType; _handler = handler; }