コード例 #1
0
ファイル: Handler.cs プロジェクト: CoiniumServ/JSON-RPC.NET
 static Handler()
 {
     //current = new Handler(Guid.NewGuid().ToString());
     _defaultSessionId = Guid.NewGuid().ToString();
     _sessionHandlers = new ConcurrentDictionary<string, Handler>();
     _sessionHandlers[_defaultSessionId]= new Handler(_defaultSessionId);
 }
コード例 #2
0
 public static Task <string> Process(string jsonRpc, object context = null)
 {
     return(Process(Handler.DefaultSessionId(), jsonRpc, context));
 }
コード例 #3
0
        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))
                }));
            }
        }
コード例 #4
0
 internal static void ProcessJsonRpcState(JsonRpcStateAsync async, object jsonRpcContext = null)
 {
     ProcessJsonRpcState(Handler.DefaultSessionId(), async, jsonRpcContext);
 }