static Handler() { //current = new Handler(Guid.NewGuid().ToString()); _defaultSessionId = Guid.NewGuid().ToString(); _sessionHandlers = new ConcurrentDictionary<string, Handler>(); _sessionHandlers[_defaultSessionId]= new Handler(_defaultSessionId); }
public static Task <string> Process(string jsonRpc, object context = null) { return(Process(Handler.DefaultSessionId(), jsonRpc, context)); }
private static string ProcessInternal(string sessionId, string jsonRpc, object jsonRpcContext) { var handler = Handler.GetSessionHandler(sessionId); try { Tuple <JsonRequest, JsonResponse>[] batch = null; if (isSingleRpc(jsonRpc)) { batch = new [] { Tuple.Create(JsonConvert.DeserializeObject <JsonRequest>(jsonRpc), new JsonResponse()) }; } else { batch = JsonConvert.DeserializeObject <JsonRequest[]>(jsonRpc) .Select(request => new Tuple <JsonRequest, JsonResponse>(request, new JsonResponse())) .ToArray(); } if (batch.Length == 0) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new JsonResponse { Error = handler.ProcessParseException(jsonRpc, new JsonRpcException(3200, "Invalid Request", "Batch of calls was empty.")) })); } foreach (var tuple in batch) { var jsonRequest = tuple.Item1; var jsonResponse = tuple.Item2; if (jsonRequest == null) { jsonResponse.Error = handler.ProcessParseException(jsonRpc, new JsonRpcException(-32700, "Parse error", "Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.")); } else { jsonResponse.Id = jsonRequest.Id; if (jsonRequest.Method == null) { jsonResponse.Error = handler.ProcessParseException(jsonRpc, new JsonRpcException(-32600, "Invalid Request", "Missing property 'method'")); } else { var data = handler.Handle(jsonRequest, jsonRpcContext); if (data == null) { continue; } jsonResponse.Error = data.Error; jsonResponse.Result = data.Result; } } } var responses = new string[batch.Count(x => x.Item2.Id != null || x.Item2.Error != null)]; var idx = 0; foreach (var resp in batch.Where(x => x.Item2.Id != null || x.Item2.Error != null)) { responses[idx++] = JsonConvert.SerializeObject(resp.Item2); } return(responses.Length == 0 ? string.Empty : responses.Length == 1 ? responses[0] : string.Format("[{0}]", string.Join(",", responses))); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new JsonResponse { Error = handler.ProcessParseException(jsonRpc, new JsonRpcException(-32700, "Parse error", ex)) })); } }
internal static void ProcessJsonRpcState(JsonRpcStateAsync async, object jsonRpcContext = null) { ProcessJsonRpcState(Handler.DefaultSessionId(), async, jsonRpcContext); }